在VBA中返回选定的单元格地址

时间:2014-11-07 12:59:55

标签: excel vba find range

    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中使用它?

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

我很感激任何帮助,因为我花了一整天的时间尝试不同的方法来解决这个问题,但它并没有奏效。谢谢!

2 个答案:

答案 0 :(得分:0)

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

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

我可能还会用rng1.Activate

替换你的第三行代码

要获取单元格行/列详细信息,您可以选择以下几种方法:

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

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

Cells(rng1.Row, rng1,Column)

或者,如果您真的想坚持使用字母/数字描述,则可以使用Address属性。因此rng1.Address会返回一个价值$ C $ 1或类似值,具体取决于其实际位置。

答案 1 :(得分:0)

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

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

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))

尝试这些建议,如果继续遇到问题,请回复。