Cara menghitung dalam rentang dengan fungsi .Find() di VBA

Saya memiliki Lembar Kerja Excel berikut

masukkan deskripsi gambar di sini

Dengan fungsi .Find() berikut saya menemukan nilai yang saya butuhkan dan selnya.

Dim finalResult as Range
Dim finalValue as String
Dim headValue as string

finalValue = "Banana"
headValue = "Food"

Set finalResult = Worksheets("mySheet").Range("A1:A20").Find(finalValue, LookIn:=xlValues, After:=headValue)

Pertanyaan saya adalah: Mengetahui rentang Awal = Makanan dan Akhir = Pisang, bagaimana cara menghitung berapa banyak sel di antaranya?

Terima kasih


person ChangeWorld    schedule 17.02.2020    source sumber
comment
'finalResult.Row (untuk Pisang) - finalResult.Row (untuk Makanan)... It is good to declare two specific variables: finalFood` dan finalBanana, misalnya. Atau gunakan CountA untuk rentang kedua rentang sel yang diperoleh.   -  person FaneDuru    schedule 17.02.2020
comment
Jenis deklarasi apa yang harus saya lakukan? Dim finalCount as Integer ` finalCount = finalResult.Row - finalValue` ?   -  person ChangeWorld    schedule 17.02.2020
comment
Seseorang juga bisa menggunakan Application.Match   -  person JvdV    schedule 17.02.2020


Jawaban (2)


Tolong gunakan kode ini. Ada lebih banyak metode untuk menemukan sel Anda, tetapi saya akan menggunakan metode yang Anda sukai:

Sub testFindRange()
 Dim finalResFood As Range, finalResBanana As Range
 Dim finalValue As String, headValue As String, sh As Worksheet
 Set sh = Worksheets("mySheet")' Having more workbooks open, it would be good to define it using the workbook where it belongs, too.

 finalValue = "Banana"
 headValue = "Food"

 Set finalResBanana = sh.Range("A1:A20").Find(finalValue, LookIn:=xlValues)
 Set finalResFood = sh.Range("A1:A20").Find(headValue, LookIn:=xlValues)
 Debug.Print finalResBanana.row - finalResFood.row
End Sub
person FaneDuru    schedule 17.02.2020
comment
Saya setuju bahwa Range.Find akan menjadi metode + yang lebih umum dan disukai. Namun, dua komentar: parameter xlWhole tampaknya diperlukan dan tes untuk Is Not Nothing - person JvdV; 17.02.2020

Banyak pilihan sebenarnya:

Sub Test()

Dim rng As Range: Set rng = Worksheets("mySheet").Range("A:A")
Dim rng1 As Range, rng2 As Range

'-------------------------------------
'Option 1: Range.Object
Set rng1 = rng.Find("Food", Lookat:=xlWhole)
Set rng2 = rng.Find("Banana", Lookat:=xlWhole)

If Not rng1 Is Nothing And Not rng2 Is Nothing Then
    Debug.Print rng2.Row - rng1.Row
End If

'-------------------------------------
'Option 2: Application.Match
With Application
    rw1 = .Match("Food", rng, 0)
    rw2 = .Match("Banana", rng, 0)
    If IsError(rw1) = False And IsError(rw2) = False Then
        Debug.Print rw2 - rw1
    End If
End With

'-------------------------------------
'Option 3: xlDown
Set rng1 = rng.Find("Food", Lookat:=xlWhole)
If Not rng1 Is Nothing Then
    Debug.Print rng1(rng1.Rows.Count, 1).End(xlDown).Row - rng1.Row
End If

End Sub
person JvdV    schedule 17.02.2020
comment
Jika Anda yakin dengan garis putih di bawah Pisang, keuntungan dari opsi 3 adalah Anda tidak memerlukan nilai terakhir di bawah kategori Makanan @ChangeWorld. - person JvdV; 17.02.2020
comment
Ya saya yakin dengan garis putih di bawah Pisang, saya mencoba opsi 3 yang tampaknya sangat ringan juga- - person ChangeWorld; 17.02.2020
comment
Bermanfaat bagi semua orang untuk mengetahui bahwa ada lebih banyak jalan menuju Roma ..+) - person T.M.; 18.02.2020