・先日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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
餃子を食べるとき、何をつけますか?
みんな大好き餃子。 ふと素朴な疑問ですが、餃子には何をつけて食べますか? 王道は醤油とお酢でしょうか。
-
チョコミントアイス
得意ですか?不得意ですか?できれば理由も教えてください。
-
これ何て呼びますか Part2
あなたのお住いの地域で、これ、何て呼びますか?
-
許せない心理テスト
私は「あなたの目の前にケーキがあります。ろうそくは何本刺さっていますか」と言われ「12本」と答えたら「ろうそくの数はあなたが好きな人の数です」と言われ浮気者扱いされたことをいまだに根に持っています。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
VBAでシートコピー後、シート名が重複している時の処理
Access(アクセス)
-
エクセルのシート名変更で重複した時のvbaの処理
Visual Basic(VBA)
-
VBAでシートコピー後、シート名が重複している時の処理
Excel(エクセル)
-
-
4
VBA シート名重複した場合削除する
Access(アクセス)
-
5
Excel VBA シート名変更時、重複していたら連番を付けたい
その他(Microsoft Office)
-
6
excelのマクロで該当処理できなければ飛ばして進むにはどうすればよいのでしょうか
Visual Basic(VBA)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
10
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
11
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
12
エクセルVBA 同じ名前のシートがすでにあるとエラートラップに飛ばしたいのですがうまくいきません こ
Visual Basic(VBA)
-
13
VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください
Excel(エクセル)
-
14
VBAでセルに入っている日付をシート名にする
Excel(エクセル)
-
15
セルの値と同じ名前のシートをアクティブにするには?
Excel(エクセル)
-
16
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
17
WorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】
Excel(エクセル)
-
18
VBA 存在しないシートを選択した時にエラーメッセージを表示するには?
Visual Basic(VBA)
-
19
EXCELでワークシートを開いたらマクロを自動実行したい
Excel(エクセル)
-
20
ExcelのVBAでフォームが表示されない
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】全シートのセルの...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
Excelマクロのエラーを解決した...
-
別のシートから値を取得するとき
-
Excel VBA マクロ 先頭行の固定...
-
VBA 入力月で該当シートを選択...
-
エクセル・マクロ シートの非...
-
【エクセルVBA】「Protect User...
-
VBA 最終行まで数式をコピーする
-
EXCEL(VBA)でシート保護がかか...
-
エクセルのマクロで条件一致の...
-
vbaでworksheetfunctionでの複...
-
実行時エラー1004「Select メソ...
-
特定の文字を含むシートだけマ...
-
エクセルVBAでダブルクリックを...
-
Excel VBA で自然対数の関数Ln...
-
エクセルVBA 変数への代入がう...
-
Excelにて、シート間で、データ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
excelのマクロで該当処理できな...
-
Excelマクロのエラーを解決した...
-
別のシートから値を取得するとき
-
ブック名、シート名を他のモジ...
-
VBA 存在しないシートを選...
-
シートが保護されている状態で...
-
同じ作業を複数のシートに実行...
-
VBAで指定シート以外の選択
-
Excel VBA リンク先をシート...
-
エクセル・マクロ シートの非...
-
実行時エラー1004「Select メソ...
-
ExcelのVBAのマクロで他のシー...
-
【Excel VBA】Worksheets().Act...
-
エクセルVBA Ifでシート名が合...
-
userFormに貼り付けたLabelを変...
おすすめ情報