Excel & VBA---Brain Training


  • 01

Ctrl+F키..Find & Replace

이런 질문이 있었다
Ctrl+F키를 사용하여 작성된 시트의 내용을 고치는 일이 많은데 이것을
자동화하는 방법은?!
아래의 그림의 [문제만들기] 버튼을 크릭하면..



아래의 프로시져를 실행하여 쌤플데이타를 만들었다치고

Sub createDatas()
On Error Resume Next
Const TARGET_SHT As String = "문제"
Application.DisplayAlerts = False
Worksheets(TARGET_SHT).Delete
Application.DisplayAlerts = True
Dim iRow As Integer
Dim iChars As Integer
Dim iChr As Integer
Dim iChrNum As Integer

With Worksheets.Add
    .Name = TARGET_SHT
    For iRow = 1 To 1000
        iChrNum = Int(Rnd() * 6) + 3
        For iChr = 1 To iChrNum
            .Range("A" & iRow) = .Range("A" & iRow) & Chr(Int(Rnd() * 26) + 65)
        Next
    Next
End With
End Sub

이것을 그림의 어떤 시트의 어떤 내용을 찾아서
다른 값으로 바꾸는 것을 자동화하는 것..
할 일이 없으면 열심히 Ctrl+F키를 사용하면서 작업을 하겠지만
엑셀프로그래머로서는 그냥 보고 넘어가기 힘든 일..

우선 자동화작업을 하려면..
작업대상이라는 정보가 있어야 할 것이다
어떤 워크시트..
혹은 전체 통합문서..라는 정보가 있어야 할 것이고
또 어떤 값을 찾아서 어떤 값으로 바꾸기를 바라는지
찾을 값과 바꿀값이라는 최소한 3개의 정보는 필요할 것이다
이것을 사용자에게서 받아야 하는데
Ctrl+F키를 누르면 엑셀의 대화상자에서 그런 정보를 받고 있는 것을 알 것이다



역시 우리가 자동화를 해도 이 정보를 받아야 한다
어떤 방법으로 받던 받아야 한다
또한 추가정보도 필요할 것이다, 셀의 값의 전체에 해당하느냐
아니면 셀의 값의 부분에 해당하는냐?라는 정보도
우선 셀의 값의 일부를 수정한다고 치고 만들어 보자
옵션은 추가적인 것이니까..모든 것은 기본을 만들고 추가사항이
자꾸 보태지면서 소루션이 커지는 것이다

또한 어떤 값이 바꾸는데
어느 셀의 것이 바뀌었는지 알고 싶을수도 있을 것이다
Replace메소드를 사용한다면

rData.Replace what:=sFindWhat, replacement:=sChangeTo

한줄이면 된다..
찾아야할 값, 변경할 값 두개의 매개변수를 Replace메소드에 주면 된다

***[LOG-IN]***

싱겁게 찾아서 바꿔준다..
이제 어떤 것을 찾아서 처리했는지 색상을 칠해주어 보도록 하자
두번째 문제는
찾아서 바꾸는 것이 아니고 여러개의 지워버려야할 목록을 준비하고
검색대상에서 목록과 비교하여 지워버려야 할 경우를 해보자



1)여러개의 목록을 테이블에 입력하고 테이블에 이름을 붙이고
2)여러개의 값을 찾아서 지우다가 너무 자료가 많아서 중간에 취소하고 싶다
3)Replace 메소드가 아닌 다른 방법으로 지우는 내용을 확인하고 싶다

여러개를 순환하면서 작업을 하면서 중간에 중단을 하고 싶을 경우도 있을 것이다
순간,순간 값이 바뀌면서 사용자에게 확인 하는 메시지를 띄운다
이때 중단하고 싶다는 정보를 받고 싶을 경우..

Dim result As VBA.VbMsgBoxResult
For Each rX In rData.Cells
    For Each rY In rFindWhat.Cells
        If InStr(rX, rY) > 0 Then
            ....
            result = MsgBox(rY & "값이 현재셀에 있습니다, 지우시겠습니까", vbYesNoCancel)
            
            If result = vbYes Then
                ....
                ....
                iCheck=iCheck+1
            ElseIf result = vbCancel Then
                ....
                GoTo OUT
            End If
        End If
    Next
Next

OUT:
MsgBox iCheck & " 개를 찾아서 지웠습니다"

이렇게 하여 하나씩 확인해가면서 여러개의 찾아서 지우고자 하는 것을
비교하면 처리하면 좀더 발전된 소루션이 될 것이다

***[LOG-IN]***

  • 01