使用Excel VBA在一个单元格中搜索一个值,并在同一行的另一个单元格中搜索另一个值
我正在研究一个大规模的VBA脚本,一旦完成,但当它到达需要VBA脚本检查此逻辑的位置时,我遇到了一个问题:使用Excel VBA在一个单元格中搜索一个值,并在同一行的另一个单元格中搜索另一个值,excel,vba,Excel,Vba,我正在研究一个大规模的VBA脚本,一旦完成,但当它到达需要VBA脚本检查此逻辑的位置时,我遇到了一个问题: If Cell AC2 = "PastDue" And Cell W2 <> "Risk Accepted" on Sheet1 Then Copy row to Sheet2. 如果第1页上的单元格AC2=“PastDue”和单元格W2“已接受风险”,则将行复制到第2页。 以下是我目前掌握的代码: Sub PastDue() Application.ScreenUpdat
If Cell AC2 = "PastDue" And Cell W2 <> "Risk Accepted" on Sheet1 Then Copy row to Sheet2.
如果第1页上的单元格AC2=“PastDue”和单元格W2“已接受风险”,则将行复制到第2页。
以下是我目前掌握的代码:
Sub PastDue()
Application.ScreenUpdating = False
Application.StatusBar = "Job Updating"
Dim lr As Long
Dim lr2 As Long
Dim r As long
Dim ws1 As Worksheet1
Dim ws2 As Worksheet2
Application.ScreenUpdating= False
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
N = 1
lr = ws1.Cells(Rows.Count, "AC").End(x1Up).Row 'Used to search column AC
lr = ws1.Cells(Rows.Count, "W").End(x1Up).Row 'This errors out when ran and was a line I added in to check the second column
lr2 = ws2.Cells(Rows.Count, "A").End.x1Up).Row
For r = 2 To lr
If ws1.Range("AC" & r).Value = "PastDue" Then
If ws1.Range ("W" & r).Value <> "Risk Accepted" Then 'I added this to search for the second piece of the logic
ws1.Rows(r).Copy Destination:=ws2.Range("A" & N + 1)
N = ws2.Cells(Rows.Count, "A").End(xlUp).Row
End If
End If
Next r
Sheets("Sheet2").Select
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
Sub passdue()
Application.ScreenUpdating=False
Application.StatusBar=“作业更新”
变暗lr为长
调暗lr2,长度相同
变暗,变长
将ws1尺寸标注为工作表1
将ws2调暗为工作表2
Application.screenUpdate=False
设置ws1=图纸(“图纸1”)
设置ws2=图纸(“图纸2”)
N=1
lr=ws1.Cells(Rows.Count,“AC”).End(x1Up).Row'用于搜索列AC
lr=ws1.Cells(Rows.Count,“W”).End(x1Up).Row'在运行时出错,是我为检查第二列而添加的一行
lr2=ws2.Cells(Rows.Count,“A”).End.x1Up.Row
对于r=2至lr
如果ws1.Range(“AC”&r).Value=“PastDue”,则
如果ws1.Range(“W”&r).Value“Risk Accepted”,那么“我添加了这个来搜索逻辑的第二部分”
ws1.Rows(r).Copy Destination:=ws2.Range(“A”&N+1)
N=ws2.Cells(Rows.Count,“A”).End(xlUp).Row
如果结束
如果结束
下一个r
图纸(“图纸2”)。选择
Application.StatusBar=False
Application.ScreenUpdating=True
端接头
这是一个稍微修改过的代码,它只在一列中查找一个值时才起作用我在一些模拟数据上测试了您的代码,除了一些奇怪的错误之外,它似乎还起作用。我不确定这些错误是在将代码复制到StackOveflow时疏忽了,还是它们确实存在于VBA中。如果这确实是您的代码,我不确定在只搜索单个值时您的代码是如何工作的
Dim
工作表设置为Worksheet1
和Worksheet2
。这些不是类名。将行更改为:Dim ws1 as workeep
和Dim ws2 as workeep
End
函数的参数是x1up
(注意,您使用的是数字1,而不是字母l
)Sub PastDue()
Application.ScreenUpdating = False
Application.StatusBar = "Job Updating"
Dim lr As Long
Dim lr2 As Long
Dim r As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Application.ScreenUpdating = False
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
N = 1
lr = ws1.Cells(Rows.Count, "AC").End(xlUp).Row 'Used to search column AC
lr = ws1.Cells(Rows.Count, "W").End(xlUp).Row 'This errors out when ran and was a line I added in to check the second column
lr2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row
For r = 2 To lr
If ws1.Range("AC" & r).Value = "PastDue" Then
If ws1.Range("W" & r).Value <> "Risk Accepted" Then 'I added this to search for the second piece of the logic
ws1.Rows(r).Copy Destination:=ws2.Range("A" & N + 1)
N = ws2.Cells(Rows.Count, "A").End(xlUp).Row
End If
End If
Next r
Sheets("Sheet2").Select
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
Sub passdue()
Application.ScreenUpdating=False
Application.StatusBar=“作业更新”
变暗lr为长
调暗lr2,长度相同
变暗,变长
将ws1设置为工作表
将ws2设置为工作表
Application.ScreenUpdating=False
设置ws1=图纸(“图纸1”)
设置ws2=图纸(“图纸2”)
N=1
lr=ws1.Cells(Rows.Count,“AC”).End(xlUp).Row'用于搜索列AC
lr=ws1.Cells(Rows.Count,“W”).End(xlUp).Row'在运行时出错,这是我为检查第二列而添加的一行
lr2=ws2.Cells(Rows.Count,“A”).End(xlUp).Row
对于r=2至lr
如果ws1.Range(“AC”&r).Value=“PastDue”,则
如果ws1.Range(“W”&r).Value“Risk Accepted”,那么“我添加了这个来搜索逻辑的第二部分”
ws1.Rows(r).Copy Destination:=ws2.Range(“A”&N+1)
N=ws2.Cells(Rows.Count,“A”).End(xlUp).Row
如果结束
如果结束
下一个r
图纸(“图纸2”)。选择
Application.StatusBar=False
Application.ScreenUpdating=True
端接头
这个问题是…?哈哈,当查看原始代码时,我确实在x1up
上做了双重检查,但我认为这只是我!FWIW-另一个问题是不需要第一个lr=
语句。(或者,它可能是必需的,但与当前编写的一样没有用处,因为lr
会立即在下一行被覆盖。)而且lr2
在赋值后不被使用-我怀疑它和N
是一个变量。所以我接受了代码,是的,我键入了1而不是l:P。现在它运行时没有任何错误,但没有结果粘贴到工作表2上。我能做什么:1.清理LR1和lr2,因为我需要在AC列中查找value=“PastDue”,然后是值“RiskAccepted”的W列。现在它运行时没有任何错误,但没有结果粘贴到工作表2上。我可以做什么:1.清理LR1和LR2,因为我需要在AC列中查找value=“PastDue”,然后在W列中查找值“RiskAccepted”。2.当我使用其他人的代码时,它具有"N=1。通过查看用于将第2页上的第一个粘贴行放置到第B行的代码,可以看出这一点。我确信有一种更干净的方法可以做到这一点,但因为它起作用,我想我只需要使用它就可以了。如果有人需要,我确实有一个包含数据的表。我能够修复过去的问题,因为变量的格式从和旧的expor更改t到新的导出。那么看看我如何让它看2个变量,如果我现在想让它看3个变量呢?我需要添加另一个DIM吗?