- ベストアンサー
Excelマクロで・・・
ワークシート名が「AZ20020101」というような形で付いています。 このシート名から下8桁を日付型で(2002/1/1のような形で)セルに取り出すマクロを作りたいのですがどのようにしたらいいでしょうか。 お分かりの方いましたら大至急お願いします。
- みんなの回答 (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"かは適当に選んで 下さい。
その他の回答 (2)
- kazuhiko5681
- ベストアンサー率49% (79/159)
初めまして。次の式で取得できると思います。 最初に取り出したいセルの表示形式を日付型に変更しておきます。 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 でも取得することができます。 ご不明な点・不具合等がありましたら、ご遠慮なくお知らせ下さい。私のわかる範囲でご一緒に考えて生きたいと思います。
お礼
ありがとうございます。 一緒に(考えて)生きたい…なーんて、照れますね。 というのは冗談で、ホントにありがとうございました。
- taknt
- ベストアンサー率19% (1556/7783)
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 以上、未確認ですが、多分大丈夫だと思います。 なお、現在アクティブなシートでないとダメですけど。
お礼
早速のご回答ありがとうございました。
お礼
ご丁寧にありがとうございました)^o^(