• 締切済み

EXCELマクロで日付をYYYYMMDDに変換

EXCELマクロで、ドット記号有りの日付を、ドットなしの形式(YYYYMMDD)に変換したいです。 ドット有りとは、たとえば下記のようなものです  2016.9.01  2016.09.1 2016.9.1 2016.09.01 これを、20160901のようにするには、Replaceでうまく置換できれば良いのですが、ゼロが消えてしまったりしてうまくいきません。 マクロでどのように記述すればよいでしょうか? エクセルのバージョンは2010です。

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 例えば、A2以下に       A列 1行目   (空欄) 2行目  2016.9.01 3行目  2016.09.1 4行目  2016.9.1 5行目  2016.09.01 という具合に元データが入力されていて、A列のデータを基にしてB列にドットなしの形式(YYYYMMDD)に変換した値を出力したいという場合には、一例としては以下の様なVBAのマクロになります。 Sub QNo9242176_EXCELマクロで日付をYYYYMMDDに変換() Const FirstRow = 2 '元データが入力されている最初の行 Const DataCouumn = "A" '元データが入力されている列 Const OutputCouumn = "B" '変換後の値を出力する列 Dim i As Long, buf As Variant, LastRow As Long LastRow = Range(DataCouumn & Rows.Count).End(xlUp).row If LastRow < FirstRow Then Exit Sub For i = FirstRow To LastRow buf = Range(DataCouumn & i).Value buf = Replace(buf, ".", "/") If buf <> "" And IsDate(buf) Then buf = Format(buf, "yyyymmdd") Range(OutputCouumn & i).Value = buf End If Next i End Sub  尚、「2016.9.01」などの様なドット付きの値が、最初から変数 buf に入っていて、そこから変数 buf に入っている値をドットなしの形式(YYYYMMDD)に変換したいという事でしたら、上記のVBAの構文の中の buf = Replace(buf, ".", "/") If buf <> "" And IsDate(buf) Then buf = Format(buf, "yyyymmdd") Range(OutputCouumn & i).Value = buf End If という部分の処理だけを行えば良い事になります。  ついでにワークシート関数を使った例に関しても挙げておきますと、上記のVBAと同じ様にB2以下に結果を出力するのであれば、B2セルに次の関数を入力してから、B2セルをコピーして、B3以下に貼り付けて下さい。 =IF(COUNTIF($A2,"*?.*?.*?"),IFERROR(TEXT(SUBSTITUTE($A2,".","/"),"yyyymmdd")+0,""),"")

  • chie65535
  • ベストアンサー率43% (8521/19370)
回答No.4

因みに =TEXT(SUBSTITUTE(A1,".","/"),"YYYYMMDD") の式でも可能ですが、この式の場合は、不正な日付になると変換してくれないので注意が必要です。 例えば「2016.2.30」とか「2015.2.29」とか「2016.11.31」など「日付として有り得ない値」が指定されると、上手く変換しません。 当方が最初に回答した =TEXT(LEFT(A1,FIND(".",A1)-1),"0000")&TEXT(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1),"00")&TEXT(RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1)+1)),"00") の式の場合は、13月とか14月とか、32日とか33日とかの「不正な日付」でも、それなりに変換します(日付として正しい値かどうかは関知しない)

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは 選択した範囲が矩形で1列なら、 Sub test()   With Selection     .TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _     Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _     :=Array(1, 5), TrailingMinusNumbers:=True     .NumberFormatLocal = "yyyymmdd"   End With End Sub とかでも。

  • chie65535
  • ベストアンサー率43% (8521/19370)
回答No.2

マクロで書かなくても、セルに以下の式を入力すれば良い。 =TEXT(LEFT(A1,FIND(".",A1)-1),"0000")&TEXT(MID(A1,FIND(".",A1)+1,FIND(".",A1,FIND(".",A1)+1)-FIND(".",A1)-1),"00")&TEXT(RIGHT(A1,LEN(A1)-FIND(".",A1,FIND(".",A1)+1)),"00")

  • Chiquilin
  • ベストアンサー率30% (94/306)
回答No.1

数式じゃいかんのかね。 =TEXT(SUBSTITUTE(A1,".","/"),"yyyymmdd") For Each r In Selection If r.Value <> "" Then r.Value = Val(Format(Replace(r.Value, ".", "/"), "yyyymmdd")) Next r

関連するQ&A

  • VBA/エクセルの日付入力でYYYYMMDD

    エクセル2013です。 特定のセルに日付を入力してもらうのですが、人によりさまざまな入力をされてしまいます。 どんな入力でも日付であれば、シリアル値なのであとからなんとかなるのですが、困るのはYYYYMMDDの連続数字、例えば今日なら20140712と入力されてしまうことです。 入力規則で排除したいのですが、それは許されず、20140712も日付として扱わなければならなくなりそうです。 そこでマクロで対処しようと以下のコードを書きました。 Private Sub Worksheet_Change(ByVal Target As Range)   Select Case Target.Address(0, 0)     Case "D2", "F2", "C4"       If Target.Value = "" Then Exit Sub       If IsDate(Target.Value) Then         Target.NumberFormatLocal = "yyyy/m/d"       Else         Application.EnableEvents = False         Target.Value = CDate(Format(Target.Value, "@@@@/@@/@@"))         Application.EnableEvents = True       End If     Case Else       Exit Sub   End Select End Sub これで最初はうまくいき、20140712と入力されても、ちゃんと2014/7/12になります。 ところが、同じセルに再度YYYYMMDD数字形式で入力すると、実行時エラー「オーバーフローしました」になってしまいます。多分セルが、YYYYMMDDの数字をシリアル値として見てありえない日付と判断したのだと思います。 どのようにコードを修正したらよろしいでしょうか? もう1点、日付をYYYYMMDDの連続数字で入力することは普通、エクセルではあまり見たことないですが、これって一般的な方法なのでしょうか?

  • エクセルでマクロを用い日付をテキスト化したいのですが。

    エクセルで日付をテキスト化するのに、マクロをつかって自動化させたいと考えています。 以下のようなデータを扱っています。 日付  その他  その他  その他 2007/4/26 2007/4/28 2007/5/12 2007/6/12 こういったデータがあり、日付の列を選択し、置換→200を'200にすることで日付をテキスト化したいと思っています。 マクロを作成中は問題なく、置換し、テキスト化が出来ますが。 一度日付データを消し、日付を入れてマクロを実行すると 4/26/'2007 4/28/'2007 5/12/'2007 6/12/'2007 といった感じで実行され、正しくテキスト化されません。 質問にお答えしていただけると大変ありがたいです。 よろしくお願いします。 ※ちなみにマクロは自動記録方式のみで作っています。VBAは修正程度の知識しかないです。

  • EXCELでマクロを用い日付をテキスト化したいのですが。

    エクセルで日付をテキスト化するのに、マクロをつかって自動化させたいと考えています。 以下のようなデータを扱っています。 日付  その他  その他  その他 2007/4/26 2007/4/28 2007/5/12 2007/6/12 こういったデータがあり、日付の列を選択し、置換→200を'200にすることで日付をテキスト化したいと思っています。 マクロを作成中は問題なく、置換し、テキスト化が出来ますが。 一度日付データを消し、日付を入れてマクロを実行すると 4/26/'2007 4/28/'2007 5/12/'2007 6/12/'2007 といった感じで実行され、正しくテキスト化されません。 質問にお答えしていただけると大変ありがたいです。 よろしくお願い致します。 ※ちなみにマクロは自動記録方式のみで作っています。VBAは修正程度の知識しかないです。

  • Excelでの数式を使った日付変換方法

    Excelでテキストファイルから取り込んだ日付を変換したいのですがうまくいきません。 詳細は下記のとおりです。どうかよろしくお願いします。 テキストファイルでは一区切りに西暦と月が入っています。(日はなし) (例:200604) これをExcelで取り込んで最終的には和暦と月に分けて別セルにしたい。 (例:平成18 と 4) (※月は04の場合4となるように) 年月しかないため日付として認識されず、また認識してもシリアル値からは違う日になってしまうため、うまく変換できません。 取り込む方法、Excelでの使用する数式など細かく教えていただけたらと思います。マクロは使わない方法でお願い致します。

  • エクセルマクロで日付のカレンダー入力

    エクセルのマクロでカレンダー形式による日付の入力をしたいのですが、下記にアドインマクロが掲載されていると、このサイトで以前に回答されていましたが、アドインにて追加するのではなく、現在、使用している、マクロに追加したいと思っています。 http://www.h3.dion.ne.jp/~sakatsu/ktfunc_main.htm お願いします。

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

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

  • エクセルの日付について

    こんにちは。 教えてください。 エクセルで2006/2/9をyyyymmdd形式に変換する際、画面上では表示形式をいじれば変換できますが、実際の数値(上部のfxの隣のバーにでてくる数値)は2006/2/9のままですよね。 データを移動させるのに、新しいファイルのところにyyyymmdd形式で表示させたいのですが、そのファイルは制限がかかっていて、表示形式を変換することができません。 元のデータで表示形式を変換しても、数値自体はそのままなので、新しいファイルにコピペすると、yyyy/m/d形式の数値のままではられてしまします。 これを解決したいのですが、元のデータの表示形式ではなく数値自体を、2006/2/9から20060209に変換することはできますか? わかりにくいかもしれませんが宜しくお願いします。

  • エクセルマクロ

    入力したワークシートを 新しいブックにコピーして保存するマクロを作成しました。 ただ下記の様に保管すると、 数式もそのまま元のエクセルファイルの数式を参照してしまいます。 下記のマクロをあまり変更しないで、 値貼付け(もしくは値貼付けしながら、新しいブックへコピー) するにはどの様に変更するといいでしょうか? よろしくお願いします。 'Sub newfilesave() Sheets("Sheet1").Copy '名前を付け、ファイル形式も決めてデスクトップに日付を付けて保存する。。 'ActiveWorkbook.SaveAs _ ' Filename:="C:\Users\xxxxx\Desktop\" & Format(Now(), "yyyymmdd_hhmm"), _ ' FileFormat:=xlOpenXMLWorkbook 'End Sub

  • エクセルで置換のマクロの際

    Selection.Replace What:="あ", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False エクセルのマクロで置換をする際に 自動記録で書くとこうなります。 「あ」を「(空白)」におきかえる内容ですが 置き換え候補がたくさんある場合は 上記の記述をくりかえし記述するしかないのでしょうか? 例 「あ」を「」に 「い」「」に   というような具合です

  • Excelの印刷フッターの日付形式

    Excelの印刷条件の設定でレフトフッターに日付+時間を表示させるのですが、この日付と時間の形式がWindowsのコントロールパネルの「地域のオプション」で設定した形式に自動的に設定されるようになっています(と思います)。これをExcel上から自分の好みの形式に変換する方法をご存知でしたら教えていただけませんか? 好みの形式は 06/28/2001 06:15:49 PM JST です。できればマクロでの記述方法を教えたいただければ幸いです。

専門家に質問してみよう