Excel複数シートコピーのVBAで同時に名前も変更する方法はあるか?

このQ&Aのポイント
  • Excelのシートコピーを複数つくるVBAを探しています。Sheet1を10シートコピーする場合に方法はありますでしょうか?
  • シートコピーのみでもよいので、教えていただけませんか?
  • VBAを使用してExcelのシートを複数コピーする方法について、シート名も同時に変更することは可能でしょうか?
回答を見る
  • ベストアンサー

Excel 複数 シートコピー 同時に名前も・・・

Excelのシートコピーを複数つくるVBAを探しています。 Sheet1を10シートコピーする場合に方法はありますでしょうか? 本当は、それの名前もVBAで変更できればよいと考えているのですが、とりあえずシート名の変更は、以下のVBAでできました。 Sub シート名変更() Const OrgSh = "Sheet2" Dim Rw As Long Dim Cnt As Integer Sheets(OrgSh).Move Before:=Sheets(1) For Cnt = 2 To Sheets.Count Sheets(Cnt).Name = "Tentative" & Cnt Next For Cnt = 2 To Sheets.Count Sheets(Cnt).Name = Cells(Cnt, 1).Value Next End Sub なので、最初にシートをコピーして、名前を変更する、2段構えの覚悟はできています。 シートコピーのみでもよいので、だれか教えていただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

コピー元は「Sheet1」とし,複製は「test○○」のようだとすると sub macro1()  dim i as long  dim n as long  dim w as worksheet ’既にあるシート名を付けようとしてエラーで止まらないようにすること  for each w in worksheets  if w.name like "test*" then  n = application.max(n, val(mid(w.name,5,9)))  end if  next ’シートを複製して正しい名前を付けること  for i=n + 1 to n + 10  worksheets("Sheet1").copy after:=worksheets(worksheets.count)  activesheet.name = "test" & i  next i end sub #デタラメをやっても動かないのは当然なので,ヘルプなどを良く読む習慣をまず身につける必要がありそうですね。

gastronome
質問者

お礼

精進します ありがとうございます。

その他の回答 (3)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO2です。 >Sheets("sheet1").Copy after:=Sheets(Sheets.Count), Count:=3 と作ったのですが動きませんでした  ⇒VBAの学習不足です。   VBAの知識もなくVBAを始める事は無理があります。   先ずは、沢山あるVBA入門サイトか参考書の一つでも読破して下さい。   一例の入門サイトを添付しましたので一度ご確認下さい。

参考URL:
http://www.eurus.dti.ne.jp/~yoneyama/
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

>Excelのシートコピーを複数つくるVBAを探しています。  ⇒コードコピーから始まっても良いが、そのコードの意味を咀嚼しないと駄目です。   自分で作成してなんぼなのだから回答の丸映しはやめましょう。 ヒント例です。 Sheets("sheet1").Copy after:=Sheets(Sheets.Count) ‘シート1を最右端へコピー ActiveSheet.Name = "シート名" ’コピーシート名前の変更

gastronome
質問者

お礼

いろいろとご指導ご鞭撻のほどよろしくお願いします 例えば、3シート追加する場合は Worksheets.Add After:=Worksheets("Sheet1"), Count:=3 ですよね 上記のヒントを利用して Sheets("sheet1").Copy after:=Sheets(Sheets.Count), Count:=3 と作ったのですが動きませんでした。  また、いろいろと勉強してみます。

noname#152318
noname#152318
回答No.1

 初心者です。 m(_ _)m 流れだけですが、マクロ記録開始にしてシートタブを選択してコピーします。  1シートでも良いのですが、2~10シートコピーして、マクロを終了させます。   ○シフトキーを押しながら2枚目のシートをクリックするとその間のシートも全て選択    できます。   ○コントロールキーを押しながらシートを選択すると、複数のシートを選択できます。   ○右クリックで、【移動またはコピー】→【コピーの項目にチェックを入れる】→【OK】     で瞬時にシートがコピーされて増えます。     必要に応じてシート名を書き換えます。       記述をボタンに記録します。 次回からはマクロボタンをクリック下だけで、コピーされたシートがマクロで  バンバンできます。 マクロにしなくても、○印だけでも相当早いです。

関連するQ&A

  • シートをコピーして シートに1から連番をふる

    (マスター)というシートがありまして、そのシートをコピーしてシート名に1からの連番をふる マクロをお教え下さい。 Sub sub_CopySample() Dim myLooP As Integer For myLooP = 1 To 10 Sheets("マスター").Copy After:=Sheets(myLooP) Next myLooP For myLooP = 1 To 10 Sheets(myLooP + 1).Name = myLooP Next myLooP End Sub これだと止まりません。 1シートづつ増やしたいのですが。

  • エクセルのシートをマクロで並び替えたいです。

    以前に、Q&Aがあったので、下記の物を入れてみましたが、シート名に会社名を入れている為、前(株)○○となると、全て(株)で集まってしまいます。 エクセル2003を使っています。 Sub SortSheets() Dim intLoopA As Integer Dim intLoopB As Integer For intLoopA = 1 To Sheets.Count For intLoopB = 1 To Sheets.Count - 1 If Sheets(intLoopB).Name > Sheets(intLoopB + 1).Name Then Sheets(intLoopB).Move after:=Sheets(intLoopB + 1) End If Next intLoopB Next intLoopA End Sub ご理解いただけますでしょうか? お分かりになられる方宜しくお願い致します。

  • エクセル 漢字のシート名をあいうえお順に並び替え

    エクセル2003を使っています。 シートが80ほどあり、シート名は漢字で氏名になっています。 その80あるシートをあいうえお順に並べたいと思っています。 別のサイトで下記を見つけたので、使いました。 並びかわりましたが、漢字を使っているせいか、あいうえお順に 並び変わりませんでした。 試しに、2~3のシート名をカタカナに変えたら正しく並び変わりました。 やはり、漢字だとうまく並びかわらないのでしょうか。 また、何か別の方法はありますか? 教えて下さい。 Sub SortSheets() Dim intLoopA As Integer Dim intLoopB As Integer For intLoopA = 1 To Sheets.Count For intLoopB = 1 To Sheets.Count - 1 If Sheets(intLoopB).Name > Sheets(intLoopB + 1).Name Then Sheets(intLoopB).Move after:=Sheets(intLoopB + 1) End If Next intLoopB Next intLoopA End Sub

  • 変数を名前に使ったシートにデータをコピーする方法

    いつもお世話になります。 hisworkbookにあるVBAから新たに開いたmyFileにデータをコピーさせようとしています。 myFileである統合.xlsにはあらかじめ該当するシートが作成されています。 myBushoとmyGroupはそれぞれセルの値を参照しています。 それを元に対応するシート名にデータのコピーをしたいのです。 当初workbooks(myFile)をactiveworkbookにしていたのですが、うまくコピーされなかったので、 ファイルパスを記述しました。 sub test() dim cnt as long dim lcnt as long dim myFile as string dim myBusho as string dim myGroup as string cnt = ThisWorkbook.Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row lcnt = ActiveWorkbook.Sheets(myBusho & "_" & myGroup).Cells(Rows.Count, 1).End(xlUp).Row myFile = "C:\統合.xls" myBusho = range("A1").value myGroup = range("A2").value ThisWorkbook.Sheets("Sheet1").Range(Cells(9, 1), Cells(cnt, 21)).Copy _ Workbooks(myFile).Sheet(myBusho & "_" & myGroup).Cells(lcnt + 1, 1) end sub 上記のコードではうまくコピーできませんでした。 よろしくアドバイスのほど、お願いします。

  • エクセルのシートに連番をつけたい

    エクセル2010を使用しています。 シートが100個あったとして、 下のコードで1~100番までは コマンドボタンを押すことで、シート名を 変えることができました。 ところがコードの 1 To・・・を 101 To・・・に変えても101~200番には ならないのです。 私がコードを書く時はてっきりこれで大丈夫だと 思っておりましたが・・・意味をはきちがえているみたいです。 どなたか数値を変えれば 何番でも対応できるコードを解説付きでお教えください。 Private Sub CommandButton3_Click() Dim i As Long For i = 1 To Sheets.Count Sheets(i).Name = i Next End Sub

  • シートが文字列で並び替えられて困っています。

    エクセル2003を使用しています。 シートの並びについて、文字列(名前順)ではなく、数値順に並び替えたいのですが、 どのようなマクロを組めば良いのでしょうか? ↓これですと、シートの並びが文字列(名前順)になってしまうので、ダメなんです。 ------------------------------- Sub Sort() Dim intLoopA As Integer Dim intLoopB As Integer For intLoopA = 1 To Sheets.Count For intLoopB = 1 To Sheets.Count - 1 If Sheets(intLoopB).Name > Sheets(intLoopB + 1).Name Then Sheets(intLoopB).Move After:=Sheets(intLoopB + 1) End If Next intLoopB Next intLoopA End Sub ------------------------------- 例として、 01.午前中/02.午後/100/300/50/テスト ではなく、 理想型は 01.午前中/02.午後/50/100/300/テスト の順番です。 シート名に番号+日本語を付けているのがあるのは、数字の並び順になって欲しい対策です。 分かりやすくするために簡略化いたしましたが、 実際は300ほどのシートがバラバラに出入りし、それらは連番ではありません。 数値順にするvbaをよろしければ教えて頂けませんでしょうか。 よろしくお願いいたします。

  • エクセルVBAで一番左の可視シート名を取得

    エクセルVBAで一番左側にあるシート名を取得する場合、通常は Sub test01()   MsgBox Sheets(1).Name End Sub で簡単にできますが、このSheets(1)が非表示になっている場合でもその名前が取得されるため、見た目での一番左側にあるシート名ではなくなってしまいます。 もちろん、非表示になっているシートを除外して Sub test02()   Dim n As Integer   For n = 1 To Sheets.Count     If Sheets(n).Visible Then       MsgBox Sheets(n).Name       Exit For     End If   Next End Sub とすれば取得できるのはわかりますが、こんなまだるっこい方法以外に簡単に一番左の可視シート名を取得する方法はないでしょうか? (^∇^)? ご教示くださいませ。

  • エクセルでシート名でソート

    エクセルのシートをシート名でソートしたいのですが、VBAで以下の様な条件で出来るのでしょうか。 ・シートは必ず5枚以上で、最大70枚です。 ・シート名は、半角英数字、漢字を使用しています。 ・ソートの順は、1文字の「0~9」→「A~Z」→「0_0~9_Z」→「A_1~Z_Z」の順になります。 ・シートの一番左端と右端3シートは並び替えしない(漢字名シート)。 例(ソートするシート) 0→4→5→F→0_1→0_9→4_1→5_4→5_5→F_5 「シートの並び替え」で検索してみましたら以下のサンプルが 有りましたので少し変更してみました。 ********************* Sub MoveSamp1() Dim i As Long Dim j As Long For i = 2 To Sheets.Count - 3 '---最初から最後の3つ前のシートまで For j = i + 1 To Sheets.Count '---i番め以降のシート全て If Sheets(i).Name > Sheets(j).Name Then '---シート名の比較 Sheets(j).Move Before:=Sheets(i) '---(1)シートの移動 End If Next j Next i End Sub ********************************************************** 結果 0→0_1→0_9→4→4_1→5→5_4→5_5→F→F_5 上手くいきませんでした。 他の方法として   ブック追加、シート名をセルに書き出し、セルとシート名比較、シート移動、ブック削除 なども試してみましたがダメでした。 シート名が数字ならば行くようですが。  エクセルは2003~2010で考えています。 すみませんが良いお知恵をお貸しくださいませんか。

  • VBAで複数のシート名を置換する処理

    Dim ws As Worksheet Dim i As Long For i = 1 To ThisWorkbook.Sheets.Count For Each ws In ThisWorkbook.Sheets If ws.name Like "*T*" Then ws.name = Replace(ws.name, "T", "S") End If Next Next End Sub この処理をするとnameメソッド失敗worksheetオブジェクト 処理できるようにするにはどうすればいいんでしょうか

  • エクセルVBAでSheet1.ActivateとSheet(n).Activate

    エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。

専門家に質問してみよう