【问题标题】:Return selected cell address in VBA在 VBA 中返回选定的单元格地址
【发布时间】:2014-11-08 02:23:30
【问题描述】:
    Rows("1:1").Select
Set rng1 = Selection.Find(What:="FinalFSU", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
Selection.Find(What:="FinalFSU", After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.EntireColumn.Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .Color = 65535
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With

    Range("rng1" & LR).Formula = "=VLOOKUP(A2,'RETURNED'!A:T,20,0)"

以上是我尝试在我的电子表格中实现的代码示例。

我需要什么:

我有 A、B、C、D 等列。我需要找到每一列并获取第一个单元格的地址或范围。列通常以不同的方式排序,因此可能是 B、C、A、D 等。我可以找到标题名称,我可以选择整个列,但是如何获取单元格地址以便在我的 VLOOKUP 中使用它?

最后一个字符串实际上显示了我需要使用实际范围值的位置。

如果能提供任何帮助,我将不胜感激,因为我花了一整天时间尝试不同的方法来解决这个问题,但没有奏效。谢谢!

【问题讨论】:

  • 我认为你不能用VLOOKUP 做到这一点。 VLOOKUP 要求您的键值列始终是您范围内最左侧的列。
  • 没错。我的目标是在电子表格中找到正确的列并填充 vlookup。问题是我只知道列的名称而不知道实际地址(如 C2)。如果我的列是恒定的,我的 vlookup 看起来像这样 - Range(B2 & LR).Formula = "=VLOOKUP(A2,'RETURNED'!A:T,20,0)"

标签: excel vba find range


【解决方案1】:

首先,在您的代码中,“rng1”是一个包含单个单元格的 Range,因此您的最后一行可能变为:

rng1.Formula = "=VLOOKUP(A2,'RETURNED'!A:T,20,0)"

我可能还会将您的第三行代码替换为rng1.Activate

要获取单元格行/列的详细信息,您有几个选项:

您可以使用 rng1.Row 和 rng1.Column 以数字形式获取位置。

您可以使用只需要数字的Cells 语法,而不是使用需要字母和数字的Range 语法。所以rng1的位置可以描述为:

Cells(rng1.Row, rng1,Column)

或者,如果您真的想坚持使用字母/数字描述,您可以使用Address 属性。所以rng1.Address 会根据其实际位置返回值 $C$1 或类似值。

【讨论】:

    【解决方案2】:

    您的代码将受益于许多更改。

    没有必要使用 Select 和/或 Activate,而且效率很低,除非在非常特殊的情况下,这些情况在您的代码 sn-p 中都不存在。将 rng1 设置为第 1 行中包含 FinalFSU 的单元格的更好代码是:

    Dim rng1 As Range
     With Rows(1).Cells
        Set rng1 = .Find(what:="FinalFSU", after:=.Item(1, 1), LookIn:=xlFormulas, _
            lookat:=xlPart, MatchCase:=False)
     End With
    
     'optional test for non-existence of FinalFSU
     If rng1 Is Nothing Then
        MsgBox "Could not find FinalFSU"
        Exit Sub
    End If
    

    同样不需要在插入新列之前选择整个列。

    在最后一行代码中,您已将变量 rng1 放在引号内。然后这变成了字符串 rng1,它是一个单元格地址(第 1 行,第 12539 列)。我怀疑这是你真正想要的。查找 Range 对象的语法。

    你永远不会定义 LR。我认为它是与 rng1 同一列中的最后一行。获取从 rng1 到同一列中最后一行的范围的另一种方法是:

    Range(rng1, Cells(Rows.Count, rng1.Column).End(xlUp))
    

    尝试这些建议,如果仍有问题,请回复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2022-01-12
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2017-01-26
      相关资源
      最近更新 更多