• ベストアンサー

エクセルマクロを教えてください

エクセル2003を使用しています。ブックに1シートあります。シート名は「C3」セルに入力してある日付にしますが、シート上の表示形式は「平成20年1月」となっているところをシート名は「08-01」にします。その後シートを11枚コピーし、それぞれのシートの「C3」セルに年月を入力し、シート名を「08-02」「08-03」・・・「08-12」としたいのですが、うまくいきません。 マクロに詳しい方のご指導をお願いいたします。

  • oto21
  • お礼率50% (2/4)

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

#01です。 >1枚目シートのC8セルに日付を入れると12枚のシート名が一括で変更できるようにする それではSheetモジュールに直下のマクロを貼り付けます。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$8" Then If IsDate(Target.Value) Then Call Macro1 End If End If End Sub そして標準モジュールシートに以下のマクロを貼り付けます。 Sub Macro1() Dim sh As Worksheet On Error Resume Next For Each sh In Worksheets If IsDate(sh.Range("C8").Value) Then sh.Name = Format(sh.Range("C8").Value, "YY-MM") End If Next sh End Sub 最初のシートのC8セルに日付が入力されたら、「全シートの名前変更」を行うMacro1をコールするようにしました。(#01のMacro1には誤りがあったので、今回の回答を貼り付けてください)

oto21
質問者

お礼

zap35さん、再度の回答ありがとうございました。なんとかなりそうです。お礼が遅れましたことをお詫び申し上げます。

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

> For~Next処理などを組込んで、1枚目シートのC8セルに日付を入れると12枚のシート名が一括で変更できるようにすることはできますでしょうか?  シートの「C3」セルですよね? こんな感じでしょうか。 Sheet1のシートモジュールをこう変えてみてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Integer If Target.Address = "$C$3" Then If IsDate(Target.Value) Then For Each st In Worksheets st.Name = "@" & i i = i + 1 Next For Each st In Worksheets st.Name = Format(st.Range("C3").Value, "yy-mm") Next End If End If End Sub For Nextを二度やってるのは同名のシート名のエラーを防止するためです。

oto21
質問者

お礼

merlionXXさん、ご回答ありがとうございました。VBA初心者のため、コードの組み立てがいまいちつかめませんでした。回答が遅れましたことをお詫びします。

noname#77517
noname#77517
回答No.2

どういうマクロで、どのようにうまくいかないのかを書いて いただかないと、アドバイスも難しいと思いますよ。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

元になるシートの「シート名タブ右クリック」→「コードの表示」で開く画面に以下のマクロを貼り付けます。 シート画面に戻ってC8セルに日付を入力してみてください Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Address = "$C$8" Then   If IsDate(Target.Value) Then    ActiveSheet.Name = Format(Target.Value, "YY-MM")   End If  End If End Sub もし日付を入力したタイミングでシート名を変更するのではなく、後から全シート一括で変更するなら以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。 Sub Macro1() Dim sh As Worksheet  On Error Resume Next  For Each sh In Worksheets   If IsDate(sh.Range("C8").Value) Then    ActiveSheet.Name = Format(sh.Range("C8").Value, "YY-MM")   End If  Next sh End Sub 複数のシートに同じ年月が入力されている場合は、シート名が重複するので最初のシートにのみ変更する仕様です。

oto21
質問者

補足

 早々にご回答をいただきましてありがとうございます。最初に記述されたコードをSheet1に貼付けて日付を入力したところ、シート名の希望型式での変更ができました。  2枚目以降のシートの同セル(C8)には数式で「=EDATE('08-01'!C8,1)」・・・「=EDATE('08-01'!C8,11)」を入れてあるので、見出しの月日表示も一括で変更となるのですが、2枚目以降のシート名は変更されません。  For~Next処理などを組込んで、1枚目シートのC8セルに日付を入れると12枚のシート名が一括で変更できるようにすることはできますでしょうか? 追加の質問で申訳ありません。

関連するQ&A

  • エクセルマクロで日付検索について

    エクセルのマクロで日付を検索するマクロについて質問です。 ブックAのシート1のA列に A1 2017/3/13 A2 2017/4/1 A3 2017/4/19 A4 2017/5/16 A5 2017/7/17 A6 2017/9/5 というような日付が入っています。 ブックBのシート1のA1セルに2017/6/3と入力してマクロを実行した際に その日付に一番近い一つ前の日付を探し、見つけた日付のB列のセルを ブックBのシート1のA2セルに表示したいです。 今回の例であれば2017/6/3に対してブックAのシート1のA列はA4セルが当てはまり その当てはまったA4セルの1つ横のB4セルの内容をブックBのシート1のA2セルに表示するということです。 よろしくお願いします。

  • エクセル2003 マクロ シート名

    エクセル2003です。 1つのブックにシートが10シート有ります。 R2のセルに日付を入れると それぞれのシート名が日付 (例)"11月25日"になるようなマクロを作りたいのですが、 教えてください。 又は逆にシート名に"11月25日"とすると R2セルが"11月25日"となるマクロを教えてください。 日付はシート毎に違います。 すみませんがよろしくおねがいします。

  • マクロ(エクセルシートコピー先)に関して

    分かりましたら教えてください。 A.xlsのシートBを、新しいブックにコピーし移動するときに、そのブック名が、常にそのシートBのセルC3に入力されている文字の名前にするようにマクロを組みました。(....Filename:Range("C3")としています。) さらにC.xlsのシートDもその新しいブックにコピー移動させるマクロを追加したいのですが、コピー先をどのように指定すればいいのでしょうか。。

  • Excelのマクロについて

    マクロの保存先を「開いているすべてのブック」にして、 A2~A32をいったん削除した後で、 1月1日から、1月31日を入力して、 最後にA2をアクティブセルにしておく、というマクロを作りました。 1/1と入力すると、普通、1月1日と表示されますよね? 同一ブック、同一シートないでしたら、そのように表示されるのですが、 同一ブック、別シートあるいは、 別ブックで、このマクロを実行すると、 2001/1/1と表示されます。 あとで、セルの表示形式を変えればいいんでしょうが、 この原因が、なぜ、そうなるのかが知りたいです。 (まだ、そのシート内以外だと、マクロが設定できない、 とかの方がわかるんですが。) また、 同一シートでなくても、 1月1日~1月31日の表示形式のままで、 設定できるマクロがあったら、あわせて教えてください。 作成しているファイルの、 バージョンは、Excel2002ですが、 マクロは、2000と変わらないと思うんですが・・・。 よろしくお願いいたします。

  • EXCEL VBA マクロ 日付

    こんばんわ。 EXCEL VBA マクロ の日付について質問があります。 セル"A1"で"年"(例:2008)、セル"B1"で"月"(例:5)を指定します。 C1からC500くらいまで(毎日増えていきます)日付が入っています。 A1、B1で指定した年月と同じC列の日付を 10桁スラッシュ区切りの形式(例:2008/05/15)で 右隣のセル(D列)にコピーしたいんです。 困ったことにC列は形式が決まっているわけではありません。 たとえば、2008年5月15日の場合、 ・20080515・2008年5月15日・2008.05.15・2008.5.15 ・2008/05/15・2008/5/15・08/05/15・2008-5-15 その他、いろいろ考えられます。 これをマクロでやるにはどうすればいいでしょうか。 毎月一回実行します。 日付の形式をチェックするところで やり方がわからなくて困っています。 よろしくお願いします。

  • エクセルマクロ

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

  • エクセル 抽出マクロについて

    はじめまして。マクロ初心者です。 エクセルで抽出結果を別シートにコピーしたいのですが、 抽出条件が2列にわたっています。 A     B      C      D 日付   タイトル   分類(あ)  分類(い) 11/22   テレビ    3      2 12/15   ラジオ    1      4 11/18   雑誌     2      5 …というような感じです。 例えば分類が「2」のものを抽出したい時に、 ●シート1のあるセルに「2」と入力してマクロを実行。  ↓ ●シート2に以下のように結果をコピーして表示。 A       B 日付     タイトル 11/22     テレビ 11/18     雑誌 という具合にしたいのです。(C列、D列は表示しない) データはシート3に入力されていて、今後どんどん増えていく予定です。 エクセルは2007です。 本やホームページを参考に試行錯誤したのですが、うまくいきません…。 どなたかご回答よろしくお願いいたします。  

  • Excelシートの自動コピーでマクロを使いたい

    表題通り、Excelシートの自動コピーをマクロを使って行いたいのですが、 マクロやVBAの知識が全くないため、どなたかコードを教えていただけないでしょうか。 まず今現在、B1セルに9月1日と日付を入れ、シート名を1日としたものがあります。 これを自動で複製して、B1セルの日付を9月2日 9月3日… シート名を2日 3日…となるように、日毎ごとの一ヶ月分のシートを作り ひとつのbookにしたいと考えております。 また、その際に、B1セルとシート名の日付が日曜・祭日に当たる場合、 シート名に色を付けたいと思っています。 (因みにB1セルの日付はシリアル値で入れていて、 書式で○月○日となるように表示していて、日付が日曜・祭日に当たる場合は 赤文字になるよう、別シートに祝日リストも作って 条件付き書式で設定してあります。) Excelの関数は使えても、マクロは全く分からないので どうかよろしくお願い致します。

  • エクセル2007のマクロ異常

    旧エクセルでシートを新BOOKへコピーするマクロを使っていたのですが、エクセル2007でこのマクロを使うと、登録マクロが新BOOKのマクロに変わってしまって、元のBOOKに戻った時には、このマクロが使えません。マクロ登録で元のBOOKに登録替えしなくてはなりません。解決法をご指導ください。

  • エクセルのマクロを使ってシートごとに名前をつけて保存したい

    マクロ初心者です。宜しくお願いします。 1つのブックにシートが複数あります。 それぞれシートをコピーして新しいブックを作成し そのブックに名前をつけて保存したいです。 例えばブック名が「売上管理」でそのシートが「A店」「B店」「C店」と3シートあるとします。 シート名:A店を他のブックにコピーしてマイドキュメントに名前を付けて 保存する場合のマクロを教えてください。 ちなみにその際のブック名は「シート名+任意のセル(D2)」と できれば一番助かります。 ちなみにD2のセルにはToday関数が入ってます。

専門家に質問してみよう