• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:年月日をつけたい VBA)

年月日をつけたい VBA

このQ&Aのポイント
  • エクセルのA列に検針請求書(20120126~20120222).jpgといった形式のファイル名があります。
  • これを検針請求書(2012年10月22日~2012年11月24日).jpgという形に置換したいのですが、VBAのfor文やformat関数をどのように使用すれば良いでしょうか。
  • 回答をお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

固定長文字列ですから、決まった長さの文字列を操作するだけです。 作成例:文字列を切り出してformat関数を使って再結合する sub macro1()  dim h as range  dim d1 as string  dim d2 as string  for each h in range("A1:A" & range("A65536").end(xlup).row)   d1 = format(mid(h, 7, 8), "0000年00月00日")   d2 = format(mid(h, 16, 8), "0000年00月00日")   h = "検針請求書(" & d1 & "~" & d2 & ").jpg"  next end sub #別の方法:決まった位置に決まった言葉を挿入する sub macro2()  dim h as range  for each h in range("A1:A" & range("A65536").end(xlup).row)   h = application.replace(h, 24, 0, "日")   h = application.replace(h, 22, 0, "月")   h = application.replace(h, 20, 0, "年")   h = application.replace(h, 15, 0, "日")   h = application.replace(h, 13, 0, "月")   h = application.replace(h, 11, 0, "年")  next end sub

ukfnklod7
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

ちょっと違う方法になるかな? Sub try() Dim myReg As Object Dim r As Range Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "(\d{4})(\d{2})(\d{2})~(\d{4})(\d{2})(\d{2})" For Each r In Range("A1", Cells(Rows.Count, 1).End(xlUp)) If myReg.Test(r.Value) Then _ r.Value = myReg.Replace(r.Value, "$1年$2月$3日~$4年$5月$6日") Next Set myReg = Nothing End Sub 一例になれば。

ukfnklod7
質問者

お礼

ありがとうございました。

回答No.2

dim i as integer for i = 1 to 9 cells(i, "b").value あるいは range("b"&i).value = ~ next i とか dim r as variant for each r in range("a1:a9") r.value = ~ next r とか。 ~の部分は、cells(i, "a").value とか r.value とかに対して、Left、Mid、Right、Format 関数ですね(上の 2 コードそれぞれの 3 行目の右辺において)。Left & Format(Mid(r.value)) & Right みたいに。で、同じセルに、できた文字列を代入・上書き(上の 2 コードそれぞれの 3 行目の左辺へ)。 Mid をたくさん使えば Format は不要との意味もありますが、式が長くなるんで、使ったほうがスマートには見えそう。 「検針~.jpg」という文字列中の、Mid とかでちょん切ってできる各部品は、それぞれのための変数・定数をあらかじめ宣言しておいたほうが、見やすいコードになります。あと、上の 2 コードでは each のほうにしたほうが短くスッキリ書けますね。r が何回も出てくるので。

ukfnklod7
質問者

お礼

ありがとうございました。

関連するQ&A