반응형

오늘은 간단한 VBA 코드를 하나 소개해 드릴까 합니다.

프로그래밍을 하다보면 16진수를 10진수로 바꾸거나 10진수를 16진수로 바꾸어야 하는 경우가 종종 있습니다.

읭? 16 진수?

라고 하실수도 있겠지만 막상 개발을 하다 보면 16진수가 쓰이는 경우를 생각보다 자주 만나게 됩니다. 

대표적을 RGB 컬러 값을 HTML 에서 사용하는 #FFEACB 이런 값으로 변경하는 작업이 있겠습니다. 또는 반대로 0 ~ FF 가지 255개의 숫자가 16진수로 구성되어 있는 값을 0~255인 자연수로 변경을 해야 하는 경우가 있을 수도 있고요. 16진수는 1개의 자릿수에서 0~15 까지의 값을 표현할 수 있기 때문에 10진수에 비하여 간단한 텍스트로 더 큰 숫자를 표현할 수 있다는 장점도 있습니다.

자 쓸데 없는 말이 길었네요.

VBA를 이용해서 숫자의 형을 변환하는 여러가지 방법이 있지만 오늘 소개해드릴 방법은 그중에서도 단연 쉽고 간단한 방법입니다.

바로 worksheet의 함수를 이용하는 방법인데요. 엑셀 상단에 수식을 입력할 수 있는 칸이 있자나요? 여기서 사용되는 함수가 바로 worksheet function 입니다. 

worksheet function 중에 DEC2HEX() 와 HEX2DEC()  가 바로 오늘의 주인공 입니다.

함수 명칭만 봐도 딱 감이 오시죠?

사용하는 방법은 아래와 같습니다.

먼저 위와 같이 엑셀에 16진수 값이 들어있는 셀이 있다고 가정을 하고요.

vba 에디터를 열어 아래와 같이 코드를 작성해봅니다.

Sub changeNumber()

    Dim rngA As Range
    Set rngA = [A1]
    
    rngA.Offset(0, 1).Value = WorksheetFunction.Hex2Dec(rngA.Value)
    rngA.Offset(0, 2).Value = WorksheetFunction.Dec2Hex(rngA.Offset(0, 1).Value)

End Sub

자 A1 셀에 있는 값을 바로 우측 옆 칸에 10진수로 바꾸는 함수를 적용하여 값을 넣어 줍니다.

그다음 B1 에 위에서 자동으로 입력된 값을 다시 16진수로 옆칸에 자동으로 입력해주는 코드 입니다.

실행하면요

요렇게 B1 에는 10진수로, 다시 C1 에는 16진수로 값이 변경된 것을 볼 수 있죠?

worksheetFunction 에는 물론 엑셀에서 사용할 수 있는 모든 함수를 지원해 주니까 vba 작성중에도 가져다가 사용할 만한 함수가 많지만 오늘 포스트의 주제에 맞게 숫자의 형 변환 관점에서만 보자면 아래와 같은 여러 함수들이 지원됩니다.

물론 Hex 로 부터 출발 하는 경우에도 마찬가지 입니다.

문장이 조금 길어 보여서 어렵거나 복잡하게 생각될 수도 있기는한데 막상 사용해보면 생각보다 단순 합니다. 사용하는데 따로 알아두어야 할 규칙 같은것도 없어서 코딩하는 시간도 많이 절약되는 방식이라 할 수 있겠습니다.

 

만약 아래와 같이 셀에 html 색상 값이 들어있는 경우 

vba를 이용하여 해당 색상으로 셀의 배경 색상을 자동으로 칠해 줄 수 있습니다.

Sub changeNumber()

    Dim rngA As Range
    Set rngA = [A1]
    
    Dim clrR As Integer
    Dim clrG As Integer
    Dim clrB As Integer
    
    clrR = WorksheetFunction.Hex2Dec(Mid(rngA.Value, 2, 2))
    clrG = WorksheetFunction.Hex2Dec(Mid(rngA.Value, 4, 2))
    clrB = WorksheetFunction.Hex2Dec(Mid(rngA.Value, 6, 2))
    
    rngA.Interior.Color = RGB(clrR, clrG, clrB)
    

End Sub

간단하죠? 위에서 소개해 드린 worksheetFunction을 이용하여 2자리씩 잘라낸 16진수를 10진수로 담은뒤에 셀의 배경 색상으로 지정하는 것이죠.

글자를 잘라내는 건 2019.08.12 - [DEV/VBA] - [VBA] 문자열 가지고 놀기 참고하세요~

스크립트를 실행하면 어떻게 될까요?

 

요렇게 html 형식의 색상 값으로 셀의 색상이 지정 됩니다.

뭐 한두칸이야 얼마든지 수작업으로도 적용할수 있기는 합니다만 이런 값이 수천개가 있는데 모두 엑셀 시트에서 지정된 색상으로 보여지기를 원한다면 vba 가 반드시 필요하겠죠?

 

그럼 이만 오늘의 포스팅을 마칩니다.

2022.06.16 - [DEV/VBA] - [VBA] 선택한 셀의 이미지 파일 이미지 뷰어로 열기

 

[VBA] 선택한 셀의 이미지 파일 이미지 뷰어로 열기

오늘 소개해 드릴 내용은 엑셀 시트에 이미지 파일명과 경로가 있는 상태에서 선택한 이미지만 뷰어로 바로 확인하는 방법 입니다. 이미지가 수백개 들어있는 엑셀 시트에 이미지를 모두 붙여

diy-dev-design.tistory.com

2020.09.04 - [DEV/VBA] - [vba] 엑셀 이미지 리스트로 일괄 다운로드 받기

2020.06.22 - [DEV/VBA] - [vba] 초등학교 연산 자동 문제집 - 곱셈 추가

2019.08.12 - [DEV/VBA] - [VBA] 문자열 가지고 놀기

 

[VBA] 문자열 가지고 놀기

안녕하세요. 이번 글에서는 VBA 에서 문자열을 가지고 무엇인가를 하는 것을 알아보겠습니다. 프로그래밍을 하다 보면 조건을 가지고 어떤 액션을 해야 하는 결우가 무척 많은데요. 그중에 대표

diy-dev-design.tistory.com

2020.01.30 - [분류 전체보기] - [vba] 셀 속성 조정하기 (넓이, 높이, 숨기기, 테두리 등)

 

[vba] 셀 속성 조정하기 (넓이, 높이, 숨기기, 테두리 등)

이번 포스트에서는 vba 를 이용하여 셀의 속성을 조정하는 방법을 설명 드리겠습니다. 엑셀은 단순한 표의 형식을 취하고 있지만 셀의 간격이나 테두리 등의 속성을 자유롭게 조정할 수 있어 다

diy-dev-design.tistory.com

2019.08.30 - [DEV/VBA] - [VBA]RGB 색상 값이 들어있는 셀에 셀 색상 지정하기

 

반응형

+ Recent posts