본문 바로가기

VBA/엑사남_기초방86

[기초방] VBA 100제 #13 [ 정규식으로 계산하기 ] 이번 문제는 숫자와 사칙계산 부호만을 이용하여 계산하는 문제이다. 숫자만 가져오는 구문은 like문처럼 [0-9] 이렇게 하거나 정규식 패턴은 \d 이렇게 하면 되는데, \d 는 1234 라는 숫자가 있으면 1만 선택이 된다. 여러자리의 숫자를 선택하려면 \d+ 이렇게 하면된다. 이 문제를 해결하기 위해서 본인이 사용한 패턴은 이렇다. .Pattern = "[^\d++-×÷]" 숫자가 아니고 사칙연산 기호가 아닌 모든것을 패턴으로 잡고 삭제하기 위함이다. 부정기호인 ^ 의 사용으로 선택된 패턴들이 반전되는것을 볼 수 있다. 우리가 사용하는 사칙연산 기호중 곱하기와 나누기는 컴퓨터가 이해하는 기호와는 다르기 때문에 변경을 해줘야 한다. If .test(rngX) Then str = Replace(.Repl.. 2023. 1. 15.
[기초방] VBA 100제 #12 [ Like구문 ] 보통 이러한 패턴문제는 Like 와 정규식으로 풀수 있다. https://www.youtube.com/watch?v=sHg8o_RUcag 엑사남님이 이미 잘 정리해서 유튜브에 올려놓으셨으니 기초방분들은 학습하기길 바란다. 이런 패턴의 문제는 준빠님이 올려주신 대로 패턴에 일치하는 값들을 하나씩 붙혀가며 최종적인 문자를 출력하면 된다. 본인은 이번에는 like 구문의 부정형인 ' ! ' 와 정규식의 부정형인 ' ^ ' 과 Replace 조합으로 풀어보려한다. 더보기 Option Explicit Sub 기초방_12_like() Dim rngAll As Range: Set rngAll = [a3:a7] Dim rngA As Range Dim rngX As Range: Set rngX = [c3] Dim str.. 2023. 1. 10.
[기초방] VBA 100제 #11 [ 영역과 조건에 따른 숫자채우기 ] 첫번째 문제는 For each 움직임을 이해하기 위한 문제이다. For each는 좌에서 우로 위에서 아래도 이동하게 된다. For each 를 성애자로서 우리방 모두가 for each를 쓰도록 이런 문제를 계속내도록 해야겠다...ㅋㅋㅋ For Each rngA In [c5:d14] cnt= cnt+1 rngA = cnt Next rngA 두번째 문제는 ㄱ 자 형태로 숫자가 내려오는 문제이다. 이것의 진행은 영역에서 ㄱ 자 형태를 만든 후 숫자가 채워지면 안쪽으로 ㄱ 자형태를 이동하면서 +1 씩 카운팅되는 숫자들을 출력하면 된다. Set rngQ = Intersect(Union(rngX.EntireRow, rngX.EntireColumn), rngAll) 이구문이 ㄱ 자 형태를 만드는 구문이다. 반복문을.. 2023. 1. 7.
[기초방] VBA 100제 #10 [ 데이터 영역 재설정하기 ] 데이터 영역을 랜덤화해서 재설정하는 구문이다. 보통 이러한 문제는 랜덤 난수를 추출하여 그것에 따라 정렬하여 재배치 하면 된다. 문제풀이는 이렇다. 1. 난수를 발생 2. 난수와 기존값을 조합하여 임시 영역에 추출 3. 정렬 4. 난수와 기존값 분리 5. 기존값을 새로운 위치에 추출 6. 난수와 기존값을 출력한 영역 삭제 더보기 Option Explicit Sub 기초방10_1() Dim bln As Boolean Dim rngall As Range Dim i& Application.ScreenUpdating = False For i = 1 To 2 '= 문제에 따른 영역 재 설정 If bln = False Then Set rngall = [c5:c14] Else Set rngall = [e21:k27].. 2023. 1. 6.