0

我有一个字符串数组,并且在数组的每个插槽中都有一个字符串格式的“列范围”,例如“B:J”“k:W”“AC:AG”

该方法正在传递一个字符串,该字符串是列名,例如“C”

我需要搜索“C”是否在“B:J”中。

所以基本上它需要检查“C”是否在“BCDEFGHIJ”中,以及它是否从循环中中断

但是,如果我输入“A”,它应该会转到数组中的下一个插槽。

感谢

4

2 回答 2

0

你可以看看

如何将列号(例如 127)转换为 excel 列(例如 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 完成

于 2013-03-28T13:40:15.060 回答
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 

您可能希望添加一些错误检查以确保可以将参数转换为范围,但我将把它留给您。您可以在没有 Range 对象的情况下通过在冒号上拆分范围字符串并比较字母的 ASCII 值来执行此操作。

于 2013-03-28T12:45:26.050 回答