![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?a65a0e2)
・先日VBAでシートのコピー時にシート名の変更の仕方をしえて頂き完成したのですが、ある問題が発生し困っています。以下が状況です。
シート1、シート2が有りシート1のコピーボタンを押すとシート1の例えば「A1」セル(2006-01)を参照しシート2の後に「2006-1」のシートを作成迄は教えて頂き出来ました。しかしシート1の「A1」セル(2006-01)を更新するのを忘れてコピーボタンを押すとエラーになってしまいます。同じシート名がある時は「重複です。」とかメッセージを出して中止したいのですが初心者で旨くいきません。nov-dさんの回答を元に色々調べましたが旨く動きません。ご教授宜しくお願いします。
No.2ベストアンサー
- 回答日時:
処理前に重複シート名をチェックする方法です。
Private Sub CommandButton1_Click()
Dim Sheet_Name As String
Sheet_Name = Worksheets(1).Range("A1").Value
'シート名チェック
Dim ws As Variant
Dim flg As Boolean
For Each ws In ThisWorkbook.Worksheets
If Sheet_Name = ws.Name Then
flg = True
Exit For
End If
Next
If flg = False Then
Worksheets(1).Copy After:=Worksheets(2)
Sheets(2).Activate
Range("B36:B67").Select
Selection.ClearContents
Sheets(1).Activate
Range("I6:J6").Select
Selection.ClearContents
Range("C18:K48").Select
Selection.ClearContents
Range("Q18:AS48").Select
Selection.ClearContents
Range("D15").Select
'Unload UserForm2
ActiveSheet.Name = Sheet_Name
Else
MsgBox ("シート名が重複しています。別のシート名を指定してください。")
End If
End Sub
この回答への補足
・回答ありがとうございます。早速試してみて旨く動くのでシート名1を「稼動」、シート名2を「祝日」と変更し実行すると「稼動」シートのA1を参照し「稼動」シート名が「XXX」と変更され、「祝日」シートの後にコピーされたシート名は「稼動(2)」となってしまいます。以下がプログラムです。どこが違うか分かりません。ご教授宜しくお願いいたします。
Private Sub CommandButton1_Click()
Dim Sheet_Name As String
Sheet_Name = Worksheets("稼動").Range("A1").Value
'シート名チェック
Dim ws As Variant
Dim flg As Boolean
For Each ws In ThisWorkbook.Worksheets
If Sheet_Name = ws.Name Then
flg = True
Exit For
End If
Next
If flg = False Then
Worksheets("稼動").Copy After:=Worksheets("祝日")
Sheets("祝日").Activate
Range("B36:B67").Select
Selection.ClearContents
Sheets("稼動").Activate
Range("I6:J6").Select
Selection.ClearContents
Range("C18:K48").Select
Selection.ClearContents
Range("Q18:AS48").Select
Selection.ClearContents
Range("D15").Select
'Unload UserForm2
ActiveSheet.Name = Sheet_Name
Else
MsgBox ("シート名が重複しています。別のシート名を指定してください。")
'MsgBox " D:15のスピンボタンをクリックし、月度を変更して下さい。次にI:6とJ:6に月度の開始日と終了日を記入して下さい!!"
End If
End Sub
・hana-hana3有難うございました。
補足を記入後冷静に見てみると
ActiveSheet.Name = Sheet_Nameがsheet1がActivate
なってから実行なので当たり前でした。シートコピー後すぐActiveSheet.Name = Sheet_Name実行で見事解決いたしました。本当に有難うございました。
No.3
- 回答日時:
nov-dです。
プログラム、読ませていただきました。自分の書いたプログラムのポイントは、「Worksheets(1).Copy After:=Worksheets(2)」の後すぐに「ActiveSheet.Name = Sheet_Name」としている点です。
(すぐと言っても、エラー判定のため「On Error GoTo ERR1」を間にはさんでいますが。)
WorkSheets(1).Copy・・・を実行すると、コピー後のシート(この時点では「Sheet1(1)」)がActiveになります。
そこで、Activeになっているシートを(「XXX」に)リネームするという仕組みです。
いただいたプログラムでは、その間に(「Sheets(1).Activate」などで)Activeなシートが変わってしまっているため、うまく動かないということだと思います。
試しに、「WorkSheets(1).Copy・・・」の行を、「On Error GoTo ERR1」の1行手前に移動してみてもらえませんか?
多分うまく動くと思うのですが。。。f^_^;
うまく動かなければ、またここで書いていただければと思います。
PS.
こちらではユーザーフォームを作らずに実行しているため、「Unload UserForm2」の行はコメントアウトして(行頭に「'」を付けて)実行しています。
この回答への補足
・回答ありがとうございました。Copy行を変更すると旨く動きましたが、何故か私のプログラムではシート名の重複がある時ちゃんとエラーは出るのですが「シート1(2)」が出来てしまいます。又、データを消してからコピーするのでこれでは本題から逸脱します。元のままだとシート1が「XXX」と名前変更され、シート2の後に「シート1(2)」が出来てしまいます。モーちょっと頑張って見ます。又ご教授お願いします。
補足日時:2006/01/15 21:00・nov-dさんありがとうございました。おっしゃるとおり、「WorkSheets(1).Copy・・・」を動かして冷静に書き直して旨く動くようになりました。本当にありがとうございました。
No.1
- 回答日時:
nov-dです。
あれ、上手くいきませんでしたか?
こっちでやると、(シートのコピー時ではなく)シート名のリネーム時にエラーハンドラが働いて、上手くerr1に飛びますが。。。
良ければプログラムを見せてもらえませんか?
Sub Copy_Sheet()
Dim Sheet_Name As String
Sheet_Name = Worksheets(1).Range("A1").Value
Worksheets(1).Copy After:=Worksheets(2)
On Error GoTo ERR1
ActiveSheet.Name = Sheet_Name
Exit Sub
ERR1:
MsgBox ("シート名が重複しています。別のシート名を指定してください。")
Exit Sub
End Sub
この回答への補足
・早速の回答ありがとうございます。実際の自分のプログラムの流れは以下の様にシート1,2の値を消すようにして有ります。流れを全て書くと
1)シート1の「A1」の値(XXX)を参照しシート2の後にシート1の名前を「XXX」にしてコピーする。
2)その際「XXX」が有れば処理を中止する。
3)「XXX」がなければシート1,2の値をクリヤーする
以上です。
因みに以下がプログラムです。
Private Sub CommandButton1_Click()
Dim Sheet_Name As String
Sheet_Name = Worksheets(1).Range("A1").Value
Worksheets(1).Copy After:=Worksheets(2)
Sheets(2).Activate
Range("B36:B67").Select
Selection.ClearContents
Sheets(1).Activate
Range("I6:J6").Select
Selection.ClearContents
Range("C18:K48").Select
Selection.ClearContents
Range("Q18:AS48").Select
Selection.ClearContents
Range("D15").Select
Unload UserForm2
On Error GoTo ERR1
ActiveSheet.Name = Sheet_Name
Exit Sub
ERR1:
MsgBox ("シート名が重複しています。別のシート名を指定してください。")
Exit Sub
End Sub
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAマクロでシートコピーした新シートにコピー元シートとの計算式の入れ方を教えて下さい。 5 2022/11/20 09:48
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) シートが違う2枚のエクセルシートにある数値を別シートにコピーしたい(VBA?) 8 2022/03/31 12:24
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 11:55
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
コンビニでおにぎりを買うときのスタメンはどの具?
コンビニでおにぎりを買うとき、何の具材を選ぶことが多いですか?
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
エクセルのシート名変更で重複した時のvbaの処理
Visual Basic(VBA)
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
VBAでシートコピー後、シート名が重複している時の処理
Excel(エクセル)
-
-
4
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
5
別ブックをダイアログボックスで指定してそこにあるシートをコピーしたい
Excel(エクセル)
-
6
InputBoxに入力した言葉をシート名にしたい!
Excel(エクセル)
-
7
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
8
マクロで印刷→セルの値から部数変更するには
Excel(エクセル)
-
9
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
10
VBA シート名重複した場合削除する
Access(アクセス)
-
11
エクセルVBA Ifでシート名が合致したら別ファイルから転記する場合のElse IfとForの書き方
Visual Basic(VBA)
-
12
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
13
セルの値と同じ名前のシートをアクティブにするには?
Excel(エクセル)
-
14
EXCELでワークシートを開いたらマクロを自動実行したい
Excel(エクセル)
-
15
Excel2000/VBA:値と書式のみ貼り付けたい。
Excel(エクセル)
-
16
Excel VBA シート名変更時、重複していたら連番を付けたい
その他(Microsoft Office)
-
17
エクセルファイルを開く時、常に同じシートから開くようにするには?
Windows Vista・XP
-
18
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
19
エクセルVBA 同じ名前のシートがすでにあるとエラートラップに飛ばしたいのですがうまくいきません こ
Visual Basic(VBA)
-
20
VBAでセルに入っている日付をシート名にする
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
特定の文字を含むシートだけマ...
-
【VBA】シート名に特定文字が入...
-
VBAで指定シート以外の選択
-
エクセルのシート名変更で重複...
-
ユーザーフォームに入力したデ...
-
【Excel VBA】Worksheets().Act...
-
別のシートから値を取得するとき
-
シートが保護されている状態で...
-
Excel VBA リンク先をシート...
-
実行時エラー1004「Select メソ...
-
IFステートの中にWithステート...
-
userFormに貼り付けたLabelを変...
-
Worksheet_Changeの内容を標準...
-
エクセルVBA Ifでシート名が合...
-
C#でExcelのシートを選択する方法
-
ブック名、シート名を他のモジ...
-
エクセルで通し番号を入れてチ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
【ExcelVBA】全シートのセルの...
-
別のシートから値を取得するとき
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
ブック名、シート名を他のモジ...
-
【VBA】シート名に特定文字が入...
-
シートが保護されている状態で...
-
VBAで指定シート以外の選択
-
エクセルのシート名変更で重複...
-
XL:BeforeDoubleClickが動かない
-
VBA 存在しないシートを選...
-
IFステートの中にWithステート...
-
実行時エラー'1004': WorkSheet...
-
Excel VBA リンク先をシート...
-
エクセルVBA Ifでシート名が合...
-
ExcelVBA:複数の特定のグラフ...
-
ExcelのVBAのマクロで他のシー...
-
実行時エラー1004「Select メソ...
おすすめ情報