excel字符串比较问题
因此,我试图创建一个非常简单的宏,它在某一行中循环,查找在不同的工作表中标识的值。一旦找到该值,它就开始在结果列中查找文本字符串。如果找到文本字符串,它将获取同一行中的值,但会覆盖几列,并将其写入具有用户定义的查找值的工作表中。我的问题是,由于某种原因,当我试图比较字符串时,我的条件if语句没有实现,这意味着写入最终值的部分永远不会被计算。下面是代码,请提前感谢excel字符串比较问题,excel,string,vba,compare,Excel,String,Vba,Compare,因此,我试图创建一个非常简单的宏,它在某一行中循环,查找在不同的工作表中标识的值。一旦找到该值,它就开始在结果列中查找文本字符串。如果找到文本字符串,它将获取同一行中的值,但会覆盖几列,并将其写入具有用户定义的查找值的工作表中。我的问题是,由于某种原因,当我试图比较字符串时,我的条件if语句没有实现,这意味着写入最终值的部分永远不会被计算。下面是代码,请提前感谢 Private Sub valchange() Dim keycells As Range Set keycells = Worksh
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)
相反(如果宏开始时的活动工作表是“返工列表”)
此外,最好:
- 将行索引变量声明为
类型 虽然在您的特定情况下没有严格的必要性(它们的范围最大为50,由Long
类型处理),但您最终会遇到33k+行是很常见的,这就是Integer
类型变量必须进入场景的地方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的修复程序后,我发现这个问题出现了。我希望没有人会注意到这一部分:)。我还忘了告诉它从哪个表中获取值。