- ベストアンサー
VBマクロ初心者がシートをコピーする方法
- VBマクロを使って、任意の複数行をコピーする方法を教えてください。
- 現在、VBを勉強中の初心者です。マクロの自動記録を使って、シート1の5〜6行目をシート2のA3にコピーすることはできました。しかし、任意の複数行をコピーする方法がわかりません。
- 例えば、シート1にA1に200306、A2に200307、A3に200307、A4に200307、A5に200308、A6に200309、A7に200309のデータがある場合、200307のデータをコピーしたい場合は、シート2のA3にA2〜A4をコピーしたいです。どのようにすればよいでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>Rows("1:" & Abc).Select Rows(Gyou & ":" & Abc).Select ではいかがでしょうか。
その他の回答 (2)
補足です。。。 ※は行った動作です。 Cells.Select ※シート全体を選択 Selection.AutoFilter ※メニューから[データ]-[フィルタ]-[オートフィルタ] Selection.AutoFilter Field:=1, Criteria1:="200" ※A列を[200]でフィルタリング Range("A1").Select ※A1セルを選択 Range(Selection, Selection.End(xlDown)).Select ※A1セルで[Shift]+[Ctrl]+[↓]を押下 Range(Selection, Selection.End(xlToRight)).Select ※A1セルで[Shift]+[Ctrl]+[→]を押下 Selection.SpecialCells(xlCellTypeVisible).Select ※[Alt]+[;]を押下 (可視セルのみ選択) Selection.Copy ※コピー Sheets("Sheet2").Select ※Sheet2を選択 Range("A1").Select ※Sheet2のA1セルを選択 ActiveSheet.Paste ※ペースト Sheets("Sheet1").Select ※Sheet1を選択 Application.CutCopyMode = False ※コピー解除 Selection.AutoFilter ※メニューから[データ]-[フィルタ]-[オートフィルタ] Range("A1").Select ※A1を選択
Sheet1にこんなデータがあったとします。 A列が200のものだけをSheet2にコピーしたいとします。 ※1行目にはタイトルが入っていること ※データ(B列)はすべて埋まっていること | A | B | C | --+-----+-----+-----+- 1| Key | Data| | 2| 100 | 10 | | 3| 200 | 20 | | 4| 200 | 5 | | 5| 300 | 25 | | 6| 300 | 10 | | 7| | | | ***** Cells.Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="200" Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Application.CutCopyMode = False Selection.AutoFilter Range("A1").Select 3行目の200の値を変えてあげれば 任意のものがコピーできます。 何をやっているかといいますと オートフィルタをかけて対象のものだけをコピーする という動作を記録しただけです。 ※普通はループでまわして検索文字と一致するものを コピーすることでしょう。 ※今回はあえてわかりやすい即席なやり方でした。 ループや変数を使用できるのであれば そちらのやり方を回答しますがいかがでしょうか。 参考になったでしょうか。。。ふあん。
補足
Neninp: Nendo = InputBox( _ Title:="年月入力", _ Prompt:="年月(例:200306)を入力して下さい。") Nentuki = Nendo * 1 Sheets("ドキュメント1").Select Gyou = 1 Check: If Gyou = 65500 Then GoTo Endlabel End If If Range("A" & Gyou) <> Nentuki Then Gyou = Gyou + 1 GoTo Check End If Sheets("1").Select Cells.Select Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("D1") _ , Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal Gyou = 1 Search: If Range("A" & Gyou) <> Nentuki Then Gyou = Gyou + 1 GoTo Search End If Dim Myrule, Abc, Bcd Abc = Gyou Bcd = Abc + 1 Myrule: If Range("A" & Abc) = Range("A" & Bcd) Then Abc = Abc + 1 Bcd = Bcd + 1 GoTo Myrule Else Rows("1:" & Abc).Select ←←←← End If Selection.Copy Sheets.Add.Name = 123 ActiveSheet.Paste Application.CutCopyMode = False Sheets("123").Move after:=Sheets("1") Tuki = Nentuki Mod 100 & "月" Sheets("123").Name = Tuki Endlabel: Range("A1").Select End Sub 上記のマクロのなかの Rows("1:" & Abc).Select "1:" を Gyou にしたいのですが実行するとエラーになります。よろしくお願いします。
お礼
回答通りに実行しましたらOKでした。 たいへん有難うございました。