2025년 5월 3일 토요일

돈 숫자 단위 변형 Excel 함수 (미국 1000단위, 한국 10000단위, 단위 접미사 삽입)

큰 수를 콤마comma 수를 세어 미국 단위, 한국 단위로 읽는 건 힘들다. 그래서 그거 해 주는 함수 만든 거다.

인공 지능과 대화하면서 만든 코드이다. 인공 지능 정말 신기하다. 문법 오류도 아주 쉽게 잡고, 조금만 아이디어를 주면 바로 알아 듣고 고친다. 이러면 머리 굳은 노인 프로그래머들도 코딩하겠는데? 실력 없는 젊은 애들 직장에서 정말 잘리겠다.

Excel VBA 자료형에 따라 숫자의 정밀도가 차이가 나기 때문에, 들어 온 숫자를 정수 문자열로 바꾼 후에 1000단위 3개 문자, 10000단위 4개 문자로 구분해서 처리 하는 방식이다. 이렇게 하면 정밀도와 관계 없이 가장 큰 수도 처리할 수 있다. 아무리 큰 수를 넣어도 Excel에서 표현 가능한 크기의 숫자로 바꾸기 때문에 낮은 자리의 숫자들은 잘린다.

사람이 입력한 큰 수 → Excel 자료형에 맞게 잘림 → 숫자 문자열 변형 → 단위 변형


1. 미국식 단위 표현


단위 명칭 발음 단위 미국 (3승 천단위) 십승 천승 동양단위
thousand싸우전드1,00031
million밀리언1,000,00062100만
billion빌리언1,000,000,0009310억
trillion트릴리언1,000,000,000,0001241조
quadrillion쿼드릴리언1,000,000,000,000,0001551000조
quintillion퀸틸리언1,000,000,000,000,000,000186100경
sextillion섹스틸리언1,000,000,000,000,000,000,00021710해
septillion셉틸리언1,000,000,000,000,000,000,000,0002481자
octillion옥틸리언1,000,000,000,000,000,000,000,000,0002791000자
nonillion노우닐리언1,000,000,000,000,000,000,000,000,000,0003010100경
decillion디실리언1,000,000,000,000,000,000,000,000,000,000,00033111구

유럽의 영/프/독은 같은 단위 명칭이라도 숫자 단위가 다르다. 골 때린 애들이네...
미국은 3승 단위로 나가는데, 유럽은 6승 단위로 나간다. 이것도 나라에 따라 또 다름.

접미사 -illion는 라틴어 접미사이다. 앞의 mi-, bi-, tri- quadr- 접두사는 1, 2, 3, 4
원래 mi-는 1천이란 의미이다. 그런데 영어에선 thousand가 1천이라 1천의 1천? (^^)"

Excel에선 정수 29자리 또는 소수점 이하 포함 28~29자리까지 정확하게 표현 가능
그러니까 옥틸리언까지 표현 가능하다.

2. 동양식 단위 표현


한국 중국 일본 단위 동양단위 (4승 만단위) 십승 만승
일 一壹一壹 yī一 いち100
십 十拾十拾 shí十 じゅう1010.25
백 百伯陌百伯陌 bǎi百 ひゃく10020.50
천 千仟阡千仟阡 qiān千 せん100030.75
만 萬万万萬 wàn万 まん1'000041
억 億亿億 yì億 おく1'0000'000082
조 兆兆 zhào兆 ちょう1'0000'0000'0000123
경 京京 jīng京 けい1'0000'0000'0000'0000164
해 垓垓 gāi垓 がい1'0000'0000'0000'0000'0000205
자 秭시枾秭 zǐ𥝱 じょ / 秭 し1'0000'0000'0000'0000'0000'0000246
양 穰壤穣 ráng穣 じょう1'0000'0000'0000'0000'0000'0000'0000287
구 溝沟 gōu溝 こう1'0000'0000'0000'0000'0000'0000'0000'0000328
간 澗涧 jiàn澗 かん1'0000'0000'0000'0000'0000'0000'0000'0000'0000369
정 正正 zhèng正 せい1'0000'0000'0000'0000'0000'0000'0000'0000'0000'00004010
재 載载 zài載 さい1'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'00004411
극 極极 jí極 ごく1'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'0000'00004812

두 글자 이상 단위 표시는 불교 용어라서 쓸 일 없을 것이다. 예) 무량수 = 10⁶⁸ or 10¹²⁸ 

Excel에선 정수 29자리 또는 소수점 이하 포함 28~29자리까지 정확하게 표현 가능하니
양까지 표현 가능하다.

위의 표만 가지고는 유럽, 미국, 동양 단위로 제대로 변환 해서 읽을 수 없으니, 아래 표를 출력해서 들고 다니며 이용한다. 아니면 이미지로 스마트폰에 다운 받아 가지고 다닌다.


  1. 한국에선 0이 있으면 숫자와 단위까지 생략하여 읽는다. 예) 1004 = 천사
  2. 한국에선 첫 숫자가 1이면 숫자 발음 "일"은 생략한다. 예) 1004 = 천사, 10004 = 만사
  3. 앞에 추가 숫자를 못 붙이도록 $₩€ 등의 기호를 붙인다. 예) ₩1004 = ₩천사
  4. 끝에 추가 숫자를 못 붙이도록 단위(원=엔=위안)를 붙인다. 예) ₩1004원 = ₩천사원
  5. 인도 아라비아 숫자 1↔4, 3↔8 왜곡 가능하니 한글 발음으로 적는 게 좋을까?
  6. 한글이라 하더라도 일↔이, 삼↔사 왜곡 가능하니 한자를 섞을까?
  7. 한자라 하더라도 一 ↔ 二 ↔ 三, 六 ↔ 八, 七 ↔ 十 ↔ 九 왜곡 가능하니 차라리... 


다음 함수는 숫자를 넣어 주면 1천 단위로 끊어서 미국 단위를 한글 한 글자로 표시한다.

미국단위표시(123456789012345678901234567890,2) = 1.23456789012346E+29
사람이 입력한 숫자를 Excel에서 표현 가능한 숫자로 변형한 내용이다.

미국단위표시(123456789012345678901234567890,1) = 
입력 : 123456789012345678901234567890
변형 : 123456789012346000000000000000
30자리 정수 문자열로 바꾼 결과이다.

미국단위표시(123456789012345678901234567890,0) = 
구분 : 123,456,789,012,346,000,000,000,000,000
단위 : 123옥456셉789섹12퀸346쿼
미국 단위 발음을 한글 한 글자로 표시하여 삽입한 것이다.


Function 미국단위표시(ByVal 수 As Variant, ByVal 옵션 As Integer) As String
    Dim 정수문자열 As String
    정수문자열 = Format(수, "0")  ' 지수 표현을 정수 문자열로 변환

    Dim 단위문자 As String: 단위문자 = " 싸밀빌트쿼퀸섹셉옥논데"
    Dim 길이 As Long: 길이 = Len(정수문자열)
    Dim 결과 As String: 결과 = ""
    Dim i As Long, 블럭 As String
    Dim 단위인덱스 As Long: 단위인덱스 = 0

    ' 오른쪽에서부터 3자리씩 끊기
    For i = 길이 To 1 Step -3
        If i - 2 >= 1 Then
            블럭 = Mid(정수문자열, i - 2, 3)
        Else
            블럭 = Mid(정수문자열, 1, i)
        End If
        
        If Val(블럭) <> 0 Then
            결과 = CStr(Val(블럭)) & Mid(단위문자, 단위인덱스 + 1, 1) & 결과
        End If
        단위인덱스 = 단위인덱스 + 1
    Next i

    Select Case 옵션
        Case 0
            미국단위표시 = 결과               ' 한글 단위 표기
        Case 1
            미국단위표시 = 정수문자열         ' 정수 문자열 그대로
        Case 2
            미국단위표시 = CStr(수)           ' 원래 입력 그대로 문자열로
        Case Else
            미국단위표시 = "오류"             ' 잘못된 옵션 입력 시 오류 반환
    End Select
End Function


  1. Variant 데이터 형은 가장 큰 수를 넣을 수 있다.
  2. Format(수, "0") 함수는 수를 정수 문자열 형태로 바꾼다.
  3. Mid(정수문자열, i - 2, 3) 함수는 i - 2 위치에서 3개 문자를 뽑는다.



다음 함수는 같은 짓을 1만 단위 동양 단위로 표시 해 주는 것이다.

한국단위표시(123456789012345678901234567890,0) =
구분 : 12'3456'7890'1234'6000'0000'0000'0000
단위 : 12양3456자7890해1234경6000조


Function 한국단위표시(ByVal 수 As Variant, ByVal 옵션 As Integer) As String
    Dim 정수문자열 As String
    정수문자열 = Format(수, "0")  ' 지수 표현을 정수 문자열로 변환

    Dim 단위문자 As String: 단위문자 = " 만억조경해자양구간정재극"
    Dim 길이 As Long: 길이 = Len(정수문자열)
    Dim 결과 As String: 결과 = ""
    Dim i As Long, 블럭 As String
    Dim 단위인덱스 As Long: 단위인덱스 = 0

    ' 오른쪽에서부터 4자리씩 끊기
    For i = 길이 To 1 Step -4
        If i - 3 >= 1 Then
            블럭 = Mid(정수문자열, i - 3, 4)
        Else
            블럭 = Mid(정수문자열, 1, i)
        End If
        
        If Val(블럭) <> 0 Then
            결과 = CStr(Val(블럭)) & Mid(단위문자, 단위인덱스 + 1, 1) & 결과
        End If
        단위인덱스 = 단위인덱스 + 1
    Next i

    Select Case 옵션
        Case 0
            한국단위표시 = 결과               ' 한글 단위 표기
        Case 1
            한국단위표시 = 정수문자열         ' 정수 문자열 그대로
        Case 2
            한국단위표시 = CStr(수)           ' 원래 입력 그대로 문자열로
        Case Else
            한국단위표시 = "오류"             ' 잘못된 옵션 입력 시 오류 반환
    End Select
End Function



다음 함수는 1만 단위 동양 단위를 서양식 콤마 대신 따옴표로 표시 해 주는 것이다.

너무 큰 수는 콤마나 따옴표 보고는 읽을 수 없다. 그래서 앞의 함수를 만든 것이다.

만단위표시(123456789012345678901234567890,0) =
12'3456'7890'1234'6000'0000'0000'0000


Function 만단위표시(ByVal 수 As Variant, ByVal 옵션 As Integer) As String
    Dim 정수문자열 As String
    정수문자열 = Format(수, "0")  ' 지수 표현을 정수 문자열로 변환

    Dim 길이 As Long: 길이 = Len(정수문자열)
    Dim 결과 As String: 결과 = ""
    Dim i As Long, 블럭 As String
    Dim 첫블럭 As Boolean: 첫블럭 = True

    ' 오른쪽에서부터 4자리씩 끊기
    For i = 길이 To 1 Step -4
        If i - 3 >= 1 Then
            블럭 = Mid(정수문자열, i - 3, 4)
        Else
            블럭 = Mid(정수문자열, 1, i)
        End If

        ' 왼쪽에서 오른쪽으로 결과 조립
        If 첫블럭 Then
            결과 = 블럭
            첫블럭 = False
        Else
            결과 = 블럭 & "'" & 결과
        End If
    Next i

    Select Case 옵션
        Case 0
            만단위표시 = 결과
        Case 1
            만단위표시 = 정수문자열
        Case 2
            만단위표시 = CStr(수)
        Case Else
            만단위표시 = "오류"
    End Select
End Function



굥썩혈, 쥴리김 친일 반란 무리들이

  1. 똥개 검사로 모함을 하고
  2. 모지리로 암살 실패 하고
  3. 군대로 쿠데타 실패 하고도
  4. 개판으로 유죄 판결 하려는데


여기서 살아 남으면 이재명은 하늘이 돕는 구세주겠다
반란 무리가 다시 정권을 잡는 건 불가능하니, 
대신 국민이 투표할 대상을 없애버리겠다?
이걸 멀뚱 멀뚱 보고 있어야 하나 
아니면 가서 Big Dog 법원에 불이라도 질러야 할까?
똥검개판 새끼들이 완전 미쳤네? 
불알 젖통 흔들며 똥꼬 보지 좆 까는 창피한 짓 좀 그만 해라.
다시 쿠데타 일으켜서 종신 독재 못 하면, 
어차피 정권 바뀌어 감옥 가게 되어 있어!
국가와 민족을 위해서 그냥 감옥 가라! 
안 가면 우리가 얼려 죽이고, 굶겨 죽이고, 때려 죽인다?