Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : Excel 2019)
連続しない列のコピー
投稿日時: 26/03/31 15:09:53
投稿者: まな55

よろしくお願いいたします。
 
㋐のシートからフィルターで抽出したデータを、見出しを除いた列ごと㋑のシートへコピーしたいです。
下記では5列にしていますが、実際には15列のコピーです。
  ㋐ A列 E列 G列 H列 I列
         ↓
  ㋑ A列 J列 C列 D列 E列
このように貼り付け先の場所が非連続で、貼り付ける順番も変えたいのですが、どのようにすればよいかわかりません。
どなたか教えていただけますでしょうか。
 
Sub 列コピー()
 
Dim srcRange As Range
Dim colList As Variant
Dim i As Long
     
    Set srcRange = Sheets("㋐").Range(Range("A1"), Cells(Rows.Count, "A").End(xlUp))
     
 If Sheets("㋐").FilterMode = True Then
    Sheets("㋐").ShowAllData
  
End If
 
Sheets("㋐").Range(Range("A1"), Cells(Rows.Count, "A").End(xlUp)).AutoFilter 1, Array("いちご", "みかん"), xlFilterValues
 
If WorksheetFunction.Subtotal(3, Range("A:A")) > 1 Then
 With Worksheets("㋐").Range("A2").CurrentRegion
 colList = Array(5, 7, 8, 9, 1)
  
 End With
 End If
  
    For i = 0 To UBound(colList)
        srcRange.Columns(colList(i)).Copy _
            Destination:=Sheets("㋑").Range("A2").Offset(0, i)
    Next i
         
End Sub

回答
投稿日時: 26/03/31 16:33:26
投稿者: 半平太

>下記では5列にしていますが、実際には15列のコピーです。
 
との事ですが、実際の最終列は何処まであるんですか?
 
Z列以内ですか(つまり、1桁アルファベット列に収まるんですか?)

投稿日時: 26/03/31 17:05:29
投稿者: まな55

ご返信ありがとうございます。
 
最終列は AN列 アルファベット2桁になります。
 
よろしくお願いいたします。

回答
投稿日時: 26/03/31 17:23:09
投稿者: 半平太

2桁ありですか・・とほほ
 

Sub 列コピー()
    Dim wsFm As Worksheet
    Dim wsTo As Worksheet
    Dim srcRange As Range
    Dim colListFm As Variant
    Dim colListTo As Variant
    Dim i As Long
    
    Set wsFm = Sheets("㋐")
    Set wsTo = Sheets("㋑")
    Set srcRange = wsFm.Range("A1", wsFm.Cells(Rows.Count, "A").End(xlUp))
    
    If wsFm.FilterMode = True Then
        wsFm.ShowAllData
    End If
    
    srcRange.AutoFilter 1, Array("いちご", "みかん"), xlFilterValues
    
    If WorksheetFunction.Subtotal(3, wsFm.Range("A:A")) > 1 Then
        colListFm = Split("A,E,G,H,I,AN", ",")
        colListTo = Split("A,J,C,D,E,AT", ",")

        For i = 0 To UBound(colListFm)
            srcRange.Offset(1).Columns(colListFm(i)).Copy _
                Destination:=wsTo.Cells(2, colListTo(i))
        Next i
    End If
End Sub

回答
投稿日時: 26/04/01 12:44:27
投稿者: simple

もう解決済みかと思いますが、一言だけ。
 
つかぬことを伺いますが、
貼り付け先の
>  ㋑ A列 J列 C列 D列 E列
ですが、そのシートのその列たち以外の列は、すでにデータが入っているのでしょうか。
もし入っていない(今後、データや式を入力する)のであれば、
フィルタオプションを使う手があります。(マクロは一行で済みます。)
入っているなら、それを消してしまうのでNGですけど。
 
# ところで、Sheets("㋐")ってVBEに書くと、文字化けしませんでしたか?

投稿日時: 26/04/02 10:16:25
投稿者: まな55

半平太さま
 
ご教示いただきましてありがとうございました!
希望通りとなり大変助かりました!
感謝いたします。
 
 
simpleさま
 
ご意見ありがとうございました!
参考になりました。