본문 바로가기

VBA/엑사남_기초방86

[기초방] VBA 100제 #75 [ 필터링 구현하기 ] 이러한 문제를 VBA로 풀려면 이벤트 + 고급필터로 풀면된다. 앞서 이러한 문제는 많이 했기 때문에 찾아보면 이해가 금방갈 것이다. 이벤트 구간이다. 이벤트의 영역을 구한 후 이벤트 영역에 TARGET이 들어올때만 작동하게 된다. 출력 영역을 초기화 하고, 입력된 이벤트구간에서 입력을 마치면 엔터를 치게 되면 다음줄로 영역이 내려가는데 TARGET.ACTIVATE를 하게 되면 트릭으로 다음줄로 내려갔다가 다시 복귀를 하게 되어 마치 제자리에 있는것처럼 보이게 된다. 이렇게 불러진 기초방75코드를 보자 바로 고급필터 조건을 정한 후, 고급필터를 실행해도 되지만 그럴경우 고급필터의 내용이 아무것도 없을 때는 출력이 되지 않는다. 더보기 Option Explicit Sub 기초방75() Dim rngAll A.. 2023. 10. 16.
[기초방] VBA 100제 #74 [ 품목의 계절별 단가 구하기 ] 더보기 Option Explicit Sub 기초방74() Dim rngAll As Range: Set rngAll = [a6:a31] Dim rngA As Range Dim rngX As Range For Each rngA In rngAll Set rngX = [h5].Offset([h5:h9].Find(rngA).Row - 5, [h5:l5].Find(rngA(1, 2)).Column - 8) '= 단가표의 품목에서 row값을 겨울에서 column값을 가져와 rngX 즉 겨절별 품목단가의 위치를 rngX로 설정 rngA(1, 3) = rngX Next rngA End Sub 보통 이러한 문제는 엑셀에서 많이 나오는 문제이다. 해법은 [h5]를 기준으로 행방향으로 품목 열을 / [h5] 기준으로 열방향의.. 2023. 10. 13.
[기초방 [기초방] VBA 100제 #73 [ 문자열에서 숫자만 재정렬하기] 더보기 Option Explicit Sub 기초방73() Dim str$: str = [b4] '= 문자열 Dim Reg As Object: Set Reg = CreateObject("vbscript.regexp") '= 정규식 선언 Dim Mat As Object '= 일치하는 값 Dim V(1 To 65536, 1 To 1), rowV, i&, vtemp With Reg .Pattern = "\d+" '= 1자리 이상 숫자 .Global = True End With Set Mat = Reg.Execute(str) '= 숫자들만 정규식으로 가져와라 rowV = Application.Sequence(Mat.Count) For i = 1 To Mat.Count V(i, 1) = Mat(i - 1) '= 정.. 2023. 10. 12.
[기초방 [기초방] VBA 100제 #72 [ 조건에 맞는 숫자 반환 및 정렬 ] 영역을 순환하면서 50보다 큰 수를 vtemp 배열에 담아라 or Each rngA In rngAll If rngA > 50 And TypeName(Application.Match(rngA, vtemp, 0)) = "Error" Then i = i + 1 vtemp(i, 1) = rngA End If Next rngA 이렇게 하면 vtemp 에 50보다 큰 값들이 모두 쌓이게 되고 / i 변수에는 실제 숫자가 몇개 담겨 있는지 그 갯수가 나온다. 자 여기서 가장 핵심구문이다. 반환되는 영역이 11 x 4 이지 여기에 정확하게 50보다 큰수가 몇개 들어갈지는 모른다. 구해보면 11 x 4 = 44개중 실제로 값은 42개만 들어가게 된다. 그렇다면 vtemp(43,1) 과 vtemp(44,1) 의 값은 비어.. 2023. 10. 12.