情况是我有一个列表(excel)。需要浏览该列表并将每个名称放在一列中。然后搜索该名称是另一个文件(csv)。一旦找到它,我必须在与找到的名称相同的行中更改一个值,但在一列中向右几个单元格。
Sub Macro1()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+q
'
Dim myRange As Range
ActiveCell.Select
Selection.Copy
Set myRange = Selection
Sheets("identities").Select
ActiveWorkbook.ActiveSheet.Unprotect
Cells.Find(What:=myRange, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 13).Range("A1").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "TRUE"
ActiveCell.Offset(1, -13).Range("A1").Select
End Sub
上面的代码可以帮助自动化这个过程。我试图让它达到这一点,它可以循环通过Sheet1上的列,而无需来回切换并在每个单元格上手动运行它。如果它没有找到它正在搜索的名称,我应该错误地建立错误。
感谢您的帮助!
答案 0 :(得分:0)
您需要调整获得原始值的范围以反映您的范围。目前我刚使用Range("A1:A10")
,但您需要停止使用select
。它会破坏代码并使其更具可读性。
尝试此操作并修改范围以适合您的范围。
Dim rng As Range
Dim r As Range
For Each r In Sheets("identities").Range("A1:A10")
ActiveWorkbook.ActiveSheet.Unprotect
Set rng = Cells.Find(What:=r, After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False)
rng = Sheets("identities").Offset(, 13)
Next r
在不使用select的情况下读取此stackoverflow线程。 How to avoid using Select in Excel VBA macros