我有一个字符串数组,并且在数组的每个插槽中都是字符串格式的'范围列',例如“B:J”“k:W”“AC:AG”
该方法正在传递一个字符串,这是一个列名,例如“C”
我需要搜索“C”是否在“B:J”里面。
所以基本上它需要检查“C”是否在“BCDEFGHIJ”中,如果它是从循环中断
但如果我输入“A”,它应该转到数组的下一个插槽。
感谢
答案 0 :(得分: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值来执行此操作而不使用Range对象。
答案 1 :(得分: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