Menghitung jarak (baris) antara dua nilai yang sama di atas meja

0

Saya memiliki Kode VBA untuk menghitung jarak antara dua sel dengan nilai yang sama di atas meja. Saya hanya perlu perbedaan baris antara sel-sel yang dapat pada kolom yang berbeda seperti yang terlihat pada gambar. Saya hanya perlu jarak pada sumbu "Y", bukan pada sumbu "X". Kode ini memiliki fungsi dan desain yang saya butuhkan tetapi juga menghitung jarak pada sumbu "X".

Pada contoh gambar di bawah ini, di kolom B, B5: Tengah cocok dengan yang terdekat (turun) B12: Tengah , dan jarak (jumlah baris di antara mereka) adalah 6. Dan dalam E1: 250 itu cocok dengan paling dekat G16: 250 , dan jaraknya 13.

enter image description here

Kode yang saya miliki adalah ini:

Option Explicit

Sub main()
    Dim cell As Range, f As Range
    Dim rowOffset As Long

    With Worksheets("gaps").Range("A2:F10") '<--| change this to your actual range of interest
        For Each cell In .SpecialCells(xlCellTypeConstants, xlNumbers)
            rowOffset = 1
            Set f = .Find(what:=cell, after:=cell, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlPrevious)
            If Not f Is Nothing And f.Row <= cell.Row Then rowOffset = cell.Row - f.Row + 1
            cell.offset(, .Columns.Count + 1) = rowOffset '<--| the "+1" offset results range one column away from values range: adjust it as per your needs
        Next cell
    End With
End Sub
user761065
sumber

Jawaban:

1

Hitung barisnya

Sub main4()
Dim cell As Range, f As Range
Dim RowOffset As String
With Worksheets("gaps").Range("A2:F10") '<--| change this to your actual range of interest
    For Each cell In .SpecialCells(xlCellTypeConstants, xlNumbers)
        RowOffset = "na"
        Set f = .Find(what:=cell, after:=cell, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext)
        If (f.Row <> cell.Row) Or (f.Row <> cell.Row) Then RowOffset = f.Row - cell.Row
        cell.Offset(, .Columns.Count + 1) = RowOffset '<--| the "+1" offset results range one Row away from values range: adjust it as per your needs
    Next cell
End With
End Sub

menghitung kolom

Sub main2()
Dim cell As Range, f As Range
Dim ColOffset As String
With Worksheets("gaps").Range("A2:F10") '<--| change this to your actual range of interest
    For Each cell In .SpecialCells(xlCellTypeConstants, xlNumbers)
        ColOffset = "na"
        Set f = .Find(what:=cell, after:=cell, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext)
        If (f.Column <> cell.Column) Or (f.Row <> cell.Row) Then ColOffset = f.Column - cell.Column
        cell.Offset(, .Columns.Count + 1) = ColOffset '<--| the "+1" offset results range one column away from values range: adjust it as per your needs
    Next cell
End With
End Sub

Atau bahkan lebih baik, Anda dapat menunjukkan baris dan kolom di sel:

Sub main3()
Dim cell As Range, f As Range
Dim Offset As String

With Worksheets("gaps").Range("A2:F10") '<--| change this to your actual range of interest
    For Each cell In .SpecialCells(xlCellTypeConstants, xlNumbers)
        Offset = "na"
        Set f = .Find(what:=cell, after:=cell, LookIn:=xlValues, lookat:=xlWhole, searchdirection:=xlNext)
        If (f.Column <> cell.Column) Or (f.Row <> cell.Row) Then Offset = (f.Column - cell.Column) & ";" & (f.Row - cell.Row)
        cell.Offset(, .Columns.Count + 1) = Offset '<--| the "+1" offset results range one column away from values range: adjust it as per your needs
    Next cell
End With
End Sub
Jonathan
sumber
Terima kasih atas saran Anda. Saya mencoba keduanya. Yang pertama adalah apa yang benar-benar saya butuhkan. tapi ini menghasilkan banyak NA, -1, -2, 1,0,2. Saya pikir itu cocok dengan digit tunggal dengan angka dua digit juga. Sebagai contoh, tampaknya cocok 2 dengan 12, atau 20 dll. Saya mencari pasangan yang tepat dan ketika kode menemukannya, ia membawa jumlah baris antara sel utama dan sel target.
user761065
jika Anda menggunakan main3 () Anda akan dapat menemukan sel apa yang cocok dengan sel apa. tolong berikan dua pertandingan yang tidak berfungsi. (Ini berfungsi dengan baik di sisi saya dan "na" tidak cocok ditemukan)
Jonathan
Saya menyiapkan buku kerja data sampel 1drv.ms/x/s!AoGkZUHlKui9gQ8NBaB1fllfYkXi Di sini Anda dapat melihat hasil yang saya dapatkan untuk main2, dan hasil yang diharapkan untuk dua baris pertama.
user761065
bagaimana Anda menghitung 10 pada O2
Jonathan
C2: 3 dan C13: 3, di antaranya 10 baris. Saya memperbarui gambar dalam pertanyaan, itu ditampilkan di sana.
user761065
0

Berikut adalah solusi yang saya temukan untuk masalah ini dalam mengatasi masalah yang saya miliki dalam kode yang ditawarkan.

Sub Intervals()
    Dim r As Range, c As Range
    With Cells(1).CurrentRegion
        With .Offset(1).Resize(.Rows.Count - 1)
            For Each r In .Cells
                Set c = .Find(r.Value, r, , 1, , , 2)
                If (c.Address <> r.Address) * (c.Row > r.Row) Then
                    r.Offset(, 13) = c.Row - r.Row - 1
                Else
                    r.Offset(, 13) = "na"
                End If
            Next
        End With
    End With
End Sub 
user761065
sumber