我无法使VBA Excel宏停在行的末尾
我有一行数据,每月更改一次,但它只更改90个单元格中的大约30个,每个月它们都不同,因此我尝试制作一个宏来自动执行 宏查看单元格A2-B98并搜索与H2-I98的值匹配的信息,如果H中的值匹配,则它复制I中的值并替换B中的值,但它不会在行的末尾停止,即在第98行,它会内循环。所以我希望有人能发现我的错误,这样它就不会永远循环。谢谢我无法使VBA Excel宏停在行的末尾,excel,vba,Excel,Vba,我有一行数据,每月更改一次,但它只更改90个单元格中的大约30个,每个月它们都不同,因此我尝试制作一个宏来自动执行 宏查看单元格A2-B98并搜索与H2-I98的值匹配的信息,如果H中的值匹配,则它复制I中的值并替换B中的值,但它不会在行的末尾停止,即在第98行,它会内循环。所以我希望有人能发现我的错误,这样它就不会永远循环。谢谢 Sub Update_Holiday() Dim Search As String Dim Replacement As String Dim rngTmp As
Sub Update_Holiday()
Dim Search As String
Dim Replacement As String
Dim rngTmp As Range
Dim rngSearch As Range
LastInputRow = Range("A65536").End(xlUp).Row
Set rngSearch = Worksheets("Holiday").Range(Cells(2, 1), Cells(98, 2))
For k = 2 to 98
Search = Worksheets("Holiday").Cells(k, 8)
Replacement = Worksheets("Holiday").Cells(k, 9)
With rngSearch
Set rngTmp = .Find(Search, LookIn:=xlValues)
If rngTmp Is Nothing Then
GoTo Go_to_next_input_row:
Else
Worksheets("Holiday").Cells(rngTmp.Row, rngTmp.Column + 1).Value = Replacement
End If
End With
Go_to_next_input_row:
Next K
End Sub
如果我正确理解您的问题:对于H2:H98中的每个单元格,您正在寻找A2:A98中的匹配项。它不一定在同一排。如果在a列中找到匹配项,则需要从B列中获取值,并将其放入I列中,与我们刚才查找的搜索值位于同一行。在这种情况下,此代码将起作用:
Option Explicit
Sub Test()
Dim ws As Worksheet
Dim srcRng As Range '' Source range
Dim schRng As Range '' Search range
Dim c As Range
Dim search As Range
Set ws = ThisWorkbook.Sheets(1)
Set srcRng = ws.Range("H2:H98")
Set schRng = ws.Range("A2:A98")
For Each c In srcRng '' Iterate through your source range
Set search = schRng.Find(c.Value, LookIn:=xlValues, SearchDirection:=xlNext) '' Find the value from column H in column A
If Not search Is Nothing Then
c.Offset(, 1).Copy search.Offset(, 1) '' Get the value from column B, from the same row as the value it found in column A
'' Then paste that value in column I, on the same row as the value we searched for from column H
End If
Next c
GoTo语句通常是非常非常糟糕的做法,但并不总是如此。尤其是在这种情况下。您不需要它们,它只会让您的代码变得复杂。似乎您还没有完成为问题添加上下文。问题是什么?这里的问题是什么?从您的代码中不清楚哪一页上有什么。我从更新中获得的数据没有任何顺序或不完整。他们会在一封电子邮件中发送我6次更新,然后在另一封邮件中发送6次,这就是我使用查找功能的原因。但我确实使用了For k=2到98,它确实大大加快了宏的速度。但它仍然是内循环的。它不允许我在注释中发布代码,但它循环到哪里如果rngTmp不存在,则转到下一个输入行:然后转到下一个K,然后继续循环。我能够将我的原始代码修改为我用你的inputOk更改的代码,所以让我了解你在尝试做什么。对于H列中的每个值,您希望查看a列中的任何位置是否存在匹配项。如果在a列中找到匹配项,它将从该行的B列中获取值,并将其放在I列中与您刚才从H列中搜索的值相同的行中。是否正确?请关闭,并对混淆表示抱歉。我很难输入代码/一个标准化示例。对于H列中的每个值,它会查看a列中的任何位置是否存在匹配项。如果在列a中找到匹配项,它将从I中获取值,并将其复制到行B上。