Sejauh yang saya mengerti, Anda menggunakan operator persimpangan (spasi) dalam rumus INDEX Anda: "$ C2531: $ C2731 & lt; 1". Ini akan membandingkan setiap sel antara dalam satu rentang ($ C2531 $ C2731) dengan rentang lain, tetapi dalam hal ini perbandingan "& lt; 1". Jadi titik-temu akan mengembalikan rentang yang berisi nilai TRUE atau FALSE untuk setiap perbandingan (mis. Rumus array). MATCH kemudian akan melihat rentang yang dihasilkan untuk nilai "TRUE".
Dengan kata lain, rumus ini relatif rumit di belakang layar, dan meskipun singkat untuk dibaca, di VBA Anda ingin menjaga hal-hal sesederhana dan sejelas mungkin dari perspektif "di belakang layar" - atau Anda akan mengalami masalah . Apa yang ingin Anda capai adalah sederhana, namun menjejalkan fungsi INDEX dan MATCH ke dalam VBA tidak.
Dalam Visual Basic, tidak ada operator persimpangan asli. Dari apa yang saya dapat temukan, satu-satunya yang setara dengan adalah fungsi Application.Intersect, yang mengambil objek Range sebagai parameter. Sayangnya, meskipun Anda dapat membuat rentang pertama sebagai "Setel myRange = Rentang (" $ C2531: $ C2731 "), saya belum dapat membuat objek Rentang" & lt; 1 "di VBA, karena ini bukan valid rentang sel. Jadi sepertinya Operator titik-temu dalam Rumus Excel lebih mampu / fleksibel daripada metode Application.Intersect di VBA. Dan itulah titik kegagalan di sini ("$ C2531: $ C2731 & lt; 1" tidak VBA valid)
Sekarang Anda dapat menghabiskan satu hari mencoba melihat apakah Anda dapat memotong rentang dan "& lt; 1" di VBA, tetapi ada cara yang lebih sederhana untuk melakukan ini di VBA. Jika itu saya, saya tidak akan menggunakan fungsi Lembar Kerja, dan hanya menggunakan standar Untuk ... Loop berikutnya untuk membahas baris Anda dan melakukan perbandingan dalam dasar visual sederhana untuk setiap sel dalam Rentang Anda. Jika satu perbandingan cocok, kembalikan nomor baris.
Untuk mendapatkan ide, akan terlihat seperti:
Dim myRange As Range
Set myRange = Range("$C2531:$C2731")
For y = 1 to myRange.Cells.Rows.Count
If y < 0 Then
result = myRange.Cells(y,1).Row
End
Next y