excel字符串比较问题

excel字符串比较问题,excel,string,vba,compare,Excel,String,Vba,Compare,因此,我试图创建一个非常简单的宏,它在某一行中循环,查找在不同的工作表中标识的值。一旦找到该值,它就开始在结果列中查找文本字符串。如果找到文本字符串,它将获取同一行中的值,但会覆盖几列,并将其写入具有用户定义的查找值的工作表中。我的问题是,由于某种原因,当我试图比较字符串时,我的条件if语句没有实现,这意味着写入最终值的部分永远不会被计算。下面是代码,请提前感谢 Private Sub valchange() Dim keycells As Range Set keycells = Worksh

因此,我试图创建一个非常简单的宏,它在某一行中循环,查找在不同的工作表中标识的值。一旦找到该值,它就开始在结果列中查找文本字符串。如果找到文本字符串,它将获取同一行中的值,但会覆盖几列,并将其写入具有用户定义的查找值的工作表中。我的问题是,由于某种原因,当我试图比较字符串时,我的条件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

在VBA中,这样的字符串比较不能使用小丑字符

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

If instr(1,Worksheets("Rework List").Cells(j, I),"pending",vbTextCompare)>0 Then
如果可以在第二个字符串中找到搜索字符串,instr将返回第一个字符的位置。如果找不到,则返回0。因此,如果instr()>0,则表示字符串在那里

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


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

除了@vacip已经告诉您的以外,我要指出以下几点

你写道:

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

然后我想:

Cells(j, 3).Value = Worksheets("Dashboard").Range("F" & k)
相反(如果宏开始时的活动工作表是“返工列表”)

此外,最好:

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

    虽然在您的特定情况下没有严格的必要性(它们的范围最大为50,由
    Integer
    类型处理),但您最终会遇到33k+行是很常见的,这就是
    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

使用instr()函数。*不是小丑角色。
.Cells(j,I)
是否包含或等于
*PENDING*
?我无法重述,请提供实际数据。@vacip instr工作得很有魅力,你是救命恩人。我完全无法理解这些愚蠢的随机否决票,没有任何评论……你完全正确。在我插入vacip的修复程序后,我发现这个问题出现了。我希望没有人会注意到这一部分:)。我还忘了告诉它从哪个表中获取值。