본문 바로가기

엑사남172

[기초방] VBA 100제 #19 [ 이름별 나열하기 ] 더보기 Option Explicit Sub 기초19() Dim Reg As Object: Set Reg = CreateObject("Vbscript.regexp") Dim rngX As Range: Set rngX = [c5] Application.ScreenUpdating = False Do Until IsEmpty(rngX) rngX.Copy rngX.Next '= 출연자의 이름을 D열에 복사 With Reg .Pattern = "\(\d+\)" '= (숫자) 를 패턴으로 .Global = True If .test(rngX.Next) Then rngX.Next = .Replace(rngX.Next, "") '= 일치패턴을 없애라 Application.DisplayAlerts = False '= 경고 .. 2023. 1. 18.
[기초방] VBA 100제 #18 [ 이름별 카테고리 나열하기 ] 왼쪽에 있는 표를 이름별로 나열하는 구문이다. 이문제는 이름과 이름과 하위분류로 이루어져있다. 이름이 나오면 한행을 이동후 E열에 이름부터 다시 출력을 하여야 한다. If InStr(rngA, " ") = 0 Then Set rngX = Cells(rngX.Row + 1, "e") rngX = Split(rngA, " ")(0) 문자 조합이 이름은 이름만 있고 이름과 하위분류로 구성된것은 이름 + [공백 ] + 하위분류로 되어 있기 때문에 Instr로 공백 유무를 따지면 이게 이름으로 구성되어 있는지 이름과 하위분류의 조합인지를 알 수 있다. 따라서 위의 구문은 이름으로만 구성이 되었다면 한행을 내려와서 E열에 이름을 출력하라는 구문임을 알 수 있다. 내말 몬말인지 알지?? 출력은 [e5] 부터 출력인데.. 2023. 1. 17.
[기초방] VBA 100제 #17 [ CHR + ASC ] 이번 구문은 위아래 중복일때 뒤에있는 아스키코드값을 증가시키면서 알파벳을 변화시키는 구문이다. 이 구문이 정렬이 되었다는 가정하에서는 Countif로 뒤에있는 문자를 증가시키면서 해결해 나가면 된다. 하지만 36행을 보면 순서없이 코드하나가 빠져있다. 따라서 이번 문제는 Countif는 답이 아니다. 순차적으로 코드를 진행하면서 이전셀과 비교하면서 만일 같다면 ASC 코드를 증가시키면서 코드를 증가시키면 된다. ElseIf rngX = rngX(0, 1) Then i = i + 1 Str = Left(rngX, Len(rngX) - 1) rngX.Next = Str & Chr(Asc(Right(rngX, 1)) + i) Else Asc(A)는 65를 반환하고 Chr(65 + 1) 은 B 를 반환한다. 전.. 2023. 1. 17.
[심화방] VBA_심화_100제 #6 [ 알림창 클릭 ] 크롤링을 하다보면 웹을 제어해야 하는 경우가 많다. 로그인상황이나 알림창 클릭 또는 입력을 하거나 선택을 해야 하는 여러 행동을 하기 위해서는 결국 자바스크립트의 힘을 빌려와야 한다. 개똥도 약에 쓸려면 없다고 팝업창 뜨는 사이트들이 많이 없어서 임의로 웹상에 알림창을 자바스크립트를 통해서 띄우고 3초후 알림창을 닫는 구문을 만들어보았다. 실무에서 많이 활용하길 바란다. 콘솔창에 alert로 작성하면 이렇게 웹상에 알림창을 띄울 수 있다. 이걸 VBA로 가져오면 Sel.ExecuteScript "alert('Welcome Naver_World')" 이걸 클릭하는 코드는 Sel.SwitchToAlert.Accept 이렇다 Switch 문은 다른 윈도우나 프레임 팝업창 탭 등 서로의 전환을 할때 많이 사용하.. 2023. 1. 17.