1

マクロの数式でvlookupを使用しています。ただし、90k行を超えるシートに適用すると時間がかかりすぎます。

代わりに、findまたはInstrメソッドを使用して時間を短縮するのが好きです。しかし、「find:method」を使用するとエラーが発生します。「Instr」の使用方法はわかりません。

Sub testt()

Dim l As Long

l = Sheets(1).Range("A1:A" & Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Row).Count
    With Sheets("Sheet1")
        .Range("d1").Formula = "=IF(iferror(vlookup(c1,$D:$D,1,false),"""")="""","""",1)"
        .Range("d1").AutoFill Destination:=Range("d1:d" & l), Type:=xlFillDefault
    End With
End Sub

これがvlookupを使った私の公式です。しかし、vlookupをfindに置き換える必要があります

l = Sheets(1).Range("A1:A" & Sheets(1).Cells(Sheets(1).Rows.Count, "A").End(xlUp).Row).Count
    With Sheets("Sheet1")
        .Range("d1").Formula = "=IF(iferror(range("A1:A" & l).find(c1),"""")="""","""",1)"
        .Range("d1").AutoFill Destination:=Range("d1:d" & l), Type:=xlFillDefault
    End With
4

1 に答える 1

0

私が知っているExcelにはFIND関数はありません。ただし、ルックアップ列で関連する各セルを検索するVBA関数を作成することはできます。関連するコードは次のとおりです。

Function IfFound(SearchText As String) As String

Dim FoundCell As Range

'look in particular column for a value
Set FoundCell = Columns("A:A").Find(What:=SearchText, lookat:=xlWhole)

'if found, return value in cell to its right
If FoundCell Is Nothing Then
    IfFound = ""
Else
    IfFound = FoundCell.Offset(0, 1).Value
End If

終了機能

これを呼び出す方法は次のとおりです。

Sub TestFunction()

'make sure word TEST is in column A somewhere
MsgBox IfFound("test")

サブ終了

これが探しているものかどうかはわかりませんが、VLOOKUPよりもはるかに高速に実行されます。唯一の問題は、ワークシートで何かが変更されたときに自動的に実行する方法を見つける必要があるということです。

于 2013-01-03T17:33:53.840 に答える