使用 excel-vba/udf 按行计算相似值之间的距离
Counting the distance between similar values by rows using excel-vba/udf
我在计算相似值之间的距离时遇到了问题,因为 excel 中没有函数可以实现这一点,而且我处理了 2000 行值。为此,我更喜欢 excel-vba,一个按钮可能会像示例中那样生成距离。当值太多时,数组公式滞后于 excel。一个一个地计算它们是浪费时间。请我想完成这件事。如果有天才能够实现这一点,我将不胜感激。
下面的示例显示了一个特定值与另一个值的距离:
你可以试试这个
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
在您的 "Values" 上测试它返回相同的 "Value row gaps" 除了单元格 "K4":我希望这是您计算错误...
如果您需要在相同的 "relative" 位置但在另一个工作表上显示输出(例如:"sheet2"),则只需更改
cell.offset(, .Columns.Count + 1) = rowOffset
到
Worksheets("sheet2").Range(cell.offset(, .Columns.Count + 1).Address) = rowOffset
我在计算相似值之间的距离时遇到了问题,因为 excel 中没有函数可以实现这一点,而且我处理了 2000 行值。为此,我更喜欢 excel-vba,一个按钮可能会像示例中那样生成距离。当值太多时,数组公式滞后于 excel。一个一个地计算它们是浪费时间。请我想完成这件事。如果有天才能够实现这一点,我将不胜感激。
下面的示例显示了一个特定值与另一个值的距离:
你可以试试这个
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
在您的 "Values" 上测试它返回相同的 "Value row gaps" 除了单元格 "K4":我希望这是您计算错误...
如果您需要在相同的 "relative" 位置但在另一个工作表上显示输出(例如:"sheet2"),则只需更改
cell.offset(, .Columns.Count + 1) = rowOffset
到
Worksheets("sheet2").Range(cell.offset(, .Columns.Count + 1).Address) = rowOffset