Windows/엑셀(MS excel)

분수 서식으로 나타난 숫자의 분자, 분모를 다른 셀에 추출하기

공시탈출넘버원 2025. 3. 24. 17:49

어떤 값을 계산하여 분수로 나타냈을때, 그 분수의 분자와 분모를 빼내는 방법을 자동화한 것이다.

 

두 가지 방법 중에서 잘 되는 것을 사용하시오.

구글 스프레드시트에서는 방법2가 계산식이어도 가능한데, 엑셀2021에서는 계산식일때는 방법1만 가능하다.

 

  • 분수식은 표시형식을 변경하여 분수에서 적당한 것을 고르거나, 원하는 표시를 직접 한다.
    • 예제는 (최대 3자리수)  /  (최대 3자리수) 로 표현하였다.
    • 가분수 형식을 쓸거면 충분한 개수의 # 으로 표현해주는게 좋다.

<<<복사용 예시>>>

소수 형식으로 저장된 상태(계산식으로 입력시)
=2/3
 
=LEFT(TEXT(분수셀,"###/###"),SEARCH("/",TEXT(분수셀 ,"###/###"))-1)
=MID(TEXT( 분수셀 ,"###/###"),SEARCH("/",TEXT( 분수셀 ,"###/###"))+1,3)

 

텍스트 형식으로 저장된 상태
'2/3
 
=TRIM(LEFT(SUBSTITUTE( 분수셀 ,"/",REPT(" ",100)),100))
=TRIM(right(SUBSTITUTE( 분수셀 ,"/",REPT(" ",100)),100))

 

<< 해설 >>

gpt한테 물어서 맞는지만 검토했다.

방법1

📌 분자 추출 수식의 동작 과정

1️⃣ TEXT(분수셀 ,"###/###")

  • 분수셀 에 저장된 값을 "###/###" 형식(분수)으로 변환

2️⃣ SEARCH("/", TEXT(분수셀 , "###/###"))

  • TEXT(분수셀  , "###/###")의 결과에서 "/"(슬래시)의 위치를 찾음.
  • 예제인 "2/3" 에서 /는 2번째 문자므로 2가 반환된다.

3️⃣ LEFT(TEXT(분수셀 ,"###/###"), SEARCH("/", TEXT(분수셀 ,"###/###")) - 1)

  • SEARCH("/", TEXT(분수셀 ,"###/###")) - 1 → 슬래시 직전까지의 길이를 계산함.
  • LEFT(문자열, 길이)를 사용해서 문자열의 왼쪽 부분(=분자)을 추출.
  • 예제인 "2/3" 에서 LEFT("2/3", 2-1) → 분모인 2를 반환.

📌 분모 추출 수식의 동작 과정

1️⃣ TEXT(분수셀 ,"###/###") --- 생략

2️⃣ SEARCH("/", TEXT(분수셀 , "###/###")) --- 생략

3️⃣ MID(TEXT(분수셀, "###/###"), SEARCH("/", TEXT(C2,"###/###"))+1, 3)

  • SEARCH("/", TEXT(분수셀 ,"###/###")) + 1
    / 다음 글자의 위치를 계산함.
  • MID(문자열, 시작 위치, 길이)를 사용해서 분모 영역에 해당하는 내용을 추출.
    이때 길이는 자신이 설정한 분모 길이와 같게 한다.
  • "2/3"에서 MID("2/3", 2+1, 3)
    왼쪽에서 3번째(2+1) 글자부터 시작하여 3개 글자(3)을 반환 
    → "3"을 반환.

방법2

숨은 전제: 불러오는 값이 숫자(소수 float)가 아니라 문자열(char)로 되어 있어야 한다. 예를들면,  

📌 추출 수식의 동작 과정

 

1️⃣  SUBSTITUTE(분수셀 , "/", REPT(" ", 100))

  • 분수셀 의 값에서 / 기호를 공백 100개로 대체한다.

  • "2/3" 이 "3" + (공백 100개) + "3" 으로 반환된다.

2️⃣ LEFT(..., 100) --- 분자

  • 앞에서 변환된 문자열에서 왼쪽에서부터 100개 문자를 가져온다.
  • /이 있던 자리에 공백이 100개 삽입되었으므로, 분모(두 번째 숫자)는 공백 뒤쪽에 밀려 있음.
  • 따라서, LEFT는 분자 부분만 포함된 문자열을 가져오게 됨

2️⃣ RIGHT (..., 100) --- 분모

  • 앞에서 변환된 문자열에서 왼쪽에서부터 또는 오른쪽에서부터 100개 문자를 가져온다.
  • /이 있던 자리에 공백이 100개 삽입되었으므로, 분자(첫 번째 숫자)는 공백 앞쪽에 밀려 있음.
  • 따라서, RIGHT는 분모 부분만 포함된 문자열을 가져오게 됨

TRIM(...)

  • TRIM 함수는 문자열 앞뒤의 불필요한 공백을 제거한다.
  • 따라서, 해당하는 숫자 부분만 남게 됨.

 

 

 


출처 보고 내가 따라해 보았다.

https://www.mrexcel.com/board/threads/extracting-numerator-and-denominator-to-difference-cells.1027473/