본문 바로가기

vba

(6)
자주 쓰는 VBA 패턴 (5) : 해더에서 원하는 값 찾아 열 번호로 반환 해더에서 원하는 값을 찾아 특정 값이 있는 열을 문자가 아닌 숫자 열 번호로 반환하는 코드입니다. Function MatchKeyValue(keyValue As Variant, headerRow As Range) As Long Dim cell As Range Dim i As Long For Each cell In headerRow.Cells If IsNumeric(keyValue) And IsNumeric(cell.Value) Then If CDbl(keyValue) = CDbl(cell.Value) Then MatchKeyValue = cell.Column Exit Function End If Else If CStr(keyValue) = CStr(cell.Value) Then MatchKeyValue ..
자주 쓰는 VBA 개체 : Range 개체(1) - Range 속성 Dim rng as Range Excel VBA 메크로를 만들 때 가장 중요한 개체 중 하나가 Range 개체입니다. 당연할 수 밖에 없는게, 엑셀의 계층 구조상 값이 입력되는 기본 단위가 셀(cell)이고, 이 셀들이 모인 개체가 Range이기 때문입니다. Range 개체와 Range 속성은 다른 개념이며 둘은 완전히 일치하는 것이 아닙니다. 'Range 개체'를 만들거나 접근하는 방식이 반드시 'Range' 속성만 있는 것은 아니기 때문입니다. Cells, Rows, Columns 같은 속성도 Range를 만듭니다. 그냥 지금 쉽게 Range 속성을 사용하면 Range 개체가 만들어진다는 정도만 알아 두셔도 됩니다. Range 개체니 속성이니 매서드니 하는 말들이 이해가 안되시는 수준의 분들은 그냥 ..
자주 쓰는 VBA 패턴 (4) : VBA로 index match 함수 구현하기 값을 매핑할때 대부분의 사람들은 보통 vlookup 함수를 사용하지만, 좀 더 엑셀을 잘 하는 사람들은 index-match라 불리는 합성함수를 더 자주 사용한다 ={INDEX(rng MATCH(lookupvalue, rng, 0))} . index match는 원리만 정확히 이해하면 다중조건, xlookup 등 폭넓게 활용 가능하다. index match나 vlookup 모두 Application.WorksheetFunction 매서드로 vba안에서 사용할 수 있다. 다만, 때때로 현업에서는 해당 매서드 없이 index match, vlookup과 같은 기능을 구현해야 될 경우가 종종 생긴다. (실무는 늘 제약사항이 존재한다) 아래의 코드는 WorksheetFunction 매서드 없이 vba에서 ind..
자주 쓰는 VBA 패턴 (3) - 찾고 있는 값의 열 번호를 알파벳으로 반환 VBA로 코드를 짜다 보면, C에 개체 대신 반드시 Range 개체를 사용하고 싶을 때가 있다. Range 개체는 열 번호를 엑셀의 알파벳 값으로 받기 때문에 ( )안의 값 을 하드 코딩하지 않고 변수로 처리하려면 Range (Var1 & Var2) 또는 Range (var1& var2 & ":" & var3 & var4)과 같은 식으로 처리해야 된다. 이때 아래의 코드가 도움이 될 것이다.Function FindColLetter(hdr_row As Integer, search_value As Variant) As String Dim search_rng As Range Dim found_cell As Range Dim col_letter As String Set search_rng = ActiveShee..
자주 쓰는 VBA 패턴 (2) - 마지막 행, 마지막 열 찾기 스프레드 시트라는 엑셀의 특성상 어떤 VBA 코드를 짜던 간에 꼭 쓰게 되는 구문입니다. (데이터분석용으로 사용한다면 더더욱) 마지막 행 찾기 dim last_row as integer last_row = Cells(Rows.Count, 1).End(xlUp).Row 1열(A열)의 마지막 행의 값을 last_row 변수에 정수형으로 반환 마지막 열 찾기 dim last_col as integer last_col = Cells(3, Columns.Count).End(xlLeft).Column ': 3행의 값이 들어있는 마지막 셀을 찾는다. 3행의 마지막 열의 값을 last_col 변수에 정수형으로 반환 1과 3에 각각 원하는 행, 열 번호를 입력하면 됩니다. 마지막 행 값을 찾을 때에는 열 번호를, 마지막..
자주 쓰는 VBA 패턴 (1) - 찾는 값이 배열 안에 있는지 확인 파이썬에서는 va in list 형태의 명령어로 특정 값이 리스트에 있는지 확인할 수 있다. 아래의 코드는 vba에는 파이썬과 같은 리스트 자료형 없다. 배열에서 va in list와 같은 형태의 명령을 사용하기 위해 만든 함수이다. Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean Dim i For i = LBound(arr) To UBound(arr) If arr(i) = stringToBeFound Then IsInArray = True Exit Function End If Next i IsInArray = False End Function