VBA:将范围转换为单元格编号,例如(1,1)

时间:2018-06-20 14:33:13

标签: excel vba

通过使用此代码,我在工作表中选择了一个范围。 例如。我从以下代码中得到了“ BE5:BE182”:

MsgBox "Selected range: " & Selection.Areas(1).Address(False, False)

现在,我要检索BE5并将其转换为两个col的数值。和行(例如1,1),我也想针对BE182执行此操作。我该怎么办?

抱负:我对宏的目标是选择一个应该附加数字数据的范围。基于范围开始和范围结束之间的行数,我将始终使用存储国家名称的col 1(A)。针对这些问题,我想针对另一个工作簿中的数据实现类似的VLOOKUP功能-用户还应在其中选择应从中获取数据的范围。

让用户定义col的想法。并且row-range是针对vlook-up的行范围可以更改,并且col可能并不总是+1。

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用范围的RowColumn属性来获取范围的数字范围。

Dim Selected As String
Dim SelectedRange() As String
Dim BeginSel As String
Dim EndSel As String

' Get the range of cells selected by the user.
Selected = Selection.Areas(1).Address(False, False)
MsgBox "Selected range: " & Selected

' Split the selected range into begin and end cells.
SelectedRange = Split(Selected, ":")
BeginSel = SelectedRange(0)
EndSel = SelectedRange(1)

MsgBox "Begin Selected range: " & BeginSel
MsgBox "End Selected range: " & EndSel

' Convert the begin and end cells to row and column values
MsgBox Range(BeginSel).Row & ", " & Range(BeginSel).Column
MsgBox Range(EndSel).Row & ", " & Range(EndSel).Column

在这里,我在":"字符上分割了选定的范围,以获取该范围的开始和结束单元格。您可能需要检查Split函数返回的数组的长度,以确保用户选择了单元格的实际 range 而不是单个单元格(或什么也没有)。

例如,这会将所选范围A1:E3转换为坐标(1,1)和(3,5)。

答案 1 :(得分:0)

怎么样:

Sub RowAndColumn()
    Dim r1 As Range, r2 As Range, addy As String

    addy = Selection.Address(0, 0)
    If Selection.Count = 1 Then
        MsgBox Selection.Row & "," & Selection.Column
    Else
        arr = Split(addy, ":")
        Set r1 = Range(arr(0))
        Set r2 = Range(arr(1))
        MsgBox r1.Row & "," & r1.Column & vbCrLf & r2.Row & "," & r2.Column
    End If
End Sub