理系母の趣味はプログラミング

理系院卒、メーカー技術職の二児の母が、PythonやVBAで色々と作ってアップしていくブログです。

【VBA】検索して、コピペする作業を効率化するマクロを作ってみた。

仕事で、大量のデータから必要なカラムだけ取り出すという単純作業をすることがあります。
このカラムが数列だったらいいのですが、
何十列もあったりするとかなり面倒ですし、ミスも起きかねません。
そこで、マクロをつくりました。

Option Explicit
Option Base 1
Sub Search_Copy_Paste()

Dim KeyRange, SearchRange As Range
Dim ResultArray() As Variant                          '検索結果を格納する配列
Dim KeyArray() As Variant                              '元データを格納する配列
Dim SearchArray() As Variant                         '検索先のデータを格納する配列
Dim keyColnum, SearchRownum As Long     '行数と列数
Dim i, j, k As Long                                           'ループ変数

    
    On Error Resume Next
    Set KeyRange = Application.InputBox(prompt:="検索するカラム名を選択してください", Title:="セルの指定", Type:=8)
    If KeyRange Is Nothing Then Exit Sub
    KeyArray = KeyRange.Value
    
    Set SearchRange = Application.InputBox(prompt:="検索対象の範囲を選択してください", Title:="セルの指定", Type:=8)
    If SearchRange Is Nothing Then Exit Sub
    SearchArray = SearchRange.Value
    
    keyColnum = UBound(KeyArray, 2)
    SearchRownum = UBound(SearchArray, 1)
    
    ReDim ResultArray(SearchRownum, keyColnum)
    
    For i = 1 To keyColnum
        
        ResultArray(1, i) = KeyArray(1, i)
        
        For j = 1 To UBound(SearchArray, 2)
            If ResultArray(1, i) = SearchArray(1, j) Then
                For k = 2 To SearchRownum
                    ResultArray(k, i) = SearchArray(k, j)
                Next k
                Exit For
            End If
        Next j
        
    Next i
    
    With KeyRange.Worksheet
    
    Worksheets.Add
    Range(Cells(1, 1), Cells(SearchRownum, keyColnum)).Value = ResultArray
    MsgBox (ActiveSheet.Name & "に転記しました")
    
    End With
    
End Sub