VLookupを使用せずに、VBAを使用して列内の特定の参照を検索し、その行の別の列からデータを引き出すという別の方法があります。VBAのVlookupの代わりに?
私がデータを取得しようとしているテーブルには、数字、テキスト、日付が混在しており、ルックアップ値は13桁を超えることがよくあります。
私はある種のVLookupで作業していましたが、矛盾しすぎていました。データタイプが一致しなかったために頻繁に壊れてしまいました。 「タイプミスマッチ」や「ByRef」というエラーがひどくあります。私は1つ右に、次に別のブレークになります。
残念ながら、私は正しい方向に私を得るために何を検索するのか十分に知りません。
Sub getData()
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlManual
Dim wb As Workbook, src As Workbook
Dim srcRange As Range
Dim InputString
Dim strStatus
Dim strStatusNum
Dim strD1
Dim I As Integer
Set wb = ActiveWorkbook
I = 7
Set src = Workbooks.Open("D:\Files\test2.xlsx", True, True)
With src.Sheets(1)
Set srcRange = .Range(.Range("A1"), .Range("H1").End(xlDown))
End With
Do While wb.ActiveSheet.Cells(I, 1) <> ""
'Makes sure src.Close is called if errors
'On Error Resume Next
InputString = wb.Worksheets("Sheet 1").Cells(I, 1)
strStatus = Application.VLookup(InputString, srcRange, 3, False)
strD1 = Application.VLookup(InputString, srcRange, 4, False)
'Convert strStatus to actual number e.g. "03. no d1"
strStatusNum = Left(strStatus, 2)
wb.Worksheets("Sheet 1").Cells(I, 4) = strStatusNum
If (strStatusNum <> 3) Then
wb.Worksheets("Sheet 1").Cells(I, 2) = "Not at 03. No Work Order"
ElseIf (strStatusNum = 3) And (strD1 <> "") Then
wb.Worksheets("Sheet 1").Cells(I, 2) = "D1 Received"
wb.Worksheets("Sheet 1").Cells(I, 3) = strD1
Else
wb.Worksheets("Sheet 1").Cells(I, 2) = "No D1"
End If
I = I + 1
Loop
src.Close (False)
Application.EnableEvents = True
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
End Sub
EDIT:いくつかの構文を修正し、それは私がやろうとしているかを説明できます場合は
は、ここではそのエラーのすべての時間を使用してVLOOKUP私のコードです。
のこのリファクタリング後かもしれ'あなたが使用してそれらをテストする必要がありstrD1' 'ISERROR() ' - ルックアップが失敗したかどうかを知らせます(エラー値を返します)。エラーがなければ残りのロジックを続けます。また、あなたのコードに 'strD142'がありますが、変数が宣言されていません。すべてのモジュールの先頭に 'Option Explicit'がなければ、それはあなたのto-doリストの先頭にあるはずです。 –
私はコードを実行していましたが、それは常にエラー2042でした。結局のところ、私は何をしようとしていたのVLookupを使用することは実際には実現可能ではないと感じました。データ型が多すぎます。たとえVariantを使用しても一貫して動作していないようです。 strD142は、上記のコードを一般化しようとしたときに追加したエラーで、一部の業界コードを参照しています。あなたはその理由のために悪い表記を口実にしなければなりません! –