@Lexs194 ...
Modifikasi script sebelumnya menjadi:
...
On Error Resume Next
If UBound(xArray) > -1 Then
.Cells(lRow, 1) = lRowIndex
.Cells(lRow, 3) = xArray(16)
.Cells(lRow, 4) = xArray(7)
.Cells(lRow, 5) = xArray(4)
.Cells(lRow, 6) = TimeShift
.Cells(lRow, 7) = Fix(TimeShift - CDate(xArray(4)))
.Cells(lRow, 8) = Abs((TimeShift - CDate(xArray(4))) - Fix(TimeShift - CDate(xArray(4))))
Set xArray = Nothing
lRowIndex = lRowIndex + 1
lRow = lRow + 1
End If
Err.Clear
On Error GoTo 0
...
... untuk rumus vlookup jadi macronya gmn ...
Excel VBA punya objek WorksheetFunction. Dan salah satu membernya adalah fungsi VLookup. Sintaksnya:
WorksheetFunction.VLookup(Arg1, Arg2, Arg3, [Arg4])
Argumen Arg1
merupakan nilai yang akan dicari, argumen Arg2
merupakan tabel pencarian, argumen Arg3
merupakan kolom pengambilan nilai, dan argumen Arg3
merupakan ketentuan pencarian secara eksak atau bukan. Lalu bagaimana implementasi formula:
=VLOOKUP(MID('log'!I2,15,6)+0,'BSC_RNC'!B:C,2,0)
ke dalam script VBA? Pertama, untuk argumen Lookup Value
pada formula di atas sebaiknya dipisahkan ke dalam proses berbeda (khusus), dikarenakan nilainya diambil dari Worksheet berbeda. Kedua, untuk argumen Table Array
sebaiknya menggunakan area terbatas (area yang ditentukan melalui notasi 'BSC_RNC'!B:C
pada formula di atas terlalu luas, padahal tidak seluruh baris berisi data).
Sebagai contoh, asumsikan data dari file CSV diimpor ke salah satu Worksheet (misalkan sheet LOG, CodeName = Sheet1), dan tabel pencarian ada pada sheet BSC_RNC (CodeName = Sheet2) dan hasil akan disusun pada sheet HASIL (CodeName = Sheet3). Maka dapat dibuatkan sebuah prosedur untuk menguji script yang diinginkan seperti berikut:
Sub Test()
Dim xValue As Variant
Dim sAddress As String
Dim xlRange As Range
Dim lIdx As Long
sAddress = "B2:C" & Sheet2.Columns(3).Rows(Sheet2.Rows.Count).End(xlUp).Row
Set xlRange = Sheet2.Range(sAddress)
For lIdx = 2 To 10
xValue = Mid$(Sheet1.Range("I" & lIdx), 15, 6) + 0
Sheet3.Cells(lIdx - 1, 1) = WorksheetFunction.VLookup(xValue, xlRange, 2, 0)
Next
End Sub
Selain menggunakan fungsi WorksheetFunction.VLookup
, juga bisa menggunakan fungsi Application.VLookup
. Dengan fungsi WorksheetFunction.VLookup
, apabila terjadi kesalahan (misalkan nilai tidak ditemukan) dan tidak ada script untuk menangkap kesalahan, maka VBA akan menampilkan pesan kesalahan seperti berikut:
sedangkan jika menggunakan fungsi Application.VLookup
, hasilnya dapat berupa kesalahan #N/A. Demikian yang dapat saya jelaskan.