2013-03-28 160 views
0

我有一個字符串數組,在數組的每個插槽中是一個字符串格式的「列的範圍」,例如「B:J」「k:W」「AC:AG」在Excel中搜索範圍VBA

的方法被傳遞一個字符串,它是列名,例如「C」

我需要搜索看看是否「C」是內部「B:J」。

所以基本上它需要檢查,看看是否「C」是「BCDEFGHIJ」這是,如果它是突破從環

但如果我輸入「A」應該然後去下一個插槽中的數組。

謝謝

+0

你將與片操作'Range'對象數組或者你只是給了我們比如你的數據與列?你有沒有嘗試過任何可以與我們分享的代碼? – 2013-03-28 10:59:38

回答

0

該函數將返回其中該單個列被包括在範圍內的陣列中的位置。它使用Intersect屬性來確定兩個範圍是否相交。

Function ArrayPos(sColLetter As String, vaRanges As Variant) As Long 

    Dim i As Long 
    Dim sh As Worksheet 
    Dim lReturn As Long 

    Set sh = Sheet1 

    For i = LBound(vaRanges) To UBound(vaRanges) 
     If Not Intersect(sh.Columns(sColLetter), sh.Columns(vaRanges(i))) Is Nothing Then 
      lReturn = i 
      Exit For 
     End If 
    Next i 

    ArrayPos = lReturn 

End Function 

它這樣使用,從即時窗口例如

?arraypos("M",array("B:J","K:W")) 
1 

你想添加一些錯誤檢查,以確保該參數可以轉換爲範圍,但我會離開,給你。您可以通過在冒號上分割範圍字符串並比較字母的ASCII值來執行此操作。

0

你可以看看

How to convert a column number (eg. 127) into an excel column (eg. AA)

sheet.Application.ActiveCell.Column //for current selected column 
int col=sheet.Range("A").Column; // for any choosen column 

返回當前的列數,只是採用同樣爲您範圍B:J-,檢查如果j(10)> C(3)> B(2)

然後你可以說它在這個範圍內。

如果需要通過我提供的鏈接繞過此功能的其他方法。

ConvertToAlphaColumnReferenceFromInteger(sheet.Application.ActiveCell.Column) 

完成對C#/。NET