With Sh1.Range("A1")
.Range("A:A, C:C, K:K, O:P, S:S, U:U, AA:AC").Copy
こうRangeプロパティで列を指定すると、「シート上の列全体」を指定いることになります。
Columnsプロパティですると、元のセル範囲の列になるんですが、飛び飛びで指定できません。
なので、
1)列毎にコピペを繰り返す
2)コピーした後不要な列を削除する
というようなことをしても結果は同じなので、そのように書くことも可能です。
ですが、どうしてもセル範囲を限定したいということであれば、
Intersect関数という関数で、セル範囲の積集合を求めることが可能ですので、
それを使うことで可能になります。
ExcelVBA
1Sub test()
2 Dim rngFrom As Range
3 Dim rngTo As Range
4 Dim sKey As String
5
6 Set rngFrom = Worksheets("Sheet1").Range("A1").CurrentRegion
7 With Worksheets("Sheet2")
8 .UsedRange.ClearContents
9 Set rngTo = .Range("A1")
10 End With
11 sKey = "2"
12
13 With rngFrom
14 .AutoFilter field:=1, Criteria1:=sKey
15 .Range("A:A, C:C, K:K, O:P, S:S, U:U, AA:AC").Select
16 Intersect(.Cells, .Offset(1), .Range("A:A, C:C, K:K, O:P, S:S, U:U, AA:AC")).Select
17 Intersect(.Cells, .Offset(1), .Range("A:A, C:C, K:K, O:P, S:S, U:U, AA:AC")).Copy rngTo
18 End With
19End Sub
※Selectすることは無意味です。
ステップインで1行ずつ実行して、
どのようなセル範囲が特定できているかを視覚化し確認するためにSelectしています。
動作が重くなったり、画面がチラチラすることを防ぐため、
動作確認後、運用時にはその行を削除してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/22 01:24
2020/05/22 03:28
2020/05/22 04:11
2020/05/22 04:36
2020/05/23 14:41