【问题标题】:How to check if a string is a valid column name?如何检查字符串是否是有效的列名?
【发布时间】:2018-03-21 11:16:04
【问题描述】:

我将列名(A、B、C、AB、AC、、、、)存储在字符串变量中。

我的要求是获取列号。在此之前,我想检查给定的列名是否有效。例如AD,AC,DF,ER,FC,KL 有效,而World,kavisuja 无效。

如果我有有效的列名,我可以通过以下代码获得:

Range(ColumnChar & 1).Column

【问题讨论】:

  • 检查字符串是(1个字符)还是(2个字符)或者(3个字符和
  • 你用的是什么版本的excel?您可以使用正则表达式(字符串等于或小于 3 个属于 [A-Z] 范围的字符)。如果第一个字符是“X”,那么第二个必须是“F”或更小,第三个字符不能超过“D”
  • @YowE3K 这里为什么我们检查(3 个字符和
  • 当您可以将您的范围分配给一个变量并查看它是否有效时,您似乎会遇到很多麻烦? (例如On Error Resume NextSet rng = NothingSet rng = Range(your_range_string)On Error GoTo 0If rng Is Nothing Thensome sort of error processingElsesome sort of processingEnd If
  • "XFD" 是当前工作表中的最后一列。所以"XFD" < "XFE"True,但"ZAB" < "XFE"False。 (P.S. 你甚至可以测试 Len(ColumnChar) < 4 And Right("AA" & ColumnChar, 3) < "XFE" 然后不必担心为一个和两个字符串做不同的事情。)

标签: excel vba


【解决方案1】:

这就是我的做法,与 cmets 中 @YowE3K 的想法非常相似:

Option Explicit

Public Sub TestMe()

    Debug.Print isValid("ZZZ")    'False
    Debug.Print isValid("ZZ")     'True
    Debug.Print isValid("ABCD")   'False

End Sub

Public Function isValid(strInput As String) As Boolean

    On Error GoTo isValid_Error

    Dim rngSet  As Range
    Set rngSet = Range(strInput & "1")
    isValid = True

    On Error GoTo 0
    Exit Function

isValid_Error:
End Function

函数的默认值为False,因此如果未设置为True,则默认为False

【讨论】:

    【解决方案2】:
    Private Sub Test()
        Dim ColumnChar As String
        ColumnChar = "AD"
    
        If IsColumnName(ColumnChar) Then
            Debug.Print Columns(ColumnChar).Column
        End If
    End Sub
    
    ' Returns True if valid column name, otherwise False
    Public Function IsColumnName(strInput As String) As Boolean
        If strInput Like WorksheetFunction.Rept("[a-zA-Z]", Len(strInput)) Then
            If Evaluate("IsRef(" & strInput & "1)") Then IsColumnName = True
        End If
    End Function
    

    【讨论】:

    • 虽然您的代码可以解决问题,但说明您的解决方案为何有效会非常有益。
    猜你喜欢
    • 2020-10-15
    • 1970-01-01
    • 2013-02-13
    • 2011-01-31
    • 2011-06-17
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多