自動で複数セルの内容をシート名にする方法

このQ&Aのポイント
  • エクセル2013で特定のセルの内容をシート名に自動で変更する方法について教えてください。
  • Worksheetのコードに記述することでセルの内容をシート名に反映させることができます。
  • ただし、現在のコードではセルの内容を正しく認識していないため、修正が必要です。
回答を見る
  • ベストアンサー

自動で複数セルの内容をシート名にする

今エクセル2013で、B5セルに「8」を入力して、C5セルには「月実績」と入力してあります。 B5セルはシートをコピーして月ごとに変更していきます。C5セルのほうも例えば「月生産数」等に変更して使用します。(つまり、B5もC5も両方内容を変更していきます。) このB5とC5のセルの内容をシート名に自動で変更したいのですが、どうすればよいでしょうか? たとえば上記の例だと、シート名が「8月生産数」になってくれればよい。 今とりあえずWorksheetに下記コードを記述していますが、これだとシート名が「8$C$5」となってしまい、C5を文字で認識してしまい、セルの内容がシート名になりませんでした。 どうすればよいでしょうか? また、記述場所は使っているシートのWorksheetにかきこめばよいでしょうか?(シート名を右クリックしてコードの表示ででてくる所に記述しています) VBAの事、あまり分からないままやっていますが、お願いいたします。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) On Error GoTo ERR: If Target.Cells(1, 1).Address = "$B$5" Then Me.Name = Target.Cells(1, 1) & "$C$5" End If Target.Cells(1, 1).Select Exit Sub ERR: MsgBox "その名前には変更出来ません。", vbCritical + vbOKOnly, "ERROR" Resume Next End Sub

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

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

間違えないよう行います: ALT+F11でVBE画面を開く プロジェクトエクスプローラで当該ブックのVBAProjectの中に含まれているThisWorkbookをWクリックする 現れたシートに下記をコピー貼り付ける private sub Workbook_SheetChange(byval Sh as object, byval Target as excel.range) ’if application.intersect(taget, sh.range("B5:C5")) is nothing then exit sub  on error goto errhandle  sh.name = sh.range("B5") & sh.range("C5")  exit sub errhandle:  MsgBox "その名前には変更出来ません。", vbCritical + vbOKOnly, "ERROR" end sub これまでに試した「シート名タブを右クリックしてコードの表示」のマクロは綺麗に全部消去する。

hinoki24
質問者

お礼

見事にできました。どうもありがとうございました。

その他の回答 (1)

  • kkkkkm
  • ベストアンサー率65% (1604/2441)
回答No.2

> B5セルはシートをコピーして月ごとに変更していきます。 ということなので、コードもそのままコピーしたシートに移行されますね。 勘違いされているのは以下の部分です。 Me.Name = Target.Cells(1, 1) & "$C$5" これだと$C$5という文字列を追加していますので、セルC5の内容を追加したい場合には Me.Name = Target.Cells(1, 1) & Range("$C$5").Value に変更してください。 Me.Name = Target.Value & Range("$C$5").Value でもいけます。

hinoki24
質問者

お礼

試したらどちらでも出来ました。 どうもありがとうございました。 すいません、こちらも問題なかったのですが、ベストアンサーは最初に回答をいただきまるまるコピーして使えるNO1の方にしようと思います。 でもありがとうございました。

関連するQ&A

  • マクロを複数のシートに適用する記述を教えて下さい

    またまた、お世話になります。 いつも、丸投げの状態で申し訳ありません。 下記の「ワークシート名を日付を変更することで変えられる記述」を検索して見つけ、引用させて頂きました。 これを、度々変わるワークシート名に対応して、31枚のシート(Sheetno3~33)に適用したいのですが、 「どこに」 「どのような」 記述を加えたら、よろしいでしょうか? どなたか、解る方がおられましたら、是非、ご教授いただけないでしょうか? 毎度、カンニングで答えを見るような質問で恐縮しますが、よろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Excel.Range) On Error GoTo ERR: If Target.Cells(1, 1).Address = "$V$1" Then Me.Name = Target.Cells(1, 1).Text & "日" End If Target.Cells(1, 1).Select Exit Sub ERR: MsgBox "その名前には変更出来ません。", vbCritical + vbOKOnly, "ERROR" Resume Next End Sub

  • セルの値をワークシート名にする(エクセル2013)

    インストラクターのネタ帳さんより http://www.relief.jp/itnote/archives/003382.php 下記「セルの値をワークシート名にする?Worksheet_Change」 を拝借し利用させていただこうと思いましたが ---------------------- Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "H1" Then ActiveSheet.Name = Range("H1").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のH1セルの値はシート名にできません。" End Sub ---------------------- はそのまま出来るのですが、 H1セルにデータの入力規則:リストを指定しますと エラーとなりシート名が変わりません sheet1のリストA1:A50をsheet2のH1セルにリスト表示させ その表示名をそのままシート名に出来ませんでしょうか? ---------------------- Sub copy Range("H1").Copy Range("P1") End Sub ---------------------- Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "P1" Then ActiveSheet.Name = Range("P1").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のP41セルの値はシート名にできません。" End Sub ---------------------- としてH1のセルをP1にコピーしたものを指定して試しましたがやはりエラーとなり うまくいきませんでした。 全くの素人で恐縮ですがよろしくお願いいたします

  • 別シートのセルの文字をシート名に自動で変更

    いつもありがとうございます。 下記の添付の「勤務表」のシートのA4の日付を変更すれば、「Sheet1」のシート名も自動的に変換できるようにとネット検索で見つけてきた下記のマクロ(?)の記述をセル名を変えてコピペし、「勤務表」のシートのA4の日付を変えて見たのですが、何の変化もありません。エラーメッセージも出ません。 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Target.Address(False, False) = "勤務表!A4" Then ActiveSheet.Name = Range("勤務表!A4").Value End If Exit Sub ERR_HANDLER: MsgBox "現在のセルの値はシート名にできません。" End Sub 「勤務表」のシートのA4以下は、B1とE1の数値から自動で一ヶ月分の日付を入れる関数を入れて日付を作成しています。 =IF(DATE($B$1+1988,$E$1,ROW(A21))>DATE($B$1+1988,$E$1+1,20),"",DATE($B$1+1988,$E$1,ROW(A21))) 念のため、「Sheet1」内のA1でシート名が変わるかどうか試してますと、直接入力した文字の場合、シート名が入力した文字に問題なく変わりますが、関数で呼び込んだ文字は「現在のセルの値はシート名にできません。」のエラーメッセージが返って来ました。 このことから、関数で呼び込んだ文字では、シート名の自動変更はできないのが判りましたが、「勤務表」から呼び出した場合、エラーメッセージも出ないところを見ると、そのことの対処だけでは、解決しないような気がしています。 色々、ネットで検索したりもしましたが、未熟な私の知識と経験では、行き詰ってしまいました。 関数で呼び込んだ別シートのセルの日付で、シート名が自動で変更できるように、 お助け頂けないでしょうか? 当方はエクセル2010を使用しております。 よろしくお願いいたします。

  • シート名を自動で

    久し振りにお世話になります。 よろしく御願いします。 windowsXP EXCELL2003 です。 下記を採用しました。 表題 「エクセルのセルに名前を入力するだけで自動的にそのシートタブもその名前に」 アドレス http://oshiete1.goo.ne.jp/qa5775792.html 内容 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Cells = Range("A1") And Range("A1") <> "" Then ActiveSheet.Name = Range("A1").Value End If End Sub でばっちりできました。 ただ 何かのミスで A1 の内容を変更した場合シート名が変わりません。 1 もし A1 が変更された時シート名も変更されることが可能でしょう  か。 2 大変厚かましいのですが追加の要望としてシートの色(コード20)  もつけられれば良いのですが。 もし可能ならば上記の「内容」をどう変更すればいいかご教授ご指導を仰ぎたいです。 よろしく御願いします。

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

    お知恵をお貸しください。 現在、月計表なるものを作っています。 シートは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」に記述すればどのワークシートでも機能するような事が書いてあったのですが、既にお手上げ状態で。 お知恵をお貸しいただければ幸いです。 宜しくお願い致します。

  • シート名を手入力でなく、セル「A1」の文字を出しい

    過去にも、同様見出しでの質問が出ています。私は、この続編を教えて頂きたい。本文後半に【私の質問】として掲示致しました。 ≪以下、引用≫ :エクセルのシート名についての質問です。 いつもはシート名を変えるとき、シートタブの上を右クリックして「変更」しています。 ◆そこで、  セル「A1」に入力されてある文字を自動で出す方法について教えて下さい。 http://okwave.jp/qa/q2025849.html?from=history ベストアンサー: (1)の場合は、下記のコードを ThisWorkbook に記述してください。 どのワークシートでも機能します。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$A$1" Then Sh.Name = Target.Range("A1").Value End Sub ≪引用終了≫ 【私の質問】 確かに、"A1"に直接文字を入力すると、この記述でOKです。 ところが、"A1"に、他のセル等からの参照が入っている場合、例えば、=B5&"年"&B7&”月現金”となっているとき、"A1"の内容をシート名に反映することができません。 コード内容をどのように修正すればよいのでしょうか、ご教授下さい。

  • VBAにおけるセルの名前の参照方法

    現在、Aシート、Bシートがあり、BシートのA1セルに test という名前を付けました。(範囲はブック) Aシートが再計算されれば、BシートのA1セルをメッセージボックスで表示したいのですが、調べましたが、よくわかりませんでしたので、詳しい方教えてください。 範囲はブックになっているし、他に同じセルの名前もつけれないようになっているので、 このような記述で大丈夫かと思いましたがエラーが出でしまいました。 なぜでしょうか?やはりわざわざ毎回シート名から記述が必要なのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Range("test").Value) End Sub このようにシート名から書けば表示されました。 Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Worksheets("B").Range("test").Value) End Sub

  • EXCEL:セルに表示されているテキストをシート名にしたい

    仕事で請求書関係のEXCELを作っています。 会社情報というシートの会社名(A3セルからA16セルまで)が変更されると、 会社別にある請求書など(各社3シートあります)の会社名が変わるようにしてあります。 下記のコードを使って、各シートの会社名が変わるとシート名も変わるというようにしようと思いましたが、 表面上はテキストでも関数セルのため、セルに直接入力をすれば変わりますが、このままではシート名が自動で変わらないですよね。 ちなみに変更したいシート名は、 シート名        内容 ○○会社       ⇒日報データ ○○会社請求     ⇒請求書 ○○会社請求(鏡)  ⇒請求合計 となり、これが各社分(現在は20社分)あります。 毎月5社ぐらい会社名が変動しますが、 データを入力する事務員さんはEXCEL初心者なので、 毎回シート名を変更することが難しく、作業を自動で行いたいのです。 私自身も、現在VBAを勉強中のため自分の能力ではこれが精一杯で、 困ってしまいました。 どのようなコードを追加したらいいのか、どなたか教えていただけませんでしょうか? どうかよろしくお願いします! Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Count > 1 Then Exit Sub If .Value = "" Then Exit Sub If .Address(0, 0) = "A1" Then On Error GoTo ELine ActiveSheet.Name = .Value On Error GoTo 0 End If End With Exit Sub ELine: MsgBox "その名称はシート名になりません", 16 End Sub

  • セルの値をファイル名にするには

    現在下記のマクロを入力しています。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$10" Then Target.Offset(-6, 2).Value = Date End If End Sub この時 ファイル名を SHEET1のA1 セルの値を利用してファイル名にするために下記の内容を入れてブックを保存したいと考えています。 上記のマクロが入っていないときは上手く行くのですが下記を追加するにはどうすればいいかご指導いただけませんでしょうか。 宜しく御願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ActiveSheet.Name = Target.Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Target.Value End If End Sub

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

専門家に質問してみよう