2015-02-06 4 views
4

찾기/바꾸기에 VBA를 사용하려고합니다. 목표는 찾기/바꾸기를 포함하는 모든 쌍을 포함하는 "Data_Pairs"시트를 반복하고 해당 쌍을 찾거나 바꾸는 것입니다. A 열에 만 통합 문서의 지정된 범위에 포함됩니다. "Data_Pairs"는 포함하지 않음). 어떤 이유 VBA 바꾸기가 열/시트 제한을 무시합니다.

, 모든 매칭 값에 관계없이 어떤의 열의 교체된다. 값도 인덱스가 정의 된 범위 밖에 시트로 대체된다.

도움을 주시면 감사하겠습니다. Data_Pairs A1 = A와 Data_Pairs 지하 1 = 1, 전체 통합 문서 1 매 값을 교체 할 경우 :

Sub Replace_Names() 

Dim row As Integer 
Dim row2 As Integer 
Dim sheet As Integer 
Dim findThisValue As String 
Dim replaceWithThisValue As String 

For row = 1 To 10 
    Worksheets("Data_Pairs").Activate 
    findThisValue = Cells(row, "A").Value 
    replaceWithThisValue = Cells(row, "B").Value 
    For sheet = 2 To 10 
    Worksheets(sheet).Columns("A").Replace What:= findThisValue, Replacement:=replaceWithThisValue  
    Next sheet 
Next row 
End Sub 

문제의 구체적인 예제를 제공하려면 :

나는 다음과 같은 코드를 사용하고 있습니다 A.

+2

난 그냥이를 실행하고 단지 나를 위해 COLUMNA의 값을 대체는, 엑셀 2013 – chancea

+2

이 코드의 그것은 3에 대한-3 만들자 엑셀 2007 – Greg

+1

에 나를 위해 제대로 일 :이 작업 표시이를 코드는 Excel 2010에서 올바르게 작동합니다. –

답변

5

내가 관찰이 위 그렉과 chancea의 의견을 울리는, 엑셀 2010 년으로 예상 작동합니다.

그러나, 나는 또한 당신이있는 경우에 여기에서 논의 된 바와 같이 이전에, (예를 들어 당신이 작업을 대체/일부 수동 찾기를하고 있었다) 찾기 대화 상자를 연 후 관찰 불일치가 발생, 통합 문서의 범위를 변경 관찰 :

http://www.ozgrid.com/forum/showthread.php?t=118754

이것은 해결되지 않았기 때문에 감시가 될 수 있습니다. Replace 대화 상자에서 워크 북 대 워크 시트를 지정할 수 있지만 Replace 메서드 (documentation)에 전달할 수있는 인수는 없습니다.

Ozgrid 스레드에서 해킹을 구현하십시오. 어떤 이유로 든 .Find 메서드를 실행하면 다시 설정되는 것처럼 보입니다.

Sub Replace_Names() 

Dim row As Integer 
Dim row2 As Integer 
Dim sheet As Integer 
Dim findThisValue As String 
Dim replaceWithThisValue As String 
Dim rng As Range 

For row = 1 To 10 
    Worksheets("Data_Pairs").Activate 
    findThisValue = Cells(row, "A").Value 
    replaceWithThisValue = Cells(row, "B").Value 
    For sheet = 2 To 3 
    Set rng = Worksheets(sheet).Range("A:A") 
    rng.Find ("*") '### HACK 

    rng.Replace What:=findThisValue, Replacement:=replaceWithThisValue 
    Next sheet 
Next row 
End Sub 
+1

이것은 정확하게 문제가되었습니다. 수동으로 전체 통합 문서를 범위로 바꾸는 CTRL + H를 일부 수행했습니다. 정말 고맙습니다! – LCG

+1

건배. VBA에서 계속 작업하면서 Select/Activate 메서드를 사용하지 않으려면 다른 대답과 마찬가지로 현명 할 것입니다. 다음은 주제에 대한 좋은 입문서입니다. http : // stackoverflow.com/questions/10714251/how-to-avoid-using-excel-vba-macros –

+1

좋은 게시글 David. – brettdj

1

하면 For ... Next 루프 내부 Worksheets("Data_Pairs").Activate 있습니다. 이것은 명령이 9 배 더 커야 함을 나타냅니다. 기본 부모 인 을 제공하려면 .Activate에 답장하지 않는 것이 좋습니다.

Sub Replace_Names() 
    Dim rw As long, ws As long 
    Dim findThis As String, replaceWith As String 

    with Worksheets(1) 
     For rw = 1 To 10 
     findThis = .Cells(rw , "A").Value 
     replaceWith = .Cells(rw , "B").Value 
     For ws = 2 To 10 ' or sheets.count ? 
      with Worksheets(ws) 
      .Columns("A").Replace What:= findThis, Replacement:=replaceWith 
      end with 
     Next ws 
     Next rw 
    end with 

End Sub 

SelectActicate에서 떠나기에 대한 자세한 내용은 How to avoid using Select in Excel VBA macros를 참조하십시오.

+0

감사합니다. 많은 의미가 있습니다. – LCG

관련 문제