2013-10-10 37 views
1

我有一個名爲Search的代碼,可以找到搜索項目的單元格引用。從那以後,我想用得到的搜索值的範圍:如何更改地址屬性的「列」部分

Search.Address

一旦VBA獲取地址,說$A$1,我想改變$A$M,因此,返回值將是$M$1

這可能嗎?

謝謝!

回答

2
Sub Main() 

    Dim rangeAddress As String 

    rangeAddress = Range("A1").Address 

    Debug.Print "Before conversion: " & rangeAddress 

    SwapColumn rangeAddress, "M" 

    Debug.Print "After conversion: " & rangeAddress 
End Sub 

Private Sub SwapColumn(ByRef r As String, ByVal newCol As String) 
    Dim arr As Variant 
    arr = Split(r, "$") 
    r = vbNullString 
    Dim i As Long 
    For i = LBound(arr) To UBound(arr) 
     If i = 1 Then 
      r = "$" & r & newCol & "$" 
     Else 
      r = r & arr(i) 
     End If 
    Next i 
End Sub 

運行Main()子,並檢查了立即窗口CTRL + ģ

enter image description here


或使用它作爲這樣

=SwapColumns(A1, "M") 
電子表格函數

的代碼添加到模塊

注:小組稱爲SwapColumn和功能SwapColumnss在末端。

Function SwapColumnS(r As Range, newCol As String) As String 
    Dim rngAddress As String 
    rngAddress = r.Address 
    Dim arr As Variant 
    arr = Split(rngAddress, "$") 
    rngAddress = vbNullString 
    Dim i As Long 
    For i = LBound(arr) To UBound(arr) 
     If i = 1 Then 
      rngAddress = "$" & rngAddress & newCol & "$" 
     Else 
      rngAddress = rngAddress & arr(i) 
     End If 
    Next i 
    SwapColumnS = rngAddress 
End Function 

enter image description here

+0

這就是它!謝謝! –

+0

我想知道,你介意解釋你如何提出解決方案?謝謝! –

+0

我的'rangeAddress'變量將字符串的地址保存爲字符串ex。 '$ A $ 1'。您通過引用另一個子變量來發送該變量,以修改該變量。你可以在'newCol'中添加一個額外的參數,它是'rangeAddress'變量中要替換的新列。你添加一個Variant類型的數組並使用Split()函數根據'$'*美元符號*的分隔符將'rangeAddress'變量拆分成多個部分。然後你遍歷arr數組 - 知道arr(1)將存儲你創建一個條件if語句的列號。通過迭代'arr'數組來重新創建'rangeAddress'' – 2013-10-10 11:30:02

1

OK,我必須失去了一些東西,爲什麼不乾脆用REPLACE:

Sub Main() 
    Dim rangeAddress As String 

    rangeAddress = Range("A1").Address 

    Debug.Print "Before conversion: " & rangeAddress 

    rangeAddress = Replace(rangeAddress, "$A$", "$M$") 

    Debug.Print "After conversion: " & rangeAddress 
End Sub 
+2

因爲這是硬編碼的? – 2013-10-10 11:50:16

3

這裏是一個班輪?

Debug.Print Range("M" & Range(rangeAddress).Row).Address 

rangeAddress商店$A$1或任何其他地址。

+0

+1單行解決方案我沒有想到!如果可以的話,我會給你+10! – 2013-10-10 13:00:34

+0

+1也同意我的看法......不錯的解決方案。 –