在excel / csv sheet1中搜索从sheet2获取的字符串,然后更改同一行中的值

时间:2016-07-01 23:47:37

标签: excel vba excel-vba macros excel-2016

情况是我有一个列表(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上的列,而无需来回切换并在每个单元格上手动运行它。如果它没有找到它正在搜索的名称,我应该错误地建立错误。

感谢您的帮助!

1 个答案:

答案 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