繁体   English   中英

在Excel VBA中搜索范围

[英]Searching a Range in Excel VBA

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

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

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

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

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

谢谢

此函数将返回数组中范围内包含单列的位置。 它使用“相交”属性确定两个范围是否相交。

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对象的情况下执行此操作。

您可能会看看

如何将列号(例如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完成

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM