• 締切済み
  • すぐに回答を!

シート名を手入力でなく、セル「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"の内容をシート名に反映することができません。 コード内容をどのように修正すればよいのでしょうか、ご教授下さい。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数226
  • ありがとう数1

みんなの回答

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

No.1・2です。 Changeイベントが動かないというコトですが・・・ No.1・2の両コードともSheetモジュールですので 各Sheetのコードにしなければ反応しません。 質問文に載せてあるURLを覗いてみました。 もしかして「This Workbook」のVBE画面にコードを記載していませんか? その場合は全く反応しないはずです。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に 前回(No.1でも2でも構いません)を記載して B5・B7セルにデータを入れてみてください。 おそらくちゃんと動くと思います。 ※ このような操作を複数のSheetで行いたい!という場合は 「This Workbook」のVBE画面に、↓のコードでやってみてください。 Private Sub Workbook_SheetCalculate(ByVal Sh As Object) ActiveSheet.Name = ActiveSheet.Range("A1") End Sub 今度は何とか動けば良いのですが・・・m(_ _)m

共感・感謝の気持ちを伝えよう!

質問者からのお礼

有難うございます。 結論から申し上げますと、うまく動きました。 全体の検証が済んでいませんが、うれしくて早速にお礼を申し上げます。 作業としては、次のように行いました。 第一作業 コードを次のように書き換えました。 Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ERR_HANDLER If Intersect(Target, Range("B5,B7")) Is Nothing Then Exit Sub ActiveSheet.Name = Range("A2 ") Exit Sub ERR_HANDLER: MsgBox "現在のA2セルの値はシート名にできません。" End Sub 第二作業 もともと、A2のセルに入っていた式は、 =B5&"年"&B7&”月現金”でした。 この式のままでは、うまく動きませんでした。 そこで、 =$B$5&"年"&$B$7&”月現金”という具合に式を書き換えました。 これで、おかげさまで動くようになりました。 VBAの参考書を見ながら式を作っているのですが、基礎理論が理解できて ないので、やっている作業に確信が持てずにいます。 そんなわけで、これまでも作業一、作業二を切り離して行い、袋小路に入 っていたのです。 NO.1~NO.3さんのご指導で、作業一は正しいようだと自信を持てました。 そこで、作業二と組み合わせてみると、アララ!! 不思議(そのレベルです。) 動くではありませんか。理屈は、よくわかってないんですが…。 本当にありがとうございました。うまくいかないときは、また、ご教授をよろしく お願いいたします。

関連するQ&A

  • マクロでシート名を変更を変更したい

    A1セルの値をシート名にするマクロは以下のとおりだと思います。 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 では、E6セルの値をシート名にすることは可能でしょうか? よろしくお願いします。

  • オープンオフィスでシート名をセルから参照するには

    マクロ初心者です。 こちらの質問(http://okwave.jp/qa/q2025849.html)と同じような内容ですが、 試行錯誤してもOpenOffice Calcでできなかったため質問させていただきます。 OpenOffice Calcで、セル「A1」に入力されてある文字を対応するシートの名前に自動で設定するには、どのようなマクロを記述すればいいのでしょうか? エクセルで使用できる 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 をVBA互換モードで試しましたが、無理そうでしたのでOpenOffice.org Basicで使えるように変換して記述したいところです。 ですが、オープンオフィスのThisWorkbookはどのように使うのかなどさっぱり理解できなかったので、どなたか詳しい方教えてください。 よろしくお願いします。

  • 今日の日付に該当するシート名に赤色を

    いつもお世話になります。 WIN7 EXCELL2010 です。 A1に「20140721」と記入しエンターキーを押すと下記のマクロでシート名が自動で「20140721」となるようにしています。 例えば今日(7月21日)になったら自動で赤色にしていくつかあるシートの中で今日のシートを目指させたいのでご指導いただけませんでしょうか。 参考に 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 是非ご協力をお願いします。

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

No.1です! たびたびごめんなさい。 投稿後、思ったのですが、数式によってA1セルが変化するセル(参照セル)が決まっているのであれば Changeイベントでそのセルを指定してやる方法もあるかと思います。 質問文の「例えば」の場合だと Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("B5,B7")) Is Nothing Then Exit Sub ActiveSheet.Name = Range("A1") End Sub でも大丈夫だと思います。 何度も失礼しました。m(_ _)m

共感・感謝の気持ちを伝えよう!

質問者からの補足

早速、ご回答ありがとうございました。 教えて頂いたコードを記入したうえで、A1のセルに(=B5&"年"&B7&”月現金”) と入力し、B5に≪25≫と、B7に≪10≫と打ち込みました。 この結果、A1のセルには、25年10月現金と表示されるのですが、何故か肝心のシート名は、 Sheet1のまま変わりません。 どうしてなのでしょうか?

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

こんばんは! 数式が入っているセルの場合は、表示そのものが変わっても数式自体がそのままですので、 Changeイベントは反応しないはずです。 そこで一案ですが、 Private Sub Worksheet_Calculate() ActiveSheet.Name = Range("A1").Value End Sub のようにしてみてはどうでしょうか? ※ この場合他のセルが計算されたときにも反応しますが、 Sheet名は必ずA1セルの値になりますので、 大勢には影響はないと思います。m(_ _)m

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • シート名を自動で

    久し振りにお世話になります。 よろしく御願いします。 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)  もつけられれば良いのですが。 もし可能ならば上記の「内容」をどう変更すればいいかご教授ご指導を仰ぎたいです。 よろしく御願いします。

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • コンパイルエラー Target.Range

    シート上のセルに値を入力したら、 入力した値をイミディエイトに表示させたいのですが Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Debug.Print Target.Range End Sub こうすると、 コンパイルエラー 引数は省略できません。 になります。 .Range の部分がエラーになります。 原因と対策を教えてください。

  • シートのイベント VBA

    シートをクリックしたらシートをクリアしたいのですが クリックするセルがA1の場合は、マクロを実行させたくないのですが 下記のコードだとエラーになってしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Range = Range("a1") Then Cells.Clear End If End Sub ”Range("a1")でなければ、Cells.Clearする” にはどうすればいいですか?

  • 記入のデーターを別のシートに

    いつもお世話になります。 WIN7 EXCELL2010 です。 「記入」のデーターを日毎のシートに振り分けたいです。 参照図で説明させていただきます。 ご指導賜りたいのは 2点あって その1 シート「記入」から 各シートに振り分ける数式をおねがいいたします。 その2 シート「記入」から 20140714 20140715 20140721 にデーターを振り分けるのですが、 2の行はどなたとも重複していません。 3と4の行は同じ部屋で「入所日 と 退所日」 7/20 が重複しています。 退所日の「田中」はそのまま「102」に 「伊藤」は一旦「待機」に入れ、「2010721」のシートでは102に戻したい。 特にその2については可能でしょうか。 何かいい方法が その1 その2 あればご指導いただけませんでしょうか。           ※20140716&#65374;20140720 は意図的に省いています。 日毎のシートには、 A1 文字で入力 E1 A1の文字を “yyyy/mm/dd” に   =DATE(INT(A1/10000),MOD(INT(A1/100),100),MOD(A1,100)) F2 =IF(OR(B1<>B2,B2=""),"",IF(D2>MAX(INDEX(D:D,MATCH(B2,B:B,0)):INDEX(E:E,MATCH(B2,B:B,0)+COUNTIF(B$1:B1,B2)-1)),"","重複or待機")) マクロ A1の文字をシート名に 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 誠に恐れ入りますが何卒よろしくお願いいたします。

  • セルの値によって、シート見出しの色を変更したい

    エクセル2007を使用してします。以前に、 「ある報告書の全シートを対象として A1セルにkさんの名前が入力されたらそのシートのシート見出しが緑になり、A2セルにmさんの名前が入力されたらそのシートのシート見出しが青になり、なおかつ、kさんとmさん2人の名前が入力されたらそのシート見出しの色が黄色に自動でなるマクロの記述を教えてください」と質問し、 Private Sub Worksheet_Change(ByVal Target As Range) a1 = Range("a1").Value a2 = Range("a2").Value f = 0 If a1 = "k" Then f = f or 1 If a2 = "m" Then f = f or 2 c = Switch(f = 1, 4, f = 2, 5, f = 3, 6, True, xlNone) ActiveSheet.Tab.ColorIndex = c End Sub 上記のように御回答を頂きましたが、今後、入力する名前が変更する事を考えて、A1・A2セル共に、 何か文字が入力されたら(もしくは空白でなければ)と条件を変えたいと思い、色々試してみたのですが、 上手くいきませんでした。 何方か、条件に合うコードの記述を教えてください。宜しくお願いします。

  • 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

  • VBAでセルに変更があったらユーザアカウントを取得

    こんにちは。VBA初心者です。 イベントプロシージャを使って、セルに変更があったら、その右隣のセルにWindowsのユーザアカウント名と変更時刻を取得したいと思い、以下のようなコードを書いたのですが、書き込まれたユーザアカウントも「変更」とみなされて無限ループに陥ってしまいます。 どうしたら、この問題が解決できるでしょうか。 あるいは、イベントプロシージャを使用せずに同じことが実現できるでしょうか。 どうか皆さんのお知恵をお貸しください。 よろしくお願いします。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Target.Offset(0, 1).Value = Application.UserName Target.Offset(0, 2).Value = Now End Sub

  • Excel VBA シート名を条件に使用して…

    Excel2003を使用しています。 C列に特定の文字が入力されたら、その行のG列に、ある数式を入力したく、イベントマクロを作成しましたが、シートがたくさんあるときや、シートの追加がある場合は、クラスモジュールを使用するとよいということを過去の質問から参考にさせていただき、下記のクラスモジュールを作成しました。 ------------------------------------------------------- Public WithEvents myApp As Application Private Sub myApp_sheetchange(ByVal sh As Object, ByVal target As Range)  If Len(sh.Name) = 4 Then   If target.Column = 3 And target.Row >= 4 Then    If target.Value = "特定の文字" Then     Cells(target.Row, 7).FormulaR1C1 = "=数式A"    End If   End If  End If End Sub ------------------------------------------------------- 上記マクロを使用しているBook中の30数枚のシート名は「1234」というように、4桁の数字(全角)になっているのですが、さらに条件を加えて、例えば、シート名の数字が「1250」以下の場合は、Aという数式を入力し、シート名の数字が「2000」以上の場合は、Bという数式を入力するという条件でも可能でしょうか? 可能な場合、どのようにコードを記述すればいいのでしょうか? よろしくお願いします。

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

    今エクセル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