【问题标题】:Calculate the Offset of two selected cells计算两个选定单元格的偏移量
【发布时间】:2020-05-18 18:22:44
【问题描述】:

我要求用户使用两个单元格填充用户窗体。 (假设这些是单元格“D1”和“F2”)。我想在代码的其他部分使用这两个单元格之间的偏移量(在搜索关键字之后)。请记住,用户可以选择工作表上的任意两个单元格。

【问题讨论】:

  • 通过比较它们的.Row.Column来计算两者的行列差?
  • 您想获取单元格行/列的差异吗?如果是,您是否还需要根据第一个单元格位置的负值,还是仅需要绝对差异?

标签: vba cell offset


【解决方案1】:

请试试这个功能。

它将返回行和列之间的差异。如果您需要绝对值,只需取消注释使差异为正的代码行:

Private Function cellsOffsetRC(Cell1 As Range, Cell2 As Range) As Variant
   Dim calOff As Long, rowsOff As Long, arrOff(1) As Variant

   arrOff(0) = Cell2.Row - Cell1.Row
    'If arrOff(0) < 0 Then arrOff(0) = arrOff(0) * (-1)
   arrOff(1) = Cell2.Column - Cell1.Column
    'If arrOff(1) < 0 Then arrOff(1) = arrOff(1) * (-1)

    cellsOffsetRC = arrOff
End Function

可以通过这样的测试 Sub 进行检查:

Sub testCellsOffsetRC()
  Dim arrOff As Variant
  arrOff = cellsOffsetRC(Range("D1"), Range("F2"))
  Debug.Print "Rows Offset: " & arrOff(0),"Columns Offset: " &  arrOff(1)
  Debug.Print Range("D1").Offset(arrOff(0), arrOff(1)).address
End Sub

【讨论】:

  • 你可以只使用Abs 来返回绝对值btw。
  • @BigBen:是的。一开始我心里就有这个想法。但是我认为首先返回相对位置然后在绝对需要的情况下明确代码想要做什么更具有指导意义……如果需要绝对值,他可以直接使用Abs。但是,我认为这不太可能,因为他提到偏移量将在确定后(在代码的其他部分......)使用......
  • @Kristian:这不是你需要的吗?即使不是,至少在提出问题并且有人尝试回答时说些什么是礼貌的......
  • @FaneDuru 完美,谢谢。这正是我想要的:)
猜你喜欢
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
相关资源
最近更新 更多