• ベストアンサー

VBAを教えてください。

VBAの初心者本を読み始めたのですが、こういう操作をしたのですが、どのように書くと一番簡単にできますか?記述していただきたいです。 sheet1の全ての内容をsheet2~最後のシートまでコピーして貼り付け (sheet1のタブは左端にあるものとします。そこからsheet2から右にあります。) For~Nextなど使うのでしょうか?よろしくお願いします。

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

  • ベストアンサー
  • emsuja
  • ベストアンサー率50% (1065/2116)
回答No.1

ざっとこんな感じかな Sub Sheet_Copy() Dim x As Object Worksheets("sheet1").Cells.Copy For Each x In Worksheets 'Stop If UCase$(x.Name) = "SHEET1" Then Else Sheets(x.Name).Select Cells.Select ActiveSheet.Paste End If Next End Sub

その他の回答 (3)

回答No.4

こんにちは。 > sheet1の全ての内容をsheet2~最後のシートまでコピーして貼り付け > (sheet1のタブは左端にあるものとします。そこからsheet2から右にあります。) 手作業でのシートデザインを補助する目的の非常用マクロ、 という意味でしたらば、"左端"という位置情報を基準にするのも アリでしょうから、設問の通り"左端"のシートを参照する例でお応えします。 但し、日常の実務で用いる常用マクロ、 という意味でお考えになるのでしたら、 シートの位置は簡単に動かせるものですから、 [ブックの保護]でシートの移動を制限するなど 運用上での配慮と組み合わせて設計するようにしてみて下さい。 > VBAの初心者本を読み始めたのですが、... > どのように書くと一番簡単にできますか? ... 書籍に固有の価値観として「一番簡単」という表現はあるのかも知れませんが、 書くのが簡単、読む(改編する)のが簡単、扱う(保守・管理する)のが簡単、 (入門時に覚えておくべきことを指して簡単なものと呼ぶ場合もあるみたい) などなど、「簡単」というのも多様な意味を持つものですし、 VBAでは、ひとつの結果を得る為の記述は驚くほど沢山あります。 多彩な個性に触れてみたい、という目的なら結構ですが、 基礎的なことを覚えようとなさるなら、質問はなるべく控えて、 読み始めた本を読み終えることを優先して、 まず「ひとつの教え方」で完遂してから、 次に拡充を図る目的で質問を投げるようにする方が 混乱を避ける意味で吉かと思います。必要に迫られれば別ですが。 > For~Nextなど使うのでしょうか?よろしくお願いします。 "For~Next"を用いた基本例を含む3例でお応えします。 いずれも  "左端"のシートの【セル】 をコピーして  "左端以外"のすべてシート に貼り付ける という内容です。 セルのコメント、入力規則のドロップダウン、等は普通にコピーされますが、 図形、図、ボタン等各種コントロール等のオブジェクトを 同時にコピーしたい場合は別の工夫が必要になります。 ' ' /// 基礎 Sub ReW9133106a() Dim i As Long   Worksheets(1).Cells.Copy   For i = 2 To Worksheets.Count     Worksheets(i).Cells.PasteSpecial   Next i   Application.CutCopyMode = 0 End Sub ' ' /// オブジェクトと条件分岐の扱い方 Sub ReW9133106c() Dim w As Worksheet   For Each w In Worksheets     If w.Index = 1 Then       w.Cells.Copy     Else       w.Cells.PasteSpecial     End If   Next   Application.CutCopyMode = 0 End Sub ' ' /// コピー先のシートを纏めて選択して貼り付ける応用篇 Sub ReW9133106()   Worksheets(Evaluate("transpose(row(2:" & Worksheets.Count & "))")).Select   Worksheets(1).Cells.Copy   Cells.PasteSpecial   Application.CutCopyMode = 0 End Sub ' ' ///

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.3

現在存在する、「Sheet2」ではなく、新たにシートを作るのでしたら、簡単なのですが! Sub Test() Worksheets(1).Copy After:=Worksheets(1) End Sub で、新たなシートが作られ、1番目のシート「Sheet1」の右横に「Sheet1(1)」が作られます。 しかし、されたいのは、 Worksheets(1).Copy Worksheets(2).Paste のようなことなのでしょうね? これがどうしても出来ず、私には、分かりませんでした。 申し訳ございません。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 基本的には下記の様なVBAとなります。 Sub QNo9133106_VBAを教えてください() Const OriginSheet = "Sheet1" Dim ws As Worksheet For Each ws In Worksheets If ws.Name <> OriginSheet Then _ Sheets(OriginSheet).Cells.Copy ws.Cells(1, 1) Next ws Application.CutCopyMode = False End Sub  そして、上記のVBAに対して、処理の高速化策と、万が一、Sheet1が存在しなかった場合におけるエラー回避を組み込むと以下の様になります。 Sub QNo9133106_VBAを教えてください_改() Const OriginSheet = "Sheet1" Dim ws As Worksheet If IsError(Evaluate("ROW('" & OriginSheet & "'!A1)")) Then MsgBox "元データが入力されているシートとして設定されている" _ & vbCrLf & vbCrLf & OriginSheet & vbCrLf & vbCrLf & _ "というシート名のシートが見つかりません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "存在しないシート" Exit Sub End If With Application .ScreenUpdating = False .Calculation = xlManual .CutCopyMode = False End With For Each ws In Worksheets If ws.Name <> OriginSheet Then _ Sheets(OriginSheet).Cells.Copy ws.Cells(1, 1) Next ws With Application .CutCopyMode = False .Calculation = xlAutomatic .ScreenUpdating = True End With End Sub

関連するQ&A