| 
    
     |  | Excel2016を使用しています。VBA初心者です。 
 データというシートの製品名1.列のセルを選択すると、同じ行の納入先列の入力値を、名前シート(元データ)の納入先(H列)で検索し、ヒットした行の製品名(I列)を全てAM列に抽出する。AM列のリストを選択した製品名1.列のセルに入力規則に設定するコードです(抜粋してます)。
 このコードでも動いているのですが、ヒットする数が多いと非常に遅くなります。
 恐らくAM列に抽出する部分を配列方式にすると高速化できると思い、ネットで同じような内容を調べて色々やってみましたが、配列方式にする部分がうまくいきません。
 ご教示お願いいたします。
 
 
 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 
 
 Application.Calculation = xlCalculationAutomatic
 Application.EnableEvents = True
 Application.ScreenUpdating = True
 
 
 Dim myRange As Range
 Dim rngSearch, juhuku As Range
 Dim i As Long
 Dim strAdr As String
 Dim rngResult As String
 
 Dim clma, clmb, clmb2, rw As Long
 
 clme = Range("データ見出し").Find("代理店", lookat:=xlWhole).Column
 clma = Range("データ見出し").Find("納入先", lookat:=xlWhole).Column
 clmb = Range("データ見出し").Find("製品名1.", lookat:=xlWhole).Column
 clmb2 = Range("データ見出し").Find("製品名2.", lookat:=xlWhole).Column
 
 
 If Target.Column = clmb Then '製品名1.列のセルを選択したら
 
 rw = Target.Row
 
 Set myRange = Worksheets("名前").Range("H2:H500")  '名前シートのH列の検索範囲をセット
 
 Set rngSearch = myRange.Find(What:=Worksheets("データ").Cells(rw, clma), lookat:=xlPart, LookIn:=xlValues)   '同行の納入先をH列から検索
 
 If rngSearch Is Nothing Then
 
 Exit Sub
 End If
 
 If Not rngSearch Is Nothing Then
 i = 2
 
 'ヒットした値をAM列に格納
 Worksheets("名前").Range("AM2:AM1000").Clear
 Worksheets("名前").Cells(i, 39).Value = Worksheets("名前").Cells(rngSearch.Row, 9).Value
 
 'ヒットした値のセルを退避
 strAdr = rngSearch.Address
 
 Do
 
 Set rngSearch = myRange.FindNext(rngSearch)
 If rngSearch Is Nothing Then
 Exit Do
 Else
 If strAdr <> rngSearch.Address Then
 i = i + 1
 Worksheets("名前").Cells(i, 39).Value = Worksheets("名前").Cells(rngSearch.Row, 9).Value
 End If
 End If
 
 Loop While rngSearch.Address <> strAdr
 
 '名前付き範囲の範囲更新
 rngResult = "名前!" & "$AM$2:$AM$" & i
 
 ActiveWorkbook.Names.Add Name:="検索結果", RefersTo:="=" & rngResult
 
 End If
 
 Worksheets("データ").Cells(rw, clmb).Select
 Exit Sub
 
 End If
 
 
 Application.Calculation = xlCalculationAutomatic
 Application.EnableEvents = True
 Application.ScreenUpdating = True
 
 Application.Cursor = xlDefault
 
 End Sub
 
 |  |