excel字符串比较问题

时间:2016-10-12 07:20:40

标签: excel string vba compare

所以我试图创建一个非常简单的宏,它循环遍历某一行,寻找在不同工作表中标识的值。找到该值后,它会开始在结果列中查找文本字符串。如果找到文本字符串,它会抓取同一行中的值,但会删除几列,并将其写入具有用户定义的查找值的工作表。我的问题是,由于某种原因,当我试图比较字符串时,我的条件if语句没有实现,这意味着写入最终值的部分永远不会被评估。这是代码,并提前感谢。

Private Sub valchange()
Dim keycells As Range
Set keycells = Worksheets("Dashboard").Range("B1")
Dim k As Integer
k = 5
        For I = 1 To 50
            If Worksheets("Rework List").Cells(3, I).Value = keycells.Value Then
                For j = 14 To 50
                    If UCase(Worksheets("Rework List").Cells(j, I)) = "*PENDING*" Then
                            Cells(j, 3).Value = Worksheets("Dashboard").Range("F" & k)
                            k = k + 1
                    End If
                Next j
            End If
        Next I
End Sub

2 个答案:

答案 0 :(得分:1)

除了@vacip告诉你的内容之外,我还要指出以下内容

你写道:

  

它抓取同一行中的值,但在和上面有几列   将其写入具有用户定义的查找值的工作表

然后我想:

Cells(j, 3).Value = Worksheets("Dashboard").Range("F" & k)

会做相反的事情(前提是宏开始的活动表是"返工列表")

而且它的'更好地:

  • 将行索引变量声明为Long类型

    虽然在您的具体情况下并不是绝对必要的(它们的范围最大为50,由Integer类型处理),但最常见的是您最终会遇到33k +行,而且#39;其中Long类型变量必须进入场景

  • 存储关键字值而不是其范围,并使用keycells.Value

  • 避免对其进行所有后续访问
  • 始终采用完全合格的范围引用,至少是工作表对象(如果不是工作簿对象)

所以你可以试试这个:

Option Explicit

Private Sub valchange()
    Dim keyVal As String
    Dim k As Long, i As Long, j As Long

    keyVal = CStr(Worksheets("Dashboard").Range("B1").Value)
    k = 5
    With Worksheets("Rework List")
        For i = 1 To 50
            If .Cells(3, i).Value = keyVal Then
                For j = 14 To 50
                    If InStr(.Cells(j, i), "pending", vbTextCompare) > 0 Then
                        Worksheets("Dashboard").Range("F" & k) = .Cells(j, 3).Value
                        k = k + 1
                    End If
                Next j
            End If
        Next i
    End With
End Sub

答案 1 :(得分:0)

你不能在VBA中的字符串比较中使用小丑字符。

相反,使用Instr()函数在另一个字符串中搜索字符串。

split

如果可以在第二个字符串中找到搜索字符串,instr将返回第一个字符的位置。如果找不到它,则返回0.所以如果instr()> 0表示该字符串在那里。

vbTextCompare确保忽略套管(大写/小写)。开头的1指定搜索的起始位置。

请注意,这不是世界上最快的事情......