1

ここにこれらの質問がたくさんあることは知っていますが、何が問題なのかわかりません。

値が別のワークブックの列にあるかどうかを確認する次のコードがあります。

Dim masterWbk As Workbook
Dim oWbk As Workbook
Dim RowCount As Integer
Dim LookupRange As Range
Dim Exists As Variant
Dim a As Integer
Dim i As Integer
Dim jobnumber As String

    RowCount = WorksheetFunction.CountA(Sheets("Sheet1").Range("A1").EntireColumn)

    masterWbk.Activate

Set LookupRange = masterWbk.Sheets("Sheet1").Range("C1:C100")

    a = 0

    For i = 0 To RowCount - 1

        jobnumber = oWbk.Sheets("Sheet1").Range("A2").Offset(i, 0).Value

      '  On Error GoTo ExistsError:

        Exists = Application.WorksheetFunction.VLookup(jobnumber, LookupRange, 1, False)

これで、値は間違いなくルックアップ範囲内にあり、同じようにフォーマットされますが、Vlookup は機能しません。エクセルの数式として問題なく動作します。

私は何を逃したのですか?

4

3 に答える 3

3

find を使用すると、次のようになります-

Dim masterWbk As Workbook
Dim oWbk As Workbook
Dim RowCount As Integer
Dim LookupRange As Range
Dim Exists As Variant
Dim a As Integer
Dim i As Integer
Dim jobnumber As String

    RowCount = WorksheetFunction.CountA(Sheets("Sheet1").Range("A1").EntireColumn)

    masterWbk.Activate

Set LookupRange = masterWbk.Sheets("Sheet1").Range("C1:C100")

  a = 0

  For i = 0 To RowCount - 1

  jobnumber = oWbk.Sheets("Sheet1").Range("A2").Offset(i, 0).Value
  If Trim(jobnumer) <> "" Then
    With lookuprange
        Set Rng = .Find(What:=jobnumber, _
                        After:=.Cells(.Cells.Count), _
                        LookIn:=xlValues, _
                        LookAt:=xlWhole, _
                        SearchOrder:=xlByRows, _
                        SearchDirection:=xlNext, _
                        MatchCase:=False)
        If Not Rng Is Nothing Then
            Exists = 1
        Else
            Exist = 0
        End If
    End With
  End If
于 2013-03-22T16:10:06.003 に答える
0

のドキュメントに問題があると思いますWorksheetFunction.Vlookup。Excel 2007でのテストでは、検索文字列が見つかった場合、対応するセルの値が返されます。完全一致を検索すると、恐ろしいエラー1004が発生します。

Vlookupを使用する場合は、

...

Dim FoundText as String

...

FoundText=""

On Error Resume Next

FoundText=Application.WorksheetFunction.VLookup(jobnumber, LookupRange, 1, False)

On Error Goto 0

Exists= (FoundText <> "")

...
于 2013-03-22T16:18:43.073 に答える
0

これはExcel 2010でうまくいくようです...

VLOOKUP でエラーが発生する可能性が高いことをお勧めします。これはjobNumber、ワークシート/セルの「書式設定」にもかかわらず、ワークシートのジョブ番号が数値として格納される可能性が高いため、文字列としてディメンション化したためです。

したがって、問題は "123" <> 123 です。jobNumber が数値かどうかをテストし、関数に正しい種類のデータを渡していることを確認します。

If IsNumeric(jobNumber) Then
    Exists = Application.WorksheetFunction.VLookup(CLng(jobNumber), lookupRange, 1, False)
Else:
    Exists = Application.WorksheetFunction.VLookup(jobNumber, lookupRange, 1, False)
End If
于 2013-03-22T16:42:18.087 に答える