2013-03-28 100 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