
いつも御世話になっています。
質問内容ですが、特定セルに入力した値を特定のシート名に反映させるマクロについてです。
例えば、
Sheet1のセルA1に「会議室」と入力した場合、Sheet5のシート名が「会議室」となり、
Sheet1のセルA2に「休養室」と入力した場合、Sheet7のシート名が「休養室」となる。
というようなものです。
(※Sheet番号は連番になっていません)
なお、シート名変更用の入力シートはSheet1のみです。
できれば、各シート名を変更する際、以下のようにしたいと考えています。
Sheet5 元シート名:負荷計算(1)
↓
Sheet5 変更後シート名:"Sheet1のA1で入力した名前" 負荷計算
教えて頂けると助かります。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
こんにちは!
一例です。
>(※Sheet番号は連番になっていません)
とありますが、Sheet見出し上で左からSheet1・Sheet2・・・の順とします。
すなわちSheet5はSheet見出しで左から5番目のSheet
Sheet7は左から7番目のSheetという前提です。
画面左下のSheet1のSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてSheet1のA1・A2セルにデータを入力してみてください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim k As Long, myFlg As Boolean
If Application.Intersect(Target, Range("A1:A2")) Is Nothing Or Target.Count <> 1 Then Exit Sub
On Error Resume Next
With Target
For k = 1 To Worksheets.Count
If Worksheets(k).Name = .Value Then
myFlg = True
Exit For
End If
Next k
If myFlg = True Then
MsgBox "シート名が重複します。" & vbCrLf & "別のシート名を入力してください。"
.Value = ""
.Select
Exit Sub
Else
If .Address = "$A$1" Then
Worksheets(5).Name = .Value
Else
Worksheets(7).Name = .Value
End If
End If
End With
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.3
- 回答日時:
なかなか意図が読み取りづらい質問ですね。
とりあえず
> Sheet1のセルA1に「会議室」と入力した場合
> Sheet5のシート名が「会議室」となり
> Sheet1のセルA2に「休養室」と入力した場合
> Sheet7のシート名が「休養室」となる
> Sheet番号は連番になっていません
勝手に読み替えます。
・一番左のシートのA1が(以下略)
→左から5番目のシート名が(以下略)
・一番左のシートのA2が(以下略)
→左から7番目のシート名が(以下略)
と言うことであり、
Sheet1のA1・A2セルを入力してからマクロを走らせる、
と言う処理を「使用者の意思で」走らせるのであれば単純に
Sub Sample1()
If Sheets(1).Range("A1") <> "" Then
Sheets(5).Name = Sheets(1).Range("A1")
End If
If Sheets(1).Range("A2") <> "" Then
Sheets(7).Name = Sheets(1).Range("A2")
End If
End Sub
で5番目・7番目のシート名を変えてやれば事足ります。
ただし、既にその「入力された値と同じシート名」があるとエラーで止まります。
トラップをかけるのは簡単ですが、そんな必要は無さそうです。
処理タイミングにもよりますが、この程度の処理なら「手作業で」変更した方が早いですし、
「手作業で」変更しても同じようにエラーで止まりますから。
これが「Sheet1のA1が入力されたらSheet5の名前を」
あるいは「Sheet1のA2が入力されたらSheet7の名前を」
と言う処理を「使用者の意思に関わらず、該当セルに入力されたら」走らせるのであれば、
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Sheets(1).Range("A1") Then
Sheets(5).Name = Sheets(1).Range("A1")
End If
If Target = Sheets(1).Range("A2") Then
Sheets(7).Name = Sheets(1).Range("A2")
End If
End Sub
こんな感じのモノをSheet1モジュールに書く必要があります。
ただしこの場合は「値が空白ではない・同じ名前のシートが存在しない」などの
エラー処理が必要かもしれませんが、ここでは割愛します。
これでも「手作業で」変更した方が早いでしょうから。
さてさて。
> Sheet5 元シート名:負荷計算(1)
> ↓
> Sheet5 変更後シート名:"Sheet1のA1で入力した名前" 負荷計算
これが、「“負荷計算(1)”と言うシートを探して」と言う意味だとしたら
まったく条件が変わっていますよね?
まぁ、聞くまでも無く本題はコチラなのでしょうけれど。
Sub Sample2
Dim WS As Worksheet
If Sheets(1).Range("A1") <> "" Then
For Each WS In Worksheets
If WS.Name = "負荷計算(1)" Then
WS.Name = Sheets(1).Range("A1") & "負荷計算"
End If
Next
End If
End Sub
または
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WS As Worksheet
If Target = Sheets(1).Range("A1") Then
For Each WS In Worksheets
If WS.Name = "負荷計算(1)" Then
WS.Name = Sheets(1).Range("A1") & "負荷計算"
End If
Next
End If
End Sub
このくらいが解りやすいのではないかと思います。
それでも「手作業」のほうが早くて確実かもしれません。
ちなみに、
Sheets("負荷計算(1)").Name = (略)
として、直接変更してやるのも手段の一つでしょうが、
名前を変更したい元のシートが無かったらエラーで止まります。
「無い場合に警告を出す」などのエラー処理を考えているのであれば
コチラの方が有効かもしれません。
細かい解説は割愛しますが、あとは適宜応用下さい。
No.2
- 回答日時:
シートの名前(タブに表示されている名前)を変更する記述です。
・左から何枚目のシートかを指定して変更する場合 Sheets(5).Name = "変更後の名前"
・シートのオブジェクト名を指定して変更する場合 Sheet5.Name = "変更後の名前"
・直接シート名を指定して変更する場合 Sheets("変更前の名前") = "変更後の名前"
ご質問の場合は、VBE画面の左側ツリー(下図)を確認し、当該シートのオブジェクト名を使って変更されればよいと思います。
Sheet5.Name = Range("A1").Value
Sheet7.Name = Range("A2").Value

No.1
- 回答日時:
Sheet1
A列:変更前シート名
B列:変更後シート名(ぷりフィックス)
Option Explicit
Sub ReNameRobo()
Const xName = "Sheet1"
Dim xSheet As Worksheet
Dim zSheet As Worksheet
Dim xLast As Long
Dim nn As Long
Set zSheet = Worksheets(xName)
zSheet.Columns("C").ClearContents
xLast = zSheet.Cells(Rows.Count, "A").End(xlUp).Row
For nn = 1 To xLast
If Not IsEmpty(zSheet.Cells(nn, "A")) And Not IsEmpty(zSheet.Cells(nn, "B")) Then
For Each xSheet In Sheets
If (xSheet.Name = zSheet.Cells(nn, "A").Value) And (xSheet.Name <> xName) Then
xSheet.Name = zSheet.Cells(nn, "B").Value & " " & xSheet.Name
zSheet.Cells(nn, "C").Value = xSheet.Name
End If
Next
End If
If IsEmpty(zSheet.Cells(nn, "C")) Then
zSheet.Cells(nn, "C").Value = "×"
End If
Next
zSheet.Select
zSheet.Columns("C").AutoFit
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) VBA Userform転記のみ編集可 1 2023/06/29 11:03
- Excel(エクセル) Excel 売上管理シートに入力した売上データを、日報に自動反映させたいと考えています。 売上管理シ 3 2023/04/29 18:08
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) Excelで日報を自動で作成したい 売上管理シートに入力した売上データを、日報に自動反映させたいと考 1 2023/04/29 18:07
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセル 別シートの各セルそれぞれの比率を計算したい 4 2023/08/05 15:20
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】1回目の実行後、2...
-
エクセル内に読み込んが画像の...
-
Excelのメニューについて
-
Excelで作成した出欠表から日付...
-
Excel 偶数月の15日(土日祝...
-
Excelの数式について教えてくだ...
-
勤務外時間を出す表が作りたい
-
VLOOKUP FALSEのこと
-
エクセルの数式について教えて...
-
【マクロ】参照渡しについて。...
-
Excel 日付の表示が直せません...
-
Excelの条件付書式について教え...
-
マクロを実行すると、セル範囲...
-
【マクロ】参照渡しとモジュー...
-
【マクロ】シート追加時に同じ...
-
Excelファイルを開くと私だけVA...
-
Excelのデーターバーについて
-
エクセルの設定、特定の列以降...
-
別のシートの指定列の最終行を...
-
エクセル 同じ行の隣り合う数字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】重複する同じ行を、...
-
Excelの条件付き書式のコピーと...
-
vba 印刷設定でのカラー印刷と...
-
VBA の単語の意味を教えて下さい。
-
Excel 日付の表示が直せません...
-
エクセル 同じ行の隣り合う数字...
-
エクセル条件付き書式について。
-
エクセルの数式につきまして
-
ファイル名の変更
-
エクセル 数字のみ抽出につて
-
Excelの開始ブックを固定したい...
-
エクセルの数式について教えて...
-
エクセルのセルをクリックする...
-
=INDIRECT(RIGHT(CELL("filenam...
-
エクスプローラーで見ることは...
-
Excelの関数で質問です
-
至急お願いいたします 屋上の備...
-
エクセルでセルに入力する前は...
-
関数を教えて下さい
-
Excel 関数での質問です
おすすめ情報