エクセルのマクロで複数のシートのセル値をシート名とする方法

このQ&Aのポイント
  • エクセルのマクロを使用して、複数のシートの特定のセルの値をシート名にする方法を教えてください。シート数は可変であり、シート名にしたいセル番地が固定されています。例えば、特定のセルに入力された「宛名」をシート名にしたい場合、新しいシート名の前に数字を振ることで重複を回避することもできます。
  • エクセルのマクロ初心者ですが、複数のシートのセル値をシート名にしたいと思っています。シート数は常に変動し、シート名にしたいセルの場所は固定です。例えば、「宛名」というセルの値をシート名にする場合、新しいシート名の前に数字を振ることもできます。
  • エクセルのマクロで複数のシートの特定のセルの値をシート名にする方法を教えてください。シート数は可変であり、シート名にしたいセルの場所が固定です。例えば、特定のセルに入力された「宛名」をシート名にした際、重複がある場合には新しいシート名の前に数字を振ることもできます。マクロ初心者であるため、より詳しい情報が必要です。
回答を見る
  • ベストアンサー

全シートを選択し、それぞれ特定のセルの値をシート名とするマクロを教えて

全シートを選択し、それぞれ特定のセルの値をシート名とするマクロを教えてください。 Worksheets.Select ActiveSheet.Name = Range("A1").Value ではダメなんですね… 記録マクロ以上のことはほとんど何もわからない、マクロ初心者です。 条件としては、  ・シート数はその都度変わる  ・シート名にしたいセル番地は決まっている です。 具体的には、「請求書」などの決まったフォーマットで作成された複数のシートがあり、 決まったセルに入力された「宛名」をそれぞれのシート名にしたい というような場合です。 また、同じ「宛名」で複数のシート名があったときに備えて、 新しいシート名の前に数字を振りたいです。 例) Sheet 1 → 1田中様 Sheet 2 → 2佐藤様 Sheet 3 → 3山田様 Sheet 4 → 4鈴木様 Sheet 5 → 5山田様 のように。 数字は識別できればいいので(エラーがでなければいいので)、なんでも構いません。 シートに順に番号を振るのでも、元のシート名の一番右を取るのでもいいです。 (そんなマクロがあるのかもわからないのですが) 宛名が複数あるものだけ選んで番号を振るのでもいいのですが、大変そうな気がするので・・・ マクロ自体よくわかっていないので、情報が不足しているかもしれませんが、 詳しい方、教えてください。 よろしくお願いいたします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! ごく単純にやってみました。 Sheetは1からあるとし、Sheet名はA1セルの名前にするようにしています。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 Sub test() Dim i As Long For i = 1 To Worksheets.Count Worksheets(i).Name = i & Worksheets(i).Cells(1, 1).Value Next i End Sub 「決まったセル」が別セルであれば、コード内の Cells(1, 1) の部分を変更してみてください。 以上、この程度ですが 参考になれば幸いです。m(__)m

goochee
質問者

お礼

おぉ~ すごい! まさに希望通りの結果が得られました! しかも、思ったよりずいぶんスッキリしてるんですね・・・ CELL関数やRIGHT関数と組み合わせて、 最初のシート名をどっかのセルに反映させてから、「宛名」とつなげてシート名にする ・・・とかじゃないとムリかなあと思ってました。 ありがとうございました。 便利になります。

その他の回答 (2)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

仮の、発展しての話ですが 「名前とその連番」にした方が使いやすいのならこのタイミングで確認したらと思います。 さらに応用で、VBAでシート並べ替えもすれば宛名でならびますし、山田様だけの2シートを印刷ということがあればやりやすいかと思います。

goochee
質問者

お礼

返信が遅くなり、申し訳ありません。 もう少し勉強してみてから、また見直してみます。 ありがとうございました。

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

良く使うコードです。 いまシートが存在する以上、そのシートに何らかの名前が付いている。 Sub test01() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name Next End Sub これを実行するとシート名が全部捉えられるのが実感できるだろう。 >全シートを選択し、をする必要もないし、アクチブにする必要もない。 これをその各々のシートのA1セルに入っている文字列でシート名を変更することになる。そう考えるのだ。 Sub etst02() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name sn = sh.Range("A1").Value On Error GoTo err p1: sh.Name = sn Next Exit Sub err: sn = InputBox(sn & " はダブル。名前は") GoTo p1 End Sub 先頭に番号振るのは個人的に反対。 其れで上記のようにした。 ーー ただね、シートの挿入があるとこのプログラムが走るわけではない。 だから使うタイミングを考えないとだめなわけだ。 ーー シート挿入はイベントで捉えられて Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "挿入" End Sub なのだが、初心者には難しすぎるし、イベントが起こったときはまだA1セルに入力以前だ。 だから別途コードを考えないといけない。 上記の sn = InputBox(sn & " はダブル。名前は") が参考になって Private Sub Workbook_NewSheet(ByVal Sh As Object) MsgBox "挿入" sn = InputBox("シート名前は") Sh.Range("A1") = sn Sh.Name = sn End Sub どんどん他の事項に波及していく。マクロ初心者にはむりだ。 ただし本件限りでは、上記のThiswokbookのイベントを書くべきところ(画面)を勉強してみて。 Google照会「Thisworkbokk イベント」 これらは経験(解説書を読むのも含めて)でしかえられない。

goochee
質問者

お礼

返信が遅くなり、申し訳ありません。 正直なところ、VBAがほとんどわからないので難し過ぎたのですが、 先日入門書を買って勉強し始めました。 もう少ししたら、理解できるようになるかと思います。 がんばってみます。 ありがとうございました。

関連するQ&A

  • 複数のシートのセル内容をひとつにまとめたい

    複数のシートのセル内容をひとつにまとめたいと思っています。 Sheet1        Sheet2      Sheet3 1 山田 ¥100  1 山田 ¥80  3 鈴木 ¥80 2 佐藤 ¥130  2 佐藤 ¥55  4 田中 ¥150 3 鈴木 ¥110  4 田中 ¥60 こんなデータを Sheet4 1 山田 2 佐藤 3 鈴木 4 田中 とまとめたいんです。 金額は必要ないので、番号と名前だけをまとめたいんです。 どうすれば良いか、教えてください。 よろしくお願いします。

  • エクセルのセルの値をシート名にするマクロ

    エクセルで、例えばB2セルに入力された数字を使って自動でシート名にしたいのですが、(=そのセルの値が変更されたときに 自動的に シート名が変更されるマクロ )どうやったらよいのか良くわかりません。また、重複するシート名があった場合にはアラートを表示させたいです。 例: 1.B2セルに10と入力する 2.もしシート名に重複が無ければ、シート名が自動的に「10月」になり、アクティブセルはB2に戻って復帰する。 3.重複がある場合は「シート名に重複があります」等のアラートを表示して終了する 多分 イベントとかいうものが絡んでくるのでしょうが、マクロは時々使うのですが、いつも記録したものを手直しする程度なので、標準モジュールの部分しか触った事がありません。 どなたか教えてください。お願いします。

  • セルの項目をシート名にしたい

    はじめまして、vba初心者の者です。 セルB3から始まるB列にある、 項目を各シートの名前にしたいです。 セルB列のセルの中身がnullになれば終了という動作。 例えば。 セルB3に「山田」という文字列があれば、Sheet1は山田にする。 セルB4に「佐藤」という文字列があれば、Sheet2は佐藤にする。 よろしくお願い申し上げます。

  • シート名をセルの値からもってくるには・・・

    エクセルXPを使用しています。 よろしくお願いいたします。 シート名及びセル番地を指定する場合、シート名の部分に引数(別途作成したシート名の一覧表からの値・・)を入れる方法をご教授願えませんでしょうか? 質問の内容がわかりづらいかもしれませんが・・・

  • excelのマクロでrangeの選択がうまくいきません。

    excelのマクロでrangeの選択がうまくいきません。 以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。 Sub testcopy() Worksheets("sheet1").Range("B3:C10").Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub Sub testcopy2() Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy Worksheets("sheet2").Range("e5").Select ActiveSheet.Paste End Sub

  • エクセル 特定のセルの値をシート名にする マクロ

    お知恵をお貸しください。 現在、月計表なるものを作っています。 シートは12あります。 シート名は「1月、2月、3月、、、12月」としています。 1月シートの「月度セル(D1)」をリスト選択としており1~12までを選択するようにしています。 他のシートの「月度セル」は直前のシートの「月度セル」の値を参照し、「直前のシートの月度値が12」であれば「1(翌年になるので)」を、12以外であれば「直前のシートの月度に+1」した値を自動表示するIF関数を書いています。 2月シートの月度セルの関数>=IF('1月'!$D$1=12,1,'1月'!$D$1+1) ここで問題となったのが、1月シートの月度を1月以外にした時に、シート名とシート内の月度がミスマッチを起こしてしまうということです。 例>1月シートの月度を「2」とするとシート名は「1月」なのにシート内の月度項目は「2」月となる。 色々調べて以下のマクロを見つけたのですが、、、 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "D1" Then ActiveSheet.Name = Range("D1").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のD1セルの値はシート名にできません。" End Sub これをVisual Basic画面で各シート(12のシート全て)に記述してみました。 確かに、1月シートは「月度」をプルダウンで選択したと同時にシート名も月度のセル値と同じ値に変わるのですが、2月以降のシート名はそれだけ(1月シートの月度を選んだだけ)では変わりませんでした。 2月以降のシート名を変更するには、各シートの月度セルをアクティブにし、そこに記述している前途のIF関数を再計算させないと変更されませんでした。 これでは、、、再計算させるより2月以降の月度を手入力した方が早いかもしれません。 でも、それでは。。。 調べた中で「ThisWorkbook」に記述すればどのワークシートでも機能するような事が書いてあったのですが、既にお手上げ状態で。 お知恵をお貸しいただければ幸いです。 宜しくお願い致します。

  • 他のシートのセルの値を引用したい

    EXCEL2007でマクロ作成中の初心者です。今困っています。お助けください。 シートのA列に名前が書いてあります。 その名前の横B列に番号を入れたいのです。      A       B     1 佐藤   2 伊東   3 加藤   4 以下つづく 横B列の番号は他のシートにあります。現状では以下の番号になります。     A          B     1 佐藤        1   2 伊東        3   3 加藤        5   4 以下つづく 他のシートに以下の表があります。これは可変の表で、名前は次の列は空白です。 名前のあるセルのみ上の番号を表示したいです。 、       A    B    C    D    E     F   G  →以下つづく    1     2 番号    1     2    3     4    5    6   7   →以下つづく    3 名前   佐藤        伊東       加藤      田中  →以下つづく わかりにくいかもしれませんがよろしくお願いします。

  • エクセルマクロ シート名称変更について教えて下さい。

    エクセルは通常Sheet1となってますが、それを数字でのみ表記しています。 シートのB1セルにシートと同じ番号が入ている状態です。 元になるシート(名前:moto)をコピーしていき、 シート番号もB1セルの番号も増やしたいのです。 今現在は Worksheets("moto").Visible = True No = Worksheets("moto").Cells(1, 2) Worksheets("moto").Copy Before:=Sheet1 Worksheets("moto (2)").Name = "new" Worksheets("new").Cells(1, 2) = No + 1 bangou = InputBox("シート番号を入力してください。") Sheets("new").Name = bangou とういように、InputBoxを利用してシートの数字を入力しています。 InputBoxを利用しない方法で自動でシート番号が増えていく方法はありますでしょうか? マクロ初心者ですのでいろいろさわっているのですが うまくできません。 どうか教えて下さい。

  • 【マクロ】特定シートから値を抽出し、別シートへ反映して印刷

    【マクロ】特定シートから値を抽出し、別シートへ反映して印刷 このようなマクロを組みたいです。 作成しましたがうまく動きません。 どなたか修正していただけませんか? 【やりたいこと】 シート名1『データベース』 シート名2『通知書』 (1)『データベース』  4行目からデータベースが作成された表  C列は社員番号の列 ↓ (2)『データベース』シートのA列に『1』のフラグを立てる ↓ (3)『通知書』のセルB1に自動的に(2)で立てた行のC列の社員番号が反映され  同時に通知書シートを印刷をする。 【組んでみたマクロ】 Dim i As Integer 'カウント用変数 Dim lastrow As Integer '最終行が入る変数 i = 4 '最初に始まる行数を指定 lastrow = ActiveSheet.Range("A65536").End(xlUp).Row '最終行を取得する For i = 4 To lastrow '最終行まで繰り返す If Worksheets("データベース").Range("A" & i & "") = 1 Then 'A列に「1」があったものは以下の処理をする '別シートの特定セルを取得する Worksheets("通知書").Range("B1") = "=INDIRECT(""データベース!""&""C" & i & """)" '社員番号 '印刷する Sheets("通知書").PrintOut Else 'A列に「1」がなかったら以下の処理をする End If 'A列に何かあるかの判別終了 Next i '繰り返しの終わり。i(カウント用変数)に1を足す End Sub

  • エクセル マクロを使用してのセル内の値消去

    win2000 officeXpです。 現在、マクロを使用して複数のシートの特定セル内の値を消去するマクロを Sub データ消去() Worksheets("A").Range("B5:AF9").ClearContents Worksheets("B").Range("B5:AF9").ClearContents End Sub のようにしていますが、これではセルに挿入していたコメントが消去されません。 コメントも消去する方法はあるのでしょうか。  また、この方法があればもっと便利なんですが、このマクロにあるセル(B5:AF9)はロックがはずされていますので、それぞれのシート内のロックがはずされているセルを探し出し、そのセルの値とコメントを削除できるようなマクロはあるのでしょうか? よろしくお願いします。

専門家に質問してみよう