• ベストアンサー

Excelマクロで・・・

ワークシート名が「AZ20020101」というような形で付いています。 このシート名から下8桁を日付型で(2002/1/1のような形で)セルに取り出すマクロを作りたいのですがどのようにしたらいいでしょうか。 お分かりの方いましたら大至急お願いします。

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

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

回答は既出とも言えますが、丁寧に且つ完結した形にすれば下記になります。少数例でテスト済み。 Sub test01() Workbooks(1).Activate Dim y, m, d As String i = 1 Dim sh As Worksheet For Each sh In Workbooks(1).Sheets If Mid(sh.Name, 1, 5) <> "Sheet" Then ' MsgBox sh.Name y = Mid(sh.Name, 2, 4) m = Mid(sh.Name, 6, 2) d = Mid(sh.Name, 8, 2) ' MsgBox Format(DateSerial(y, m, d), "yyyy/m/d") Worksheets("sheet5").Cells(i, 1) = _ Format(DateSerial(y, m, d), "yyyy/mm/dd") i = i + 1 End If Next End Sub シート名が全部AZ20020101の形式かSheet○○になっていると仮定しています。 Sheet5のA列に求める日付けをセットします。 Formatの"yyyy/m/d"か"yyyy/mm/dd"かは適当に選んで 下さい。

maity
質問者

お礼

ご丁寧にありがとうございました)^o^(

その他の回答 (2)

回答No.2

初めまして。次の式で取得できると思います。 最初に取り出したいセルの表示形式を日付型に変更しておきます。 workbooks("ブック名.xls").worksheets("シート名").range("入力したいセル番地").value = mid("シート名",3,4) & " & "/" & mid("シート名",5,2) & "/" & mid("シート名",9) この式を1行で書いて下さい。 もし、シート名を変数に代入したい時は、 変数名=workbooks("ブック名.xls").worksheets("シート名").name 又はエクセルの機能でシートに順番に番号が振られていますので(例えば、Sheet1・Sheet2・Sheet3と3枚シートが挿入されていたらSheet1から順に1・2・3とういように)、 変数名=workbooks("ブック名.xls").worksheets(シート番号).name でも取得することができます。 ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。私のわかる範囲でご一緒に考えて生きたいと思います。

maity
質問者

お礼

ありがとうございます。 一緒に(考えて)生きたい…なーんて、照れますね。 というのは冗談で、ホントにありがとうございました。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

dim a as integer dim b as string dim c as string b=right(ActiveSheet.NAME,8) c=mid(b,1,4) a=mid(b,5,2) c=c & "/" & a a=mid(b,7,2) c=c & "/" & a ActiveSheet.cells(1,1)=c 以上、未確認ですが、多分大丈夫だと思います。 なお、現在アクティブなシートでないとダメですけど。

maity
質問者

お礼

早速のご回答ありがとうございました。