Vba Excel VB宏从另一个工作表中查找值,然后更改当前工作表中的单元格值
我有一个文件有两个工作表。我需要运行一个宏,在sheet2上向下查看a列,直到它为空。它需要从sheet1的sheet2列A中的单元格中查找值。如果找到,则更改列AP的值。如果未找到,则跳到下一个搜索以查找下一个值 这就是我目前所拥有的。我已经能够修复它,使其不再出现错误,但也没有结果。它显示并似乎运行,但未对sheet1上的单元格(“AP”、“找到的行值”)进行任何更改Vba Excel VB宏从另一个工作表中查找值,然后更改当前工作表中的单元格值,vba,excel,Vba,Excel,我有一个文件有两个工作表。我需要运行一个宏,在sheet2上向下查看a列,直到它为空。它需要从sheet1的sheet2列A中的单元格中查找值。如果找到,则更改列AP的值。如果未找到,则跳到下一个搜索以查找下一个值 这就是我目前所拥有的。我已经能够修复它,使其不再出现错误,但也没有结果。它显示并似乎运行,但未对sheet1上的单元格(“AP”、“找到的行值”)进行任何更改 Sub dataChange() Dim myRow As Integer Dim srch As Inte
Sub dataChange()
Dim myRow As Integer
Dim srch As Integer
On Error GoTo Err_Execute
myRow = 1
srch = 1
While Sheet2.Cells(myRow, 1).Value <> ""
If Sheet1.Range("A" & CStr(srch)).Value = Sheet2.Cells(myRow, 1).Value Then
Sheet1.Range("AP" & CStr(srch)).Value = "HOUSTON"
End If
srch = srch + 1
myRow = myRow + 1
Wend
Err_Execute:
MsgBox "An error occurred."
End Sub
子数据更改()
将myRow设置为整数
Dim srch作为整数
错误时转到错误执行
myRow=1
srch=1
而Sheet2.单元格(myRow,1).值“”
如果Sheet1.Range(“A”&CStr(srch)).Value=Sheet2.Cells(myRow,1.Value),则
表1.范围(“AP”和CStr(srch)).Value=“休斯顿”
如果结束
srch=srch+1
myRow=myRow+1
温德
执行错误:
MsgBox“发生错误。”
端接头
您的代码正在将A1
从Sheet1
与Sheet2
中的A1
进行比较。我想您需要将Sheet1
中的A1
与Sheet2
中的列a
进行比较。因此,您需要一个外部循环
下面是您的代码,经过修改后可以实现这一点。它还合并了Leviathan的注释,将Integer
更改为Long
,并在适当的位置插入Exit Sub
当Sheet2看起来像这样时
我在表1上得到这个结果
代码
Sub dataChange()
Dim myRow As Long, srch As Integer
On Error GoTo Err_Execute
myRow = 1
srch = 1
Do While Sheet1.Cells(srch, 1).VALUE <> ""
Do While Sheet2.Cells(myRow, 1).VALUE <> ""
If Sheet1.Cells(srch, 1).VALUE = Sheet2.Cells(myRow, 1).VALUE Then
Sheet1.Range("AP" & srch).VALUE = "HOUSTON"
Exit Do
End If
myRow = myRow + 1
Loop
myRow = 1
srch = srch + 1
Loop
Exit Sub
Err_Execute:
MsgBox "An error occurred."
End Sub
子数据更改()
Dim myRow为长,srch为整数
错误时转到错误执行
myRow=1
srch=1
Do While Sheet1.Cells(srch,1).VALUE“”
Do While Sheet2.单元格(myRow,1).值“”
如果Sheet1.Cells(srch,1).VALUE=Sheet2.Cells(myRow,1).VALUE,则
表1.范围(“AP”和srch).VALUE=“休斯顿”
退出Do
如果结束
myRow=myRow+1
环
myRow=1
srch=srch+1
环
出口接头
执行错误:
MsgBox“发生错误。”
端接头
您的代码正在将A1
从Sheet1
与Sheet2
中的A1
进行比较。我想您需要将Sheet1
中的A1
与Sheet2
中的列a
进行比较。因此,您需要一个外部循环
下面是您的代码,经过修改后可以实现这一点。它还合并了Leviathan的注释,将Integer
更改为Long
,并在适当的位置插入Exit Sub
当Sheet2看起来像这样时
我在表1上得到这个结果
代码
Sub dataChange()
Dim myRow As Long, srch As Integer
On Error GoTo Err_Execute
myRow = 1
srch = 1
Do While Sheet1.Cells(srch, 1).VALUE <> ""
Do While Sheet2.Cells(myRow, 1).VALUE <> ""
If Sheet1.Cells(srch, 1).VALUE = Sheet2.Cells(myRow, 1).VALUE Then
Sheet1.Range("AP" & srch).VALUE = "HOUSTON"
Exit Do
End If
myRow = myRow + 1
Loop
myRow = 1
srch = srch + 1
Loop
Exit Sub
Err_Execute:
MsgBox "An error occurred."
End Sub
子数据更改()
Dim myRow为长,srch为整数
错误时转到错误执行
myRow=1
srch=1
Do While Sheet1.Cells(srch,1).VALUE“”
Do While Sheet2.单元格(myRow,1).值“”
如果Sheet1.Cells(srch,1).VALUE=Sheet2.Cells(myRow,1).VALUE,则
表1.范围(“AP”和srch).VALUE=“休斯顿”
退出Do
如果结束
myRow=myRow+1
环
myRow=1
srch=srch+1
环
出口接头
执行错误:
MsgBox“发生错误。”
端接头
行是否匹配?另外,使用单元格(对我来说)更容易。我尝试了代码,它很有效。尽管在执行Err\u:
之前需要一个Exit Sub
,因此即使一切正常执行,也不会收到错误消息。您应该明确地将变量声明从Integer
更改为Long
。整数最多只能容纳32767个数字。使用这些来遍历1048576行是个坏主意。那么,既然一切都在运行,那么问题到底是什么呢?最好提供一个输入、预期输出和没有得到的结果的样本。我猜你需要一个嵌套的循环-srch是外部的,myRow是内部的。行匹配吗?另外,使用单元格(对我来说)更容易。我尝试了代码,它很有效。尽管在执行Err\u:
之前需要一个Exit Sub
,因此即使一切正常执行,也不会收到错误消息。您应该明确地将变量声明从Integer
更改为Long
。整数最多只能容纳32767个数字。使用这些来遍历1048576行是个坏主意。那么,既然一切都在运行,那么问题到底是什么呢?最好提供一个输入、预期输出和没有得到的结果的样本。我想你需要一个嵌套的循环——srch是外部的,myRow是内部的。