VBAを使ってセルのデータを転記しています。
シート1~3のZ列に"対象"と書かれた列のみを、シート4に転記します。
全シート共通で1~6行目はタイトル行で、データは7行目以降に記入されています。
A列には必ずデータが入っていますが、B~U列には空白のセルもあります。
転記先のシート4はデータのない最終行から書き込みを始めます。
転記元と先でフォーマットが同じであればFor Nextでいけそうなのですが、
下記の通り列がずれているため思い通りにできません。
コピーしたい列:シート1、シート2、シート3(どれも共通)
A~B列、F~U列
貼り付けたい列:シート4
A~D列、F~S列
それぞれこんな風になります。
A → A
B → B
F → C
G → D
H → F
I → G
~省略~
U → S
どうすればうまく転記できるでしょうか。
No.1
- 回答日時:
念の為確認します。
・シート4にもタイトル行は存在するのですね
・データは並べ替えたりしてはダメですよね
・データは何行ほどあるのでしょうか?
・シート4のE列は何もしないで残すわけですよね
・シート4にもタイトル行は存在するのですね
→はい
・データは並べ替えたりしてはダメですよね
→シート毎にそのままの状態が良いです
・データは何行ほどあるのでしょうか?
→シート1~3は500行、シート4は1500行ほどあります。
・シート4のE列は何もしないで残すわけですよね
→はい、空白のままです
宜しくお願いします。
No.2
- 回答日時:
こんばんは!
Sub Sample1()
Dim k As Long, lastRow As Long
Dim myRow As Long, wS As Worksheet
Set wS = Worksheets(4)
For k = 1 To 3
With Worksheets(k)
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Rows(6).AutoFilter field:=Range("Z1").Column, Criteria1:="対象"
If .Cells(Rows.Count, "A").End(xlUp).Row > 6 Then
myRow = wS.Cells(Rows.Count, "A").End(xlUp).Row + 1
Range(.Cells(7, "A"), .Cells(lastRow, "B")).Copy wS.Cells(myRow, "A")
Range(.Cells(7, "F"), .Cells(lastRow, "G")).Copy wS.Cells(myRow, "C")
Range(.Cells(7, "H"), .Cells(lastRow, "U")).Copy wS.Cells(myRow, "F")
End If
.AutoFilterMode = False
End With
Next k
MsgBox "完了"
End Sub
※ 細かい検証はしていませんので
列が違っていたらごめんなさい。m(_ _)m
No.3
- 回答日時:
No.2です。
前回はちょっと手抜きをしていました。
Sub Sample2()
Dim k As Long, lastRow As Long
Dim myRow As Long, wS As Worksheet
Set wS = Worksheets(4)
For k = 1 To 3
With Worksheets(k)
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Rows(6).AutoFilter field:=Range("Z1").Column, Criteria1:="対象"
If .Cells(Rows.Count, "A").End(xlUp).Row > 6 Then
myRow = wS.Cells(Rows.Count, "A").End(xlUp).Row + 1
Range(.Cells(7, "A"), .Cells(lastRow, "B")).SpecialCells(xlCellTypeVisible).Copy _
wS.Cells(myRow, "A")
Range(.Cells(7, "F"), .Cells(lastRow, "G")).SpecialCells(xlCellTypeVisible).Copy _
wS.Cells(myRow, "C")
Range(.Cells(7, "H"), .Cells(lastRow, "U")).SpecialCells(xlCellTypeVisible).Copy _
wS.Cells(myRow, "F")
End If
.AutoFilterMode = False
End With
Next k
MsgBox "完了"
End Sub
とした方が良いと思います。m(_ _)m
ありがとうございます!
コピー元の列がこうなったらコピー先の列を+1してetcとかやらないほうがいいんですね。
もう1点。
コピーするときに値貼り付けしたいのですが、
wS.Cells(myRow, "A").PasteSpecial Paste:=xlPasteValues
と記述したら構文エラーになってしまいました。
.PasteSpecial Paste:=xlPasteValues
は使えないのでしょうか。
No.4
- 回答日時:
それでは、こんなものはいかがでしょうか?
--------------------------------------------------------------------------------
Sub データコピー()
Dim シート番号 As Long
Dim 次行 As Long
Application.ScreenUpdating = False
For シート番号 = 1 To 3
Sheets(シート番号).Select
次行 = Sheets(4).Cells(Rows.Count, 1).End(xlUp).Row + 1
If 次行 < 7 Then 次行 = 7
Cells.AutoFilter Field:=26, Criteria1:="対象"
Range("A7:B" & Rows.Count & ",F7:G" & Rows.Count).Copy
Sheets(4).Range("A" & 次行).PasteSpecial Paste:=xlPasteValues
Range("H7:U" & Rows.Count).Copy
Sheets(4).Range("F" & 次行).PasteSpecial Paste:=xlPasteValues
Cells.AutoFilter
Next
Application.ScreenUpdating = True
Sheets(4).Select
Range("A7").Select
End Sub
--------------------------------------------------------------------------------
RangeクラスのPasteSpecialメソッドが失敗しました
とエラーになってしました。
また、コピーしたい列が増えた件については、
Range("A7:B" & Rows.Count & ",F7:G" & Rows.Count).Copy
を
Range("A7:C" & Rows.Count & ",F7:G" & Rows.Count).Copy
にすればよいですか?
No.5
- 回答日時:
No.4 のお礼について
その通りです。と言いたいのですが、今度はF列を空けるのですよね、それでしたら「Sheets(4).Range("F" & 次行).PasteSpecial Paste:=xlPasteValues」も「Sheets(4).Range("G" & 次行).PasteSpecial Paste:=xlPasteValues」にしないとダメです。
No.7
- 回答日時:
No.2です。
>コピーするときに値貼り付けしたいのですが
前回投稿したコードの
>Range(.Cells(7, "A"), .Cells(lastRow, "B")).SpecialCells(xlCellTypeVisible).Copy _
wS.Cells(myRow, "A")
は
見た目は2行になっていますが実は1行のコードです。
VBE画面上で1行に表示してしまうと、画面をスクロールしなくてはならなくなるので
アンダーバー(_)を入れて表示しています。
上記の行を
Range(.Cells(7, "A"), .Cells(lastRow, "B")).SpecialCells(xlCellTypeVisible).Copy
wS.Cells(myRow, "A").PasteSpecial Paste:=xlPasteValues
のように2行にしてみてください。
※ 他の行(コピー&ペーストの行)もすべて同じです。m(_ _)m
ありがとうございます!値貼り付けできました。
3シート目の対象行H~U行がコピーの切り取り範囲になったまま
貼り付けシートのF~S列が選択されたままになっているのは、
手動で解除してあげる必要がありますか?
また、質問の補足欄に
<すみませんが、コピーしたい列が1列増えました。>
という追加のお願いがあり、こちらはどこを書き換えたら良いでしょうか?
No.9
- 回答日時:
No.8 追記
貼り付ける前に、貼り付け先に結合セルが有った場合、結合を解除するものを作ってみました。お試しください。
--------------------------------------------------------------------------------
Sub データコピー()
Dim シート番号 As Long
Dim 次行 As Long
Application.ScreenUpdating = False
For シート番号 = 1 To 3
Sheets(4).Select
次行 = Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A" & 次行 & ":E" & Rows.Count & ",G" & 次行 & ":T" & Rows.Count).MergeCells = False
Sheets(シート番号).Select
If 次行 < 7 Then 次行 = 7
Cells.AutoFilter Field:=26, Criteria1:="対象"
Range("A7:C" & Rows.Count & ",F7:G" & Rows.Count).Copy
Sheets(4).Range("A" & 次行).PasteSpecial Paste:=xlPasteValues
Range("H7:U" & Rows.Count).Copy
Sheets(4).Range("G" & 次行).PasteSpecial Paste:=xlPasteValues
Cells.AutoFilter
Next
Application.ScreenUpdating = True
Sheets(4).Select
Range("A7").Select
End Sub
--------------------------------------------------------------------------------
No.10
- 回答日時:
No.9 の修正です。
--------------------------------------------------------------------------------
Sub データコピー()
Dim シート番号 As Long
Dim 次行 As Long
Application.ScreenUpdating = False
For シート番号 = 1 To 3
Sheets(4).Select
次行 = Cells(Rows.Count, 1).End(xlUp).Row + 1
If 次行 < 7 Then 次行 = 7
Range("A" & 次行 & ":E" & Rows.Count & ",G" & 次行 & ":T" & Rows.Count).MergeCells = False
Sheets(シート番号).Select
Cells.AutoFilter Field:=26, Criteria1:="対象"
Range("A7:C" & Rows.Count & ",F7:G" & Rows.Count).Copy
Sheets(4).Range("A" & 次行).PasteSpecial Paste:=xlPasteValues
Range("H7:U" & Rows.Count).Copy
Sheets(4).Range("G" & 次行).PasteSpecial Paste:=xlPasteValues
Cells.AutoFilter
Next
Application.ScreenUpdating = True
Sheets(4).Select
Range("A7").Select
End Sub
--------------------------------------------------------------------------------
回答ありがとうございます。
しかし、実行時エラー1004 が出てしまいます。
デバックの黄色行も
Sheets(4).Range("A" & 次行).PasteSpecial Paste:=xlPasteValues
のままでした。
どうすれば良いでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字の色も参照 VLOOKUP
-
Excel の複数シートの列幅を同...
-
エクセルの保護で、列の表示や...
-
VBAで繰り返しコピーしながら下...
-
Excel VBA ピボットテーブルに...
-
SUMPRODUCTにて別シートのデー...
-
エクセルのブック分割マクロを...
-
エクセルの列の限界は255列以上...
-
ExcelのVlookup関数の制限について
-
Excelでの並べ替えを全シートま...
-
エクセルで、チェックボックス...
-
エクセル機能 オートフィルター
-
列幅を変えたエクセルのシート...
-
Excel 2段組み
-
別シートに成約をボタン1つで転...
-
エクセル マクロ 標準モジュー...
-
VBA 複数の列を高速で削除する...
-
エクセルVBAでエラーがでます。
-
Excelに自動で行の増減をしたい...
-
エクセルVBAで、ある文字を含ん...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelのVlookup関数の制限について
-
エクセルの保護で、列の表示や...
-
文字の色も参照 VLOOKUP
-
Excel の複数シートの列幅を同...
-
VBAで繰り返しコピーしながら下...
-
【条件付き書式】countifsで複...
-
エクセル マクロ 標準モジュー...
-
エクセルの列の限界は255列以上...
-
Excelでの並べ替えを全シートま...
-
エクセルで、チェックボックス...
-
エクセルマクロを教えてほしい...
-
SUMPRODUCTにて別シートのデー...
-
Excel VBA ピボットテーブルに...
-
エクセルのブック分割マクロを...
-
【VBA】複数のシートの指定した...
-
excel 複数のシートの同じ場所...
-
Excelに自動で行の増減をしたい...
-
スプレッドシートでindexとIMPO...
-
エクセルで横並びの複数データ...
-
エクセル複数シートのデータを...
おすすめ情報
すみませんが、コピーしたい列が1列増えました。
コピーしたい列:シート1、シート2、シート3(どれも共通)
A~C列、F~U列
貼り付けたい列:シート4
A~E列、G~T列
それぞれこんな風になります。
A → A
B → B
C → C
F → D
G → E
H → G
I → H
~省略~
U → T