• ベストアンサー

エクセルのVBAを勉強中

VBAの勉強をしております。 初心者なので、なんでこんなの分からんの!と言わず、教えていただけたらと思います。 シート1のA2からD2まで入力したものを、コピーしてA4からD4に貼り付けるという式は、下記でいけると思いますが、 シートをまたいだ時はどうなるのでしょうか。 例えば、A2からD2まで入力したものを、シート2のA4からD4に貼り付ける場合は、どうなるのでしょうか。 また、シート1のA2:D2までの入力を何度か繰り返した場合、シート2への貼り付けが、A5:D5、A6:D6、A7:D7とどんどん下に溜まっていく式を教えてください。 Range("A2:D2").Copy Destination:=Range("A4:D4")

noname#132207
noname#132207

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

  • ベストアンサー
  • Zero_0
  • ベストアンサー率35% (72/201)
回答No.1

シートをまたいだコピーの場合は、標準モジュールの中にかきます。それぞれのシートごとのVBAではできません。 標準モジュール内に sheets("sheet1").select 'でシートを指定 Range("A2:D2").Select   '入力場所の指定 Selection.Copy      'コピー Sheets("Sheet2").Select 'でシートの切り替え Range("A2:D2").Select   '書込場所の指定 ActiveSheet.Paste     '貼り付け sheets("sheet1").select 'で元のシートを指定 で別シートへの貼り付けができます。 ここで、貼り付け場所を順に変えてやれば下に積み重なっていくようにできます。 貼り付け場所を変える方法は、whileでも使いましょう。 j=1 while cells(j,1)<>"" j=j+1 wend これで1行目からA列のチェックをし空欄になるまでj=j+1を繰り返します。A列j行目までいってそこが空欄ならWhileを終了しますので変数jに行番号が入っています。 Range("A2:D2").Select の替わりに Range("A" & j & ":D" & j).Select と入れてやれば空欄になった行に書き込みます。

noname#132207
質問者

補足

ありがとうございます! なるほど、標準モジュールの中に書き込めばいいんですね。 うーん、書き込んだはいいんですが、それを実行するにはどうしたらいいんでしょうか。 そ・そ・そんなことまで、教えなければならんのか! と言うお気持ちは重々承知しております。 ホントにすいません。まだまだわたくし、ヒヨッ子なので許してください。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

>標準モジュールの中に書き込めばいいんですね。 別に、シートモジュールに書き込んでもよいのですが、一般的な目的の場合は、Excel VBAでは、標準モジュールに書き込むのが標準的な書き方です。ただ、このレベルでは、あまり違いがありません。 Range("A2:D2").Copy Sheet2.Range("A4:D4") は、最初のRange("A2:D2")は、アクティブ・シートだということで、コピーソースのシートが限定されません。 >A5:D5、A6:D6、A7:D7 >とどんどん下に溜まっていく式を教えてください。 '-------------------------------------- 一括式 Sub test() Dim i As Integer '回数 i = 5  Sheet1.Range("A2:D2").Copy Sheet2.Range("A4").Resize(i) End Sub '-------------------------------------- 'インクリメンタル式 Sub test2() Dim i As Integer With Sheet1  .Range("A2:D2").Copy For i = 5 To 7 '行番号   .Paste Sheet2.Cells(i, 1) Next i End With  Application.CutCopyMode = True End Sub '-------------------------------------- 似たような同じ繰り返しは、書かないのが基本です。 >そ・そ・そんなことまで、教えなければならんのか! 本当に、どうやって書くのが正しいのか、私など分かるわけではありません。ただ、VBAの基本的なルールやプログラミングとして、どう作るかを考えて、毎日、勉強していくしかありませんね。でも、今回のようなレベルこそ、本当は難しいのかもしれません。これで良いのかは分かりません。

  • Zero_0
  • ベストアンサー率35% (72/201)
回答No.3

標準モジュール内のsubの実行は、マクロ実行ボタンでできます。ツールバーのVisualBasicの所にあります。 または、シート上にボタンを作ってそれをクリックしたときのVBAにsub名をかくことで実行できます。 プログラムの性質上後者の方がいいかと思います。

回答No.2

難しく考えすぎです。 [Sheet1]の特定のセルのデータを[Sheet2]の特定のセルにコピーするのであれば、下記のコードで十分です。 >>Sheet1に記入した場合 Sheet2.Range("A4:D4").Value = Range("A2:D2").Value >>標準モジュールに記入した場合 Sheet2.Range("A4:D4").Value = Sheet1.Range("A2:D2").Value 書式ごとコピーする場合は >>Sheet1に記入した場合 Range("A2:D2").Copy Sheet2.Range("A4:D4") >>標準モジュールに記入した場合 Sheet2.Range("A4:D4").Value = Sheet1.Range("A2:D2").Value 同一のデータを複数のセルにコピーするなら Dim x As Integer Dim szCells As String For x = 4 To 14 szCells = "A" & x & ":D" & x Sheet2.Range(szCells).Value = Sheet1.Range("A2:D2").Value Next x 書式ごと複数のセルにコピーするなら Dim x As Integer Dim szCells As String For x = 4 To 14 szCells = "A" & x & ":D" & x Sheet1.Range("A2:D2").Copy Sheet2.Range(szCells) Next x *上記の2このコードは標準モジュールに記入した場合です。 あとは、これを参考に組み替えた見てください。 プログラムを覚えるには、考える事が重要です。

関連するQ&A

  • エクセルVBA:繰り返し処理について

    エクセルVBA初心者です。どうかご指導お願いします。 シート1に入力されたデータベースがあります。 B列には氏名が入力されています。 B2の値で絞りこんで、シート2に貼り付け、 B3の値で絞りこんで、シート3に貼り付け、 B4の値で絞り込んでシート4に貼り付けてB列の値が""(空白)になるまで繰り返すコードの書き方を教えてください。 さらに、B列には、当然同じ氏名が何回も入力されているので、前に一度出た人はパスするというようにしたいのです。 下記コードは、「B2の値で絞りこんで、シート2に貼り付け」だけをしたものですが、このコードを応用して作りたいのです。ご指導お願いします。 Sub test01()  With sheets("sheet1")Range("A1")   .AutoFilter field:=2, Criteria1:=Range("B2")   .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1")   .AutoFilter  End With End Sub

  • エクセルVBA:コピーの貼り付け先

    VBA初心者です。よろしくお願いします。 あるデータベースをセルB2に入力されている値で絞込み、 シート2に貼り付けるとき、下記の(1)がおそらく正解だと思いますが、 ★(質問1) (2)でも同じ結果が得られました。コピー先の目的地を示す「Destination:=」の部分は省略して全く問題なしと考えてよろしいのでしょうか? ★(質問2) (3)で試してみても同じ結果が得られました。range("sheet2!A1") なんて書き方は、たまたま、試してみたらできちゃった(同じ結果が得られた)のですが、使い方として問題ありませんか? ------------------------------------------------------------- (1) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (2) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (3) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Range("Sheet2!A1") .AutoFilter End With End Sub

  • エクセルvbaでのセルの情報を貼り付け方法

    vba初心者です。sheet1にあるセルの情報をsheet2にあるセルに貼り付けようと考えています。 下記のようにプログラムしました。 If Cells(Line, 6).Value = "" Then Cells(Line, 6).Value = "データがありません" Cells(Line, 5).Value GoTo コピー貼り付け End If コピー貼り付け: Cells(Line, 5).Copy 'コピーする Worksheets("輸入Parts").Range("A2").PasteSpecial Paste:=xlPasteValues '値を貼り付け 問題はコーピー貼り付けの箇所でRange("A2")ではなくA列の最初の空白のセルに貼り付けるようにしたいです。 どなたかお力をお貸しください。

  • エクセルVBAの貼付けについて

    エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With

  • VBA初心者です。値を貼り付け について質問です。

    VBA初心者です。 値を貼り付け について教えてください。 Sub test() With Workbooks("A.xls").Worksheets("sheet1") .Range("A1").Copy Workbooks("Bxls").Worksheets("sheet1").Range("B2") .Range("A2").Copy Workbooks("B.xls").Worksheets("sheet1").Range("B4") End With End Sub コピーする方に計算式が入っているので 値を貼り付け したいのですが、どうすればいいのでしょうか? PasteSpecial Paste:=xlPasteValues を使ったらよいというところまではわかったのですが・・・。 教えてください!よろしくお願いします!

  • エクセルVBA 別シート間の列のコピー&ペースト

    列のコピー&ペーストができません。 i, j は変数で、Integerで定義しており、省略はしていますが、期待通りの値がi, j には代入されています。 Sheet1のi列からj列をコピーし、Sheet2のC列(これは固定)に貼り付けたいのですが、うまくいきません。 私の書いたコードは下記の通り。 下記は改行されていますが、実際のVBAでは1行で書かれています。 Worksheets("Sheet1").Range(Columns(i), Columns(j)).Copy Worksheets("Sheet2").Range(Columns("C")) 貼り付け先(Destination)の記述がいけないのでしょうか? 行き詰っておりますので、どなたかお助けください!

  • コピー後に値のみ貼り付け エクセル、VBAの記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • Excel Selectは使わない? VBA

    おはようございます。 ExcelのVBAを独学しております。 いまさらな質問だとは思いますが、 そこで、色々調べていたところ 「Select」はあまり使うな! ということが良く出てきました。 selectを使わず、上手くシート移動などができるのでしょうか? 私が組んでいるものは、色んなシートを切り替えなければならなく、 毎回Selectしています。 Activateを使ったこともありますが、 エラーが多発し、良く分からなかったためSelectを使用しています。 出来れば、シートをアクティブにすることなく 操作ができれば良いのですが・・・ 例)「データ」「コピー」のシートがあります。 「データ」シートのAからD列を「コピー」シートにコピー しようとするものです。 WorkSheets(データ).select Range("A1").select Range("A:D").select selection.copy Worksheets("コピー").select Range("A1").select ActiveSheet.Paste どうしてもSelectを多様してしまいます。 ●Selectを使わないデータの入力方法 ●Selectを使わず、シートをアクティブにしなくても良い参照方法 ●どうしてもSelectを使わないといけない場面 ●Selectを使うのを回避するためには・・・ などなど、ご存知でしたら回答お願い致します。

  • エクセルのVBAで、異なるブック間でのコピー&ペースト

    こんばんは。 エクセルのVBAで、異なるブック間でのコピー&ペーストに関しての質問です。 現在アクティブになっているシートのB4セルをコピーして、 現在開いているシートのブックとは異なる特定の ブック(”Book1")の特定のシート(”Sheet1”)のC5セルに貼り付けたい場合、 ●●●の部分に何と表現すればよいか教えてください。 Range("B4").Copy Destination:=●●● よろしくお願いいたします。

  • VBA セルコピーのエラー

    こんにちは。 Excel VBAの初心者です。 セルコピーについて教えてください。 シート1のセル範囲e4~aj4を、シート2の同じ場所に、そのままコピーします。 Worksheets(1).Range("e4:aj4").Copy Destination:=Worksheets(2).Range("e4:aj4") 上記だと普通に通るのですが、コピー元の行に変数を使用したくて、その前に一度下のように書き換えました。 Worksheets(1).Range(Cells(4, 5), Cells(4, 36)).Copy Destination:=Worksheets(2).Range(Cells(4, 5), Cells(4, 36)) するとエラー1004(アプリケーション定義またはオブジェク定義のエラー1004(アプリケーション定義またはオブジェク定義のエラー)が出て、通らなくなります。 単純なことだと思うのですが、初心者ゆえ困っております。 どなたかご教示いただけますと幸いです。 よろしくお願いいたします。

専門家に質問してみよう