• ベストアンサー

文字列、日付をint型で取得したい

vbaに関する質問です。 シートに入力されている文字列をint型として受け取りたいのですが、 その方法がイマイチ分かりません。 具体的には、 (例) 2016/01/01 を 20160101 という数字(二千十六万百一)として受け取りたいです。 因みに、上記例の「2016/01/01」の書式フォーマットは日付ではなく文字列として入力してあります。 また、現在日時も上記と同じ用に数字として受け取りたいです。 本日の日付が「2017年1月6日」ならば「20160106」のint型で。 回答よろしくお願いします。。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Integer型の扱える数値の範囲は65,535までで、20,160,101は格納できませんから、Long型を使ってください。 > 2016/01/01 > 文字列として入力してあります。 A1に入力されているとして、 Sub test()  MsgBox myfunc(Range("A1")) End Sub Function myfunc(rng As Range) As Long Dim src As String src = rng.Text myfunc = Val(Mid(src, 1, 4) & Mid(src, 6, 2) & Mid(src, 9, 2)) End Function とか。

sahksas
質問者

お礼

回答ありがとうございます。 成る程、普段大きな数字を扱わないので気付けませんでした…

その他の回答 (2)

回答No.3

A1にデータが入っていて、Long型変数Lへ代入する場合 その1 L = CLng(Format(Range("a1").Value, "yyyymmdd")) その2 Dim l As Long L = CLng(Replace(Range("a1").Value, "/", "")) 現在日時だと、Longでも入らないからDoubleを使って Dim D As Double D = CDbl(Format(Now(), "yyyymmddhhnnss"))

sahksas
質問者

お礼

回答ありがとうございます。 Clng、Cdblを使うと大分スマートに必要な値を求められますね… 参考になりました!

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

エクセルの日付の仕組みを知っていて、こういうことを聞いているのかな。 できた後の利用目的は何? エクセルのセルの日付は日付シリアル値という整数で表されて保持されている。<--源データ そこから、「年」や「月」や「日」などの、私共の認識する常識的な数字は、エクセルの関数を使わないと出せません。よく知っている人は自分で計算できるでしょうが、質問表現ぶりからして、質問者はそうは思えないな。 (Googleででも、「エクセル 日付シリアル値」でぜひ照会して勉強のこと。 なぜエクセル設計者はこんな仕組みに至ったか想像するのも楽しいと思うよ。) だから Y=年の数字は=YEAR(その日の日付シリアル値) M=月の数字は=MONTH(その日の日付シリアル値) D=日の数字hは=DAY(その日の日付シリアル値) で出して、年は10000の単位に、月は100の単位に日はそのまま1の単位にする計算をするほかない。 例データ A1 2017/1/6 書式は日付 B1 式 =YEAR(A1)*10000 書式 数値 見てくれ 20170000 C1 式 =MONTH(A1)*100 書式 数値 見てくれ 100 D1 式 =DAY(A1)*1   書式 数値 見てくれ 6 求めるものは =B1+C1+D1 結果 見てくれ 20170106 「見てくれ」とは書式適用後のそのセルで見えて居る状態(我流表現です)。

sahksas
質問者

お礼

回答ありがとうございます。 扱うファイル内の値が、日付としてでは無く文字列になっていた為シリアル値での取り出しが出来ませんでした。詳しく書いておくべきでしたね。 文字列でもシリアル値で取り出す方法がもしあったのなら参考に教えて頂きたかったです…

関連するQ&A