2013-07-02 134 views
0

我想知道命令以vba的名稱查找已定義名稱的列名和已定義名稱的行號。所以如果B3被命名爲Candy,我會搜索Candy並返回B列。我谷歌搜索了一個小時,並且找不到答案。列名稱,定義名稱的行號

我將使用這些列名稱和行號從交集中獲取數據並將其提取到另一個工作表中。

回答

0

您可以將工作表和其中已命名的範圍傳遞給此子,它會將範圍的地址和第一個Column和第一個打印到即時窗口。如果範圍超過一個細胞,它也將打印最後一列和行:

Sub PrintNameRowAndCol(ws As Excel.Worksheet, strName As String) 
Dim rng As Excel.Range 
Dim SplitAddress As Variant 

On Error Resume Next 
Set rng = ws.Range(strName) 
On Error GoTo 0 
If Not rng Is Nothing Then 
    Debug.Print rng.Address 
    SplitAddress = Split(rng.Address, "$") 
    Debug.Print "Column: "; SplitAddress(1) 
    Debug.Print "Row: "; SplitAddress(2) 
If rng.Cells.Count > 1 Then 
    Debug.Print "Last Column: "; SplitAddress(3) 
    Debug.Print "Last Row: "; SplitAddress(4) 
End If 
End If 
End Sub 

如果沒有範圍使用該名稱,沒有任何反應。

該例程使用Split函數,該函數根據分隔符「$」將字符串分解爲數組。由於Range的Address屬性以絕對引用格式(即$ Column $ Row)返回一個字符串,因此Split函數始終返回一個數組,其中包含單元格區域的列和行兩個元素。對於多個單元格範圍,它將返回四個元素。

這樣稱呼它:

Sub test() 
PrintNameRowAndCol ActiveSheet, "Candy" 
End Sub 

編輯:在回答在評論您的具體問題,你並不真的需要計算兩個範圍的列字母和行號。爲了得到一個範圍的列和另一列的交叉點的內容,然後將其分配到3號的範圍內,做這樣的事情:

With ActiveSheet 
    .Range("D12") = .Cells(.Range("Cost").Row, .Range("Candy").Column) 
End With 
+0

太謝謝你了。有沒有辦法將結果插入到另一個代碼中? – Reccax

+0

有。正如您在前面的問題中提到的那樣,在您的問題中更具體地說明您可以使用的答案。請修改您的問題以顯示將被插入的代碼。 (或者只是接受我的答案,看看你是否可以自己弄清楚:)) –

+0

好的!糖果在B3,成本在A12。假設B12 = 100,我想找到交點,並將其答案放入d12。再次感謝你。 – Reccax