【问题标题】:string array to find and offset values用于查找和偏移值的字符串数组
【发布时间】:2020-08-13 15:42:24
【问题描述】:

我试图在一个 cloumn 中找到多个变量,然后将一个值偏移到下一列。下面的代码仅适用于第一个变量“a*”,但不适用于其他变量。

我该如何解决这个问题?

Sub a()

Dim rng As Range
Dim sFind(10) As String

sFind(0) = "a*"
sFind(1) = "b*"
sFind(2) = "c*"
sFind(3) = "d*"
sFind(4) = "e*"
sFind(5) = "f*"
sFind(6) = "g*"
sFind(7) = "h*"
sFind(8) = "i*"
sFind(9) = "j*"

For Each rng In Range("J2", Range("J65536").End(xlUp))
    If Not rng.find(sFind(), LookIn:=xlValues) Is Nothing Then
        rng.Offset(0, 1).Value = "1"
    End If
Next rng

End Sub

【问题讨论】:

  • 样本数据和预期结果会很好。

标签: arrays excel vba offset


【解决方案1】:

我怀疑你把循环弄错了。这应该工作

Sub a()
    Dim rng As Range
    Dim sFind(10) As String
    Dim i as Long

    sFind(0) = "a*"
    sFind(1) = "b*"
    sFind(2) = "c*"
    sFind(3) = "d*"
    sFind(4) = "e*"
    sFind(5) = "f*"
    sFind(6) = "g*"
    sFind(7) = "h*"
    sFind(8) = "i*"
    sFind(9) = "j*"

    With Range("J2", Range("J65536").End(xlUp))
        For i = LBound(sFind) To UBound(sFind)
            Set rng = .Find(what:=sFind(i), LookIn:=xlValues)
            If Not rng Is Nothing Then
                rng.Offset(0, 1).Value2 = 1
            End If
        Next i
    End With
End Sub

【讨论】:

    【解决方案2】:

    一种方法是修改内部代码并添加一个如下所示的循环来检查所有条目。

    For i = lbound(sFind) to ubound(sFind)
        If Not rng.find(sFind(i), LookIn:=xlValues) Is Nothing Then
            rng.Offset(0, 1).Value = "1"
            Exit For
        End If
    Next i
    

    【讨论】:

    • 不用外循环?
    • 感谢您的回复。当我尝试这个时,它会在“If Not”行显示错误“对象变量或未设置块变量”。这是什么意思?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    相关资源
    最近更新 更多