• ベストアンサー

文字列、日付を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/17068)
回答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

  • Excel VBAで文字列の日付を判定

    Excel VBAで文字列の日付を判定 文字列の書式で”19900101”などとセルに入力されている場合に実際に存在する日付かを判定する方法はありますでしょうか? たとえば、19990132などと入力されている場合はエラーにしたいのです。ISDATEを使うのかともおもいましたがうまくいきません。 よろしくお願いします。

  • int型の文字列について

    文字列を扱う場合はchar型をつかいますが、int型がchar型より大きいメモリ領域を確保しているとすると、int型で文字列を扱っても問題はないのではと思いました。 実際にやってみると、処理系によって問題なく作動するものとそうでないものが有りますが、基本的な考え方として文字列をint型で扱うことは問題があるのでしょうか? ご存知の方よろしくお願いいたします。 <補足> 要は、255以下の数字を扱うときに、char型でないといけないという制約はなく当然int型を使えるように、文字列においてint型を使うことは、基本的な考え方として問題なのかをお聞きしたい。 当然、処理系において、ルール的に禁じている場合は使えないということは理解できますが。

  • エクセルの文字列を日付で計算したい

    お世話になってます。 仕事で外部システムからデータを抜き出しているのですが、 日付が文字データとして抜き出されます。 ※西暦下2桁と月日の6文字が、文字データとして抜き出されます。 普段、下記の操作(1)~(4)を都度行っているのですが、 ほかにもっと簡単なやり方はないでしょうか? (1)A列、B列に 20000000 を加算 (2)C列に関数を入力  =DATE(INT(A2/10000),INT(MOD(A2,10000)/100),MOD(A2,100)) (3)D列に関数を入力  =DATE(INT(B2/10000),INT(MOD(B2,10000)/100),MOD(B2,100)) (4)E列に数式を入力  =D2-C2 例:サンプル A列   B列    発注日 納品日    121201 121211  121211 130105  

  • Excelで日付の書式を指定文字列に変換

    Excelで日付の書式を指定文字列に変換 セルから日付情報を得て、文字列でyyyymmddに変換するには、どのようにすればいいでしょうか。VBA・関数のどちらでもかまいません。よろしくお願いします。

  • int型での文字列の扱いについて

    整数はint型、文字はchar型を使うのが原則のようですが、 文字はコンピュータの中で数字で扱われていることと、 char型が0~255、int型がそれ以上の範囲の数字を扱えることを考えると 文字を扱う時もint型でかまわないのでは?と思いました。 実際、int型で1文字出力できました。具体的には下です。 int a; a=getchar(); printf("%c\n",a); return 0; しかし、文字列をint型で扱おうとすると、コンパイル時にエラーとなります。 int a[50]="Hello"; printf("%s\n",a); return 0; なぜ、int型では文字列が扱えないのか理解できません。

  • エクセルの日付書式を文字書式に変換

    エクセルで日付書式yyyy.mm.dd(例)を文字に直すと88418(例)になってしまいます。 やりたいことは日付で入力したものを文字書式に直し別シートに貼り付けたいのですがうまくいきません。 いい方法お教えていただけませんでしょうか。よろしくお願いします。

  • エクセル 文字列を日付に変更したい

    勘定奉行21を使っています。 総勘定元帳をエクセルにエクスポートして、編集することが多いのですが、日付が文字列になってしまって困っています。これを正しい日付として認識させたいです。 エクセルに出力される日付の例 16 430 16 8 1 161020 など、和暦で表示されていて、月日は一桁の場合は半角スペースが入るようになっています。 スペースが入っているものは文字列として、3番目のようにスペースがないものについては161020という数値として認識されます。 現在行っている方法 A列に上記が入っているとして、B列に数式を入れます。 1)A列を選択し、置換えで半角スペースを"0"(ゼロ)にします。 2)B列に空白の列を挿入します。 3)B列に以下の式を入れ、下までコピーします。 =IF(A6="","",DATEVALUE("H"&MID(A6,1,2)&"/"&MID(A6,3,2)&"/"&MID(A6,5,2))) 4)B列を書式を選択して貼り付けで値にします。 5)A列を削除します。 6)A列の書式設定でユーザー設定「ge.mm.dd」と入れます。 ※B列より右側には15行ほど他のデータが入っています。 ※この日付がA6から下へ続いているのは毎回同じなのですが、出力する時によって全体の行数は増減します。 ※数式のIF部分については、値の貼り付けにした時に、エラーが残ってしまうので入れてあります。 ※H16.01.20の様な表示形式にしたいです。 今のことろは、上記をマクロで記録して、貼り付け用のシートを作って毎回使えば良いか…と考えているのですが、どうもスマートな気がしません。 他に何か良い方法が思いつく方がいらっしゃいましたら、宜しくお願い致します。 ちなみにVBAは分かりません(^^;

  • エクセルで文字列を日付に変更したいのですが

    テキストデータをエクセルに変換したのですが、日付が6桁の和暦の文字列のため書式表示で変更しても正しい日付に変わりません。どうすればいいのかわからないので、どなたかお詳しい方教えていただけませんでしょうか。 例えば 180508 150530 080712 といった数字を H18.05.08 もしくは 2006/05/08 H15.05.30 もしくは 2003/05/30 H08.07.12 もしくは 1996/07/12 に、変更できないものでしょうか。

  • EXCELの日付データを文字列に変換したい

    EXCELの和暦形式の日付データを文字列に変換する方法を教えてください。 たとえば、H17.9.2をそのまま文字列に変換したいのです。 最初から文字列データとして入力すれば問題ないのですが、日付データ(標準)として入力されたデータを書式→セル→文字列で変換するとシリアル値に変わってしまいます。(H17.9.2→38597) どうしたらよいのでしょうか。お願いします。

  • "/"がある文字列が勝手に日付型になってしまい困っています

    "/"がある文字列が勝手に日付型になってしまい困っています VBAのセルの書式設定について質問があります。 マラソンの順位や個人情報をまとめた表があり、その表がカテゴリ別に半角スペースで区切られているデータをセルごとにまとめています。 順位は"1/3467"のように"個人の順位/参加者"という形式なのですが、カテゴリ毎に分割してセルに文字列を入れると"Jan-67"となっており日付型として認識されてしまいます。 (個人順位が13位以降は"13/3467"といった形式に戻ることから、最初の1位から12位までの間だけだと思われます) そこで、2つほど対策をしてみました。 1,セルの書式設定を変更する  →一通り確認してみましたが、どれも変更できませんでした   ユーザー定義の使い方次第で可能かもしれませんが、分かりませんでした。 2,"/"の位置で分割して、個人順位と参加者に分けて管理する。  →"3467/1/1"という文字列に変換されているため、"/"で分割しても参加人数は認識できますが、   個人順位が日付のような形式になってしまいます。 順位の形式は変えても変えなくても構いませんので、文字列を日付型に変換せずに保管する方法をご存知でしたら、ご教授いただけないでしょうか。 よろしくお願いいたします。