본문 바로가기

application.Match5

[기초방] VBA 100제 #43 [ 조합 정렬하기 ] 기초 43의 나열된 문자열에서 숫자들을 하나식 가져와서 고유값과 그 중복된 값을 구하는 구문이다. 이런 구문의 문제는 딕셔너리나 어레이리스트 같은 오브젝트 개체로 구하는 것이 더 간단하다.. 하지만 우린 지금 셀기반 기초코드로 문제를 풀어야 하기 때문에 applicaton.match와 typename 으로 풀어보도록 하자 mid(rngX, i, 1) 로 구해진 숫자는 TypeName이 String으로 도출됨으로 Clng로 String 타입을 Long 타입으로 변경해줘야 한다. If TypeName(Application.Match(CLng(Mid(rngX, i, 1)), [e6:e20], 0)) = "Error" Then Cells(Rows.Count, "e").End(3)(2) = Mid(rngX, i,.. 2023. 3. 16.
[VBA] GetObject + Application.Match (feat. Vlookup 대체) 보통 이러한 작업을 하기 위해서는 출력할 영역과 DB영역이 동일한 워크북에 있으면서 Vlookup으로 끌고오는 작업을 하게 된다. 그렇게 되면 수식을 모두 걸어놔야 되고 그 수식을 본인 아닌 누군가가 수정을 할 수 없도록 Undo 코드를 추가로 작성하여야 한다. 오늘 할 코드는 [성명] 을 기준으로 각 데이터를 긁어오는 Change이벤트를 통해서 Vlookup과 같은 작업을 해보도록 하겠다. 물론 여기서도 Vlookup을 이용해도 되지만 DB에 카드번호가 성명보다 왼쪽에 있기 때문에 정상적으로 값을 가져오지 못할 것이다. 해서 Application.match로 행번호를 추출한 후 Cells로 해당값들을 끌고 올 수 있도록 하겠다. 엑셀을 조금만 할 수 있는 분들은 Match함수의 사용법과 같은 방법이기 .. 2022. 5. 18.
[VBA] 등급별 랜덤 순번과 전체순번을 구하라 등급은 A,B,C,D,E 총 5 등급이 있다. 등급을 나누는 조건은 또 있는데 5등급을 임의로 나누어서 셀에 뿌려 놓았다. 영역 [F1:G6]는 전체 영역에서 각 등급의 구성갯수를 엑셀의 Countif를 통해서 구하였다. 랜덤값을 구해야 함으로 Application.Randbetween(1 to 마지막값)을 구해야 한다. 각 등급별로 마지막값이 다르므로 전체영역을 순환하면서 등급을 확인 후 해당 등급의 구성값을 끌어와서 랜덤값을 도출하여야 한다. 도출된 값이 기존에 있던 값인지 결과배열(임시배열)에서 찾아본 후 값이 정상적으로 도출이 된다면 값이 중복 되었다는 것이고 값이 "Error"로 도출이 된다면 중복이 되지 않았다는 뜻이므로 셀에 출력 후 다음을 위해 중복 되지 않은 값을 배열에 담아주는 방식으로.. 2022. 4. 12.
[VBA] ArrayList 로 배열 고유값과 중복 횟수 구하기 https://1stminokingdom.tistory.com/84 [VBA] 배열을 정렬해라(feat. 버블정렬) https://1stminokingdom.tistory.com/83 [VBA] 배열내 중복된 값들을 도출하고 중복값을 구해라 배열 또는 셀의 영역 데이터 중 고유값을 구하고 중복된 값을 구하는 것은 보통 딕셔너리로 구한다. 또는 어레 1stminokingdom.tistory.com 이전 글에는 배열의 고유값을 구한 뒤에 버블정렬을 통한 배열의 정렬 방법을 알아보았다. 버블정렬은 글에서도 서술했듯이 쉽지만 비효율적인 코드이다. 단적으로 정렬을 위해 고유값끼리의 비교를 하기 위해 For문을 순환하게 되는데 For문이 다중 포문이기 때문에 처리 속도가 현저히 떨어진다. 본 코드는 ArrayLis.. 2022. 4. 8.