2016-07-11 7 views
0

У меня возникли проблемы с подсчетом расстояния между значениями, которые похожи, потому что в excel нет функции, которая могла бы достичь этого, и я имею дело с 2000 строками значений. Я бы предпочел excel-vba для этого, возможно, кнопка, которая генерирует расстояния, как в примере. формулы массива отстают от excel, когда слишком много значений. Подсчет их 1 к 1 будет пустой тратой времени. Пожалуйста, я хочу, чтобы это было сделано. Я бы по достоинству оценил это, если бы какой-то гений мог это сделать.Подсчет расстояния между аналогичными значениями по строкам с помощью excel-vba/udf

Пример ниже показывает, как далеко конкретное значение от другого: enter image description here

+0

Возможный дубликат [формулы Excel в подсчете расстояния между определенным значением в строках] (HTTP: //stackoverflow.com/questions/36789382/excel-formula-in-counting-distance-between-a-specific-value-in-rows) – RGA

+0

@RGA Я попробовал это, сэр не работает над несколькими дубликатами из 2000 строк и он отстает, когда он выходит за рамки 1000 строк ... Мне нужно что-то вроде vba pls ... –

ответ

0

вы могли бы попробовать это

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 

испытанный на ваших «ценностей» он возвращает те же «пробелы Значение строки» кроме клетка «К4»: Я надеюсь, что это просчет с вашей стороны ...


вы должны когда-нибудь понадобится для вывода на экран в том же «relativ е»положение, а на другом листе (например:„sheet2“), то просто изменить

cell.offset(, .Columns.Count + 1) = rowOffset 

в

Worksheets("sheet2").Range(cell.offset(, .Columns.Count + 1).Address) = rowOffset 
+0

Спасибо, что так много чувак, плохо скажите моему другу, чтобы оценить все ответы ур в урском профиле .. это единственное, что я могу сделать для u сейчас .. –

+1

вы очень желанны! – user3598756

+0

sir есть ли способ для u изменить это, чтобы он отображался на другом листе? cell.Offset (, .Columns.Count + 1) = rowOffset для листов ("sheet2"). cell.Offset (, .Columns.Count + 1) = rowOffset ?? может быть? –

 Смежные вопросы

  • Нет связанных вопросов^_^