- ベストアンサー
教えてください、VBA初心者で困っています。
コピーボタンを押しシートをコピーする際、名前を変更したいのですが初心者で出来ず困っています。 シートのコピーは 「Worksheets("A").Copy After:=Worksheets("B")」 で出来ましたがこれだシートBの後にコピーされたシートA名は「A(2)」になります。この名前をシートAの或るセルに記入されている年月日(2006-01)を参照し「2006-01」にしたいのです。参考書を見たり検索サイトで探しましたが旨くいきません。宜しくご教授お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
シートがAとBしかないのなら下記で可能ですが・・・。 Sub test() Sheets("A").Copy after:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = Format(Sheets("A").Range("A1").Value, "yyyy-mm") End Sub そうでないのであれば、 Sub test() Sheets("A").Copy after:=Sheets("B") Sheets("A (2)").Name = Format(Sheets("A").Range("A1").Value, "yyyy-mm") End Sub ですかね? シート名として使うセルが日付データの場合ですので、単純に文字列であれ ば修正して下さい。
その他の回答 (4)
- nov-d
- ベストアンサー率36% (51/140)
こんな感じでいかがでしょうか? 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
お礼
・シートコピー後のエラー処理まで有り参考になりました。ありがとうございました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
Worksheets("A").Copy After:=Worksheets("B") ActiveSheet.Name = Format(Range("A1"), "yyyy-mm") 若しくは、ActiveSheet.Name = Range("A1").Text
お礼
・早速の回答ありがとうございました。参考にさせていただきます。
- Hallo_Pain
- ベストアンサー率21% (3/14)
下記でいかがでしょうか? '↓コピーのプログラム (1)Sheets("Sheet1").Copy After:=Sheets(3) '↓コピーしたシートを選択 (2)Sheets("Sheet1 (2)").Select '↓選択した(コピーした)シート名の変更 (3)Sheets("Sheet1 (2)").Name = "COPY" 実際のシート名変更のプログラムは(3)です。 なので、質問者様の場合、コピー後のシート名が"B"ですので 文字列の場所を変更してもらえればいいかと思います。
お礼
・回答ありがとうございました。参考になりました。
こんばんは 回答ではないのですが参考URLが便利です。 ※sheetname~というのを使った記憶があります
お礼
・このURL参考になりました。ありがとうございました。
お礼
・ばっちり思い通りの動きが出来ました。ありがとうございました。これでセルの文字列を参照しシート名の変更が自由にできるようになりました。本当にありがとうございました。