• ベストアンサー

VBAを教えてください。

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

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

  • ベストアンサー
  • emsuja
  • ベストアンサー率50% (1034/2055)
回答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

  • VBAのコード

    VBA初心者です。 "元データ"シートのA1をコピーし、cドライブにある、"保存用"というフォルダの、"一覧"というBOOKの"保存先"というシートのA1に貼り付ける時のコードがわかりません。 貼り付け先のシートを指定する記述がどうしてもわからないので助けてください。 よろしくお願いします。

  • VBAでシートのループ

    n個のシートがあるときに、 その全てのシートに同じ作業を繰り返し行いたいのですが、 Activesheet.Next.Select で選択していき最後のループでエラーになります。 VBA初心者でまだよく理解できてないのですが、 何かいい方法があればご教授お願いします。

  • エクセルVBAで。

    お世話になります。 VBA初心者です。 (初心者でもないのですが、しばらく遠ざかっていました。) エクセルVBAの記述内容をコピーし、 エクセルの通常のシートへ貼り付けした際、 記述上「’」で始まる文字は緑色が付いていますが、 通常のシートへ貼り付けした際、黒字になってしまいます。 そこで、下記の様なVBAを記述し、貼り付け後に、 「’」から始まる文字を緑色に着色しようと試みましたが (やはり)うまくいきませんでした。 エクセル関数なんかも織り交ぜたおかしな記述だと思いますが 何となくやりたい事が伝わって頂けるかと思うのですが、 どう修正したら出来ますでしょうか。 ご教授下さいます様、宜しくお願いいたします。   記 Sub 色() Dim y As Integer Dim x As Integer Dim a As Integer mysheet = ActiveSheet.Name For y = 1 To 10 x = Sheets(mysheet).Cells(Rows.Count, y).End(xlUp).Row a = 0 Do Until a > x a = a + 1 If Right(Cells(y, a), 1) = "'" Then Cells(y, a).Select Selection.Font.ColorIndex = 10 End If Loop Next End Sub

  • VBA どのように記述すれば良いか教えてください。

    はじめて、質問させていただきます。 まだExcel VBAの勉強を始めたばかりの者です。 下記のようなツールを作ることになったのですが、非常に困っています。どなたかわかる方がみえましたら、どうか教えて下さい。(Excel2003を利用) <すべてAという同じフォルダ内> book1.xls book2.xls ・  ・ book*.xls →ファイル数は変動します。集計.xls以外のファイルはすべて同じシート名で構成されて         います。すべてのファイルのシート名 ”結果”が対象です。 集計.xls →このファイルにマクロを作りたいです。        シート名が1、2、3・・と116まで用意されています。 __________________________________________________________________________________________________________________________________ Aフォルダ内の複数ファイルの同じシート名(”結果”)というシートのみコピーをし、同じフォルダ内のファイル「集計.xls」のシートへ値貼り付けをしたいのですが、 一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け、2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け。。3番目にコピーしたシートは「集計.xls」の3という名のシートへ値貼り付け。。というのを、シート数分繰り返す。。という記述を教えて頂きたいのです。 ループ??ですが、【一番初めにコピーしたシートを「集計.xls」の1という名のシートへ値貼り付け】 次に【2番目にコピーしたシートは「集計.xls」の2という名のシートへ値貼り付け】というのを一連の流れにしてループ処理したいのです。 こんなこと出来るのでしょうか??  初心者とはいえ丸投げは駄目だと、1週間ほどネットやいろいろなテキストで自分で何とかできないかと頑張ってみたのですが、部分部分しか記述できず時間だけが過ぎていき。。すっかり行き詰ってきてしまいました。 どうかお力を貸してください。宜しくお願い致しますm(uu)m

  • エクセルVBAで繰り返し条件について

    詳しい方どなたか教えてください。 VBAを書いているのですが、繰り返し条件で上手くいかず困っています。 For Each ~ Next を使って繰り返し処理を行っています。 あるブックに指定した名前のシートがあれば、そのシート内の内容を全てクリアして、 コピー元のシートの内容をコピーして値で貼り付けるようにしたいと思っています。 (ここまでは何となく上手くいってそうです) ただし、該当するシートがない場合は、 該当するシート名のシートを追加し、コピー元のシートの内容を値で貼り付けるようにしたいのですが、上手くいきません。 「ただし~」以降の内容をどのように書いたら良いか分からず困っております。 繰り返しの条件を満たさない場合(?)の処理の仕方を教えて頂けませんでしょうか。 宜しくお願い致します。

  • VBA列を行に入れ替える方法

    エクセル2010を使用してるのですが シート1の13列ずつ飛び飛びのセルをコピーして 1......2.....3.....4......5......6.....7.....8.....9....10 シート2のA1からA10に貼り付けする 1 2 3 4 5 6 7 8 9 10 For nextのコードで記述するにはどういう方法がありますでしょうか? よろしくお願いいたします。

  • excel vba 作成について教えて下さい。

    excel VBAを使ってあるブックのセル範囲を別のブック(日報.XLS)のシートへコピー貼り付けをしたいのですが、コピーする側のブックがランダムに取り込まれ(例 8時間ピッチにて自動的にブックが作成される)そのブックを日にちごとに集計し、一か月ごとにまとめるということをやらなければなりません。 例)8時間ごとにフォルダが作成されます。   000001.XLS 000002.XLS   00000F.XLS ・・・・・・・・16進数にて   上記ブックのSheet1のA2:A11までの数値を別のブック(日報月報集計)のに貼り付ける。 別のブック(日報月報集計)は項目ごとに10個のシートがあり 8時間ごとのファイルのセルA2は別ブックのSheet1の日付けに対応するセルへ貼り付け B2は       Sheet2 上記操作を8時間ごと(可変可能)に自動的にコピー貼り付けをやりたいのですが ブック間のコピー貼り付け等わからないことが(初心者です。)多々あり、いろいろ調べてはいるのですが、STOPした状態です。 出来れば、初心者にも理解しやすい解説等あれば宜しくお願いします。

  • ワークシートに対して処理をするVBAについて

    初めまして、ワークシートに対して処理をするVBAの記述に関して質問させてください。 複数のシートがあり、そのうち3シート目以降から最後のシートまで特定の処理をしたいと考えています。(最後のシートまでの数はそのときによって変動します。) しかし、 For Each sh In Array("A", "B", "C") のようにシート名を指定すると選択したシートに同時に処理をしてしまいます。選択したシートに同時に処理をするのではなく、1シート目を処理したら次のシート…という方法にしたいのですが、この場合どのように記述すればよいのでしょうか…?(T_T) ちなみに、 For Each sh In Worksheets という記述だと、全てのシートが処理の対象になってしまうのでだめなんです…。3つ目以降のシートに処理をしたいのです…!どなたかご教示いただけると嬉しいです!よろしくお願い致します!m(_ _)m

  • エクセル VBA初心者です

    エクセルでマクロを設定したいのですが、まだ初心者なのでVBAはほとんど書けません。 たとえば、A1セルの値をコピーして、一番最後のシートのA1セルに貼り付けるという作業を、始めのシートから最後から2番目のシートまで実行したいと思います。最後のシートにはA1からA2、A3、A4・・・のようにどんどん下に貼り付けていきたいのです。特にシートの名前を指定するのではなく、一番左から、最後から2番目までのシートまで、シートの数に関わらず実行したいのですが。。。 いろいろ本を見て調べたのですが、シートを指定して移動するのとかは書いてあったのですが、こういう場合はどうすればよいのでしょうか、よろしくお願いします。

  • エクセルVBA 開始セルに戻る方法

    エクセル2003にて VBA記述の方法で、”実行時に選択されていたシートのセルに戻る”というのはどう記述すればよいのでしょうか??? 現在使用しているVBAは人から教えてもらったもので”アクティブシートから他のシートの情報を検索し、コピーする”というものですが追加で”元のシートに返って情報を貼り付ける”という機能を追加したいです。 わかるかた教えてください。(初心者ですみません)

専門家に質問してみよう