반응형

소설로 읽는 고려사 (6편)

십팔자위왕(十八子爲王) — 황제를 꿈꾼 외척, 이자겸의 난 (1부)

소설로 만나는 역사

개경의 밤은 깊었으나, 이자겸(李資謙)의 대저택은 대낮처럼 밝았다. 처마 끝에 걸린 청사초롱의 붉은 빛이 끝도 없이 이어진 담장을 비췄다. 무려 80칸이 넘는 저택. 그 화려함은 궁궐을 압도했고, 대문을 드나드는 고관대작들의 수레는 저잣거리의 상인들보다 많았다.

이자겸은 서재의 깊숙한 곳에서 홀로 찻잔을 만지작거렸다. 그의 눈앞에는 화려하게 수놓인 비단 두루마리가 펼쳐져 있었다. 그 안에는 기묘한 문구가 적혀 있었다. '십팔자위왕(十八子爲王)'.

열십(十), 여덟팔(八), 아들자(子). 합치면 이(李) 씨가 된다. 즉, 이 씨가 왕이 된다는 불온한 예언. 평범한 사람이라면 목숨이 열 개라도 모자랄 역모의 증거였으나, 이자겸은 오히려 그 글귀를 보며 차가운 미소를 지었다.

이자겸. 경원 이씨 가문의 수장.
현종 이후 고려 최고의 문벌 귀족.
세 명의 딸을 연달아 왕비로 보낸, 황제 위의 황제.

그의 권세는 하늘을 찔렀다. 예종의 장인이었던 그는, 사위가 죽자 어린 외손자인 인종을 왕위에 올렸다. 그것도 모자라 자신의 셋째와 넷째 딸, 즉 인종에게는 이모가 되는 이들을 다시 왕비로 밀어 넣었다. 인륜조차 그의 욕망 앞에서는 걸림돌이 되지 않았다.

조정의 모든 관직은 그의 친인척들로 채워졌다. 나라의 모든 땅과 재화가 이자겸의 곳간으로 흘러들어갔다. 선물로 들어온 고기가 썩어 문드러져 수만 근을 버릴 정도라는 소문이 돌았으나, 누구도 감히 그를 비난하지 못했다.

✦ ✦ ✦

어느 날, 젊은 왕 인종의 침소에 서늘한 그림자가 비쳤다. 왕은 열일곱 소년이었으나, 자신의 침실조차 장인의 감시 아래 있다는 사실을 잘 알고 있었다. 인종은 곁을 지키던 충신들에게 나지막이 물었다.

"짐이 과연 이 나라의 주인이냐, 아니면 이자겸의 인형이냐."

"전하, 이자겸의 권세가 이미 국운을 넘보고 있사옵니다. 더 늦기 전에 그를 도려내야 하옵니다."

비밀스러운 계획이 시작되었다. 인종은 이자겸을 견제하기 위해 군사를 모으고 기회를 엿봤다. 하지만 이자겸에게는 고려 최고의 무력이자 '살아있는 귀신'이라 불리는 장수, 척준경(拓俊京)이 있었다.

✦ ✦ ✦

1126년의 어느 밤, 정적이 흐르던 궁궐의 담장을 넘어 시커먼 불길이 치솟았다.

인종의 기습에 분노한 이자겸과 척준경이 군사를 이끌고 궁으로 들이닥친 것이다. "반역자를 처단하라!"는 명분은 가짜였다. 그들이 휘두르는 칼날은 왕의 목소리를 지우기 위한 것이었다. 궁궐의 전각들이 불타오르고, 상궁과 내관들의 비명이 밤공기를 찢었다.

인종은 불타는 연기를 마시며 어둠 속으로 몸을 숨겼다. 왕이 머무는 대궐에 불을 지른 신하. 그것은 이미 난(亂)이었다. 이자겸은 불길에 휩싸인 궁궐을 바라보며 나지막이 읊조렸다.

"이제 고려는 짐의 것이다. 십팔자위왕, 그 예언이 오늘 밤 완성될 것이니."

불길은 사그라질 줄 몰랐다. 고려의 왕권은 그렇게 잿더미가 되어가고 있었다. 그러나 이자겸은 알지 못했다. 가장 날카로운 칼은 언제나 주인의 등 뒤를 노린다는 사실을.

📚 한능검 핵심: 이자겸의 난과 문벌 귀족 사회

1. 문벌 귀족 사회의 성립과 모순

고려 전기의 지배층인 문벌 귀족은 가문의 힘을 바탕으로 권력을 독점했습니다.

  • 음서(蔭敍): 시험 없이 자손에게 관직을 세습하는 특권.
  • 공음전(功蔭田): 5품 이상 관리에게 지급되어 세습이 가능했던 토지.
  • 중첩된 혼인: 왕실이나 유력 가문끼리 혼인하여 권력을 공고히 함 (예: 경원 이씨).

2. 이자겸의 난 (1126, 인종) ★★★★★

구분 주요 내용
배경 인종의 외조부 이자겸의 권력 독점 및 금국(金)에 대한 사대 외교 수용.
사건 인종이 이자겸을 제거하려다 실패하자, 이자겸과 척준경이 궁궐을 불태우고 난을 일으킴.
결과 이자겸과 척준경의 사이를 이간질한 인종에 의해 이자겸이 유배되며 종결.
영향 중앙 문벌 귀족 사회의 붕괴와 서경 세력(묘청 등)의 부상 계기.

3. 금(金)에 대한 사대 관계 (중요 포인트!)

여진족이 세운 금나라가 군신 관계를 요구하자, 이자겸은 자신의 권력을 유지하기 위해 이를 수용했습니다. 이는 서경 세력과 북진 정책 지지자들의 큰 반발을 샀습니다.

⚠️ 시험 함정 주의! 이자겸의 난은 왕위를 찬탈하려 했던 역모이지만, 결국 척준경의 배신으로 실패합니다. 이 과정에서 개경의 궁궐이 불타버린 것이 훗날 '묘청의 서경 천도 운동'의 직접적인 명분이 됩니다.
✏ 암기 구호
"이자겸 - 십팔자위왕 - 금 사대 수용 - 척준경과 싸우다 망함!"

궁궐이 불타는 밤, 이자겸은 정점에 서 있었습니다. 십팔자위왕의 예언을 믿었고, 칼을 쥔 척준경이 곁에 있었으며, 왕은 연기 속에 숨어 떨고 있었습니다. 그 순간만큼은, 세상이 정말 그의 것처럼 보였습니다.

그러나 승리의 불길 속에서, 척준경의 형제들이 피를 흘렸습니다. 이자겸은 몰랐습니다. 아니, 알면서도 대수롭지 않게 여겼습니다. 척준경은 칼이었고, 칼은 주인에게 충성한다고 믿었습니다.

가장 날카로운 칼은 언제나 주인의 등 뒤를 노립니다.

📌 다음 편(2부)에서는 연금된 어린 왕의 마지막 승부수,
척준경의 선택, 그리고 이자겸의 최후를 다룹니다.
「날카로운 칼은 주인의 등 뒤를 노린다 — 이자겸의 최후 (2부)」
반응형
반응형

소설로 읽는 고려사 (5편)

살아있는 전설 — 강감찬과 귀주대첩

소설로 만나는 역사

1018년 음력 12월, 압록강 위로 칼바람이 몰아쳤다.

하늘은 납빛이었다. 강 건너편 지평선이 시커멓게 물들더니, 이윽고 그 어둠이 움직이기 시작했다. 말발굽 소리가 들려오기도 전에 땅이 먼저 떨렸다. 거란의 장수 소배압(蕭排押)이 이끄는 10만 대군이 얼어붙은 압록강을 밟고 넘어오는 중이었다. 이번이 세 번째였다.

1010년, 거란의 2차 침입 때 그들은 개경을 불태웠다. 현종은 황급히 궁을 버리고 남쪽으로, 더 남쪽으로 달아났다. 나주(羅州)까지 밀려난 황제. 불타는 개경의 연기가 하늘을 가리던 그 치욕의 기억을 고려는 아직 지우지 못했다. 거란 역시 기억하고 있었다. 고려가 끝끝내 항복하지 않았다는 것을.

소배압의 눈빛에는 그래서 더욱 차가운 확신이 서려 있었다. '이번엔 끝낸다. 반드시.'

개경의 조정은 또다시 얼어붙었다. 2차 침입의 악몽이 생생한 신료들의 얼굴은 창백했고, 몇몇은 노골적으로 피난을 권했다. 그러나 이번에는 달랐다. 고려에는 한 노인이 있었다.

강감찬(姜邯贊). 그해 나이 일흔하나.
흰 수염, 작은 키, 문관 출신의 학자.
누가 봐도 전장과는 어울리지 않는 인물이었다.

그러나 현종은 망설이지 않았다. 조정의 신료들이 수군거리는 가운데, 황제는 두 손으로 상원수(上元帥)의 인장을 받들어 강감찬 앞에 내밀었다. 강감찬은 천천히 무릎을 꿇고, 두 손으로 인장을 받아 들었다. 잠시 침묵이 흘렀다. 그가 고개를 들며 말했다.

"전하, 돌아올 때는 반드시 승전보를 가지고 오겠습니다."

담담한 목소리였다. 그러나 그 담담함이 오히려 조정을 숨죽이게 만들었다. 허풍이 아니었다. 맹세였다.

✦ ✦ ✦

흥화진(興化鎭) 앞 들판. 고려군 20만이 진을 친 가운데, 강감찬의 막사에는 부장들이 빽빽이 모여 있었다.

강감찬은 지도를 무릎 위에 펼쳐놓고 말없이 오래 들여다봤다. 그의 손가락이 느릿하게 지도 위를 움직이다, 흥화진 동쪽 작은 강 상류에 멈췄다. 바깥에는 칼바람이 불고 있었다. 촛불이 흔들렸다.

"여기에 둑을 쌓아라."

"…둑을 말씀이십니까?"

"소가죽 자루에 흙을 채워 강 상류를 막아라. 그리고 기다려라."

"적이 코앞인데 강을 막으라 하시면…"

강감찬은 고개를 들었다. 그의 눈이 촛불빛을 받아 반짝였다.

"시키는 대로 하게."

더 이상의 설명은 없었다. 부장들은 서로 눈빛을 교환했지만 감히 반문하지 못했다. 그날 밤부터, 수만 명의 병사들이 혹한의 강가로 나섰다. 차디찬 겨울 강물에 손을 담그고, 발을 적시며, 소가죽 자루를 날랐다. 손이 얼어 감각을 잃어도 멈출 수가 없었다.

어둠 속에서 누군가 씩 웃으며 중얼거렸다.

"아니, 노장께서 강이라도 막을 생각이신 건가."

"그러게. 우리가 거란이랑 싸우는 거야, 강이랑 싸우는 거야."

낮은 웃음이 어둠 속으로 번졌다. 그러나 강감찬은 웃지 않았다. 그는 강 너머 북쪽 하늘을 응시한 채 꼼짝도 하지 않았다. 그의 눈빛에는 무언가를 오래 기다려온 사람의 고요함이 있었다.

✦ ✦ ✦

며칠 뒤 새벽, 척후가 달려왔다.

"거란 선봉대가 강에 닿았습니다!"

강감찬은 눈을 떴다. 잠을 자고 있지 않았다.

소배압의 선봉 기병들이 흥화진 앞 강가에 나타났다. 그들은 주저 없이 강바닥으로 말을 몰았다. 얕은 겨울 강이었다. 말발굽이 물을 가르며 나아갔다. 병사들이 긴장을 풀었다. 강폭은 넓지 않았고, 물살은 잔잔했다. 너무 쉬웠다.

선봉의 절반이 강을 건넜다. 뒤에서도 계속 밀려들었다. 기병들의 말발굽 소리가 강바닥을 두드리며 울렸다.

바로 그 순간이었다.

상류에서 굉음이 터졌다.

소가죽 자루로 막아뒀던 둑이 한꺼번에 터지면서, 수일 치 강물이 폭포처럼 쏟아져 내려왔다. 강물이 순식간에 불어났다. 말들이 비명을 질렀다. 기병들이 균형을 잃고 쓰러졌다. 갑옷이 물을 먹으며 무거워졌다. 강 한가운데 있던 병사들은 발을 디딜 곳이 없었다. 물살이 그들을 집어삼켰다. 비명이 강 위를 가득 메웠다가, 이내 물소리에 묻혔다.

강감찬이 칼을 빼 들었다. 그가 명령하기 전에 이미 고려 기병대가 강 양안에서 쏟아져 나오고 있었다. 화살이 빗발쳤다. 물에 빠진 거란 선봉대를 향해, 쉴 새 없이.

자랑스러운 거란의 선봉대. 압록강을 건너 세상을 제패하겠다던 그 기병들이, 강 하나를 건너지도 못한 채 물과 화살 속으로 사라졌다.

✦ ✦ ✦

그러나 소배압은 물러서지 않았다.

선봉대의 패배는 분노를 불러일으켰을 뿐이었다. 10만 대군은 여전히 건재했다. 그는 냉정하게 우회로를 찾아 개경을 향해 남하하기 시작했다. 고려군 진지를 정면으로 뚫을 필요가 없었다. 돌아가면 그만이었다. 그리고 개경을 함락시키면, 싸움은 저절로 끝난다.

고려 막사가 발칵 뒤집혔다.

"상원수! 저들이 우리를 피해 개경으로 향하고 있습니다! 지금 당장 막지 않으면—"

"막지 않아도 된다."

부장들이 일제히 강감찬을 바라봤다. 그는 지도 위에 시선을 고정한 채 담담히 말을 이었다.

"보급선이 끊긴 군대는 개경을 눈앞에 두고도 쓰러진다. 겨울이 그들을 먹여 살려주지 않는다. 저들이 지쳐서 돌아오는 길목, 귀주(龜州)에서 우리가 기다리면 그만이다."

침묵이 흘렀다. 누군가 떨리는 목소리로 물었다.

"만약 상원수의 예상이 빗나간다면…"

강감찬이 고개를 들었다. 일흔하나 노인의 눈이 촛불 아래서 빛났다.

"빗나가지 않는다."

그것이 전부였다. 부장들은 더 이상 말하지 않았다.

✦ ✦ ✦

1019년 봄.

소배압의 예상은 맞았다. 고려군은 개경으로 가는 길을 막지 않았다. 그러나 거란군이 마주한 것은 비어있는 길이 아니었다. 겨울이었다. 보급이 끊겼다. 험한 지형마다 고려 유격대가 나타나 흔적을 남기고 사라졌다. 말이 쓰러지고, 병사들이 동상을 입었다. 개경은 눈앞인데 군대는 이미 반쯤 무너져 있었다.

소배압은 철수를 결정했다. 굴욕적이었지만 어쩔 수 없었다.

귀주(龜州) 벌판에 봄 햇살이 내려앉고 있었다.

강감찬은 말 위에 올라, 먼지를 일으키며 퇴각해오는 거란군을 바라봤다. 그들은 왔을 때와 달랐다. 대오가 흐트러졌고, 지쳐 있었다. 갑옷이 낡고 말의 눈이 풀려 있었다. 두려움이 느껴졌다. 기세가 꺾인 군대의 냄새.

지금이었다.

강감찬이 칼을 번쩍 들었다.

"전군—"

짧은 숨. 귀주 벌판 전체가 숨을 멈췄다.

"총공격!"

함성이 대지를 뒤흔들었다.

앞에서는 고려 보병이 철벽처럼 막아섰다. 양 옆에서는 기병이 날개처럼 펼쳐지며 거란군을 에워쌌다. 하늘에서는 화살이 비처럼 쏟아졌다. 퇴각하던 거란군은 순식간에 사방이 막혔다. 달아날 곳이 없었다. 싸울 기력도 남지 않았다.

귀주 벌판에 거란군이 쓰러졌다. 하나씩, 둘씩, 그리고 수천씩.

훗날 기록은 이렇게 전한다. 살아서 압록강을 건넌 거란 병사는 수천에 불과했다고. 10만이 넘던 군대가 그렇게 귀주의 봄 흙 속에 묻혔다.

✦ ✦ ✦

전투가 끝난 귀주 들판에 저녁 햇살이 붉게 물들었다.

강감찬은 천천히 말에서 내렸다. 아무 말도 하지 않았다. 그는 조용히 두 손을 모으고 눈을 감았다. 봄바람이 흰 수염을 스쳐 지나갔다. 함성이 멀리서 울려왔다. 고려 병사들이 서로를 부둥켜안으며 외쳤다. 눈물을 흘리는 자도 있었다.

강감찬은 눈을 뜨지 않았다.

그는 지금 어딘가 먼 곳을 생각하고 있었다. 흥화진에서 차가운 강물에 손을 담그며 둑을 쌓던 병사들. 보급이 끊긴 길에서 이름도 남기지 못하고 쓰러진 유격대원들. 그들이 있었기에 지금 이 봄 햇살이 있었다.

일흔하나의 노장이 눈을 떴다. 붉게 물든 귀주 벌판을 천천히 바라보았다.

고려가 버텨온 30년의 끝이, 여기에 있었다.

📚 한능검 핵심: 강감찬과 귀주대첩, 이것만 알면 끝!

1. 거란 침입 전체 흐름 — 3차까지 한 번에 정리

거란의 침입은 총 3차례입니다. 각 침입의 배경·결과가 시험에 단골로 출제됩니다.

구분시기재위왕핵심 내용결과
1차993성종서희의 외교 담판강동 6주 획득
2차1010현종강조의 정변 빌미로 침입현종 나주 피난, 개경 함락
3차1018현종강감찬의 귀주대첩거란 대패 → 침입 중단

▶ 암기: 993(서희·강동6주) → 1010(개경함락·나주피난) → 1018(강감찬·귀주대첩)

2. 귀주대첩 핵심 정리 ★★★★★

  • 시기: 1019년 (현종 10년)
  • 인물: 강감찬(상원수) vs 소배압(거란 총사령관)
  • 전략 흐름: 흥화진 수공(水攻) → 보급 차단 → 귀주 벌판 섬멸
  • 결과: 거란 10만 대군 중 살아 돌아간 병사 수천에 불과
  • 의의: 살수대첩(을지문덕), 한산도대첩(이순신)과 함께 한국사 3대 대첩

3. 강감찬 인물 특징 — 시험 함정 주의!

⚠️ 강감찬은 무관이 아닙니다. 과거 시험 장원급제 출신의 문관입니다.
귀주대첩 당시 나이는 71세. 이 두 가지가 가장 자주 출제되는 함정입니다.

4. 귀주대첩 이후 — 왜 중요한가

거란은 귀주대첩 이후 고려를 다시는 침략하지 못했습니다. 고려·거란·송 3국 사이에 세력 균형이 이루어졌고, 동아시아에 한 세대의 평화가 찾아왔습니다. 강감찬의 승리는 단순한 전투 승리가 아니라, 고려가 동아시아 외교 무대에서 당당한 주권국으로 자리매김하는 전환점이었습니다.

✏ 암기 구호
"993 서희 강동6주 — 1010 개경 함락 — 1018 강감찬 귀주대첩"
강감찬은 문관 출신, 71세, 3대 대첩!

귀주 들판의 승리는 강감찬 혼자 이룬 것이 아니었습니다.

서희가 외교로 공간을 만들었고, 현종이 인내로 나라를 지켰으며, 이름 없는 병사들이 혹한의 강물에 손을 담그며 둑을 쌓았습니다. 강감찬은 그 모든 30년의 버팀을 하나로 묶어 귀주 벌판에서 완성시킨 사람이었습니다. 한 영웅의 승리가 아니라, 고려라는 나라 전체의 승리였습니다.

귀주대첩 이후, 거란은 다시 오지 않았습니다. 그리고 고려는 더 이상 누군가의 눈치를 보는 나라가 아니었습니다.

📌 다음 편에서는 고려 문벌귀족 사회의 전성기와 그 균열의 시작,
「이자겸의 난: 황제를 꿈꾼 외척의 몰락」으로 찾아뵙겠습니다.
반응형
반응형
코딩으로 시간 벌기 / 엑셀 기초

색칠 공부는 이제 그만!
데이터가 알아서 강조되는 '조건부 서식' 활용법 🎨

물류아재 칵칵 · 엑셀 기초 시리즈

안녕하세요! 물류와 코딩 사이의 경계에서 성장하고 있는 물류아재 칵칵입니다. 😊

지난 글에서 피벗 테이블로 데이터를 요약하는 법을 배웠는데요. 요약된 표를 보고 나면 자연스럽게 이런 생각이 드시죠.

🧐 "이 중에서 목표 미달인 수치만 눈에 확 띄게 할 순 없을까?"

오늘 알려드릴 '조건부 서식'은 내가 일일이 색을 칠하지 않아도, 설정한 조건에 따라 엑셀이 알아서 셀에 색을 입히고 막대그래프까지 그려주는 기능입니다. 바로 시작해볼게요! 👇


1 클릭 몇 번으로 끝내는 '데이터 막대' 초급

숫자의 크기를 한눈에 비교하고 싶을 때 가장 빠른 방법입니다. 셀 안에 막대그래프가 자동으로 그려져요.

1강조하고 싶은 숫자 범위를 드래그해서 선택합니다.
2
[홈] 탭 → [조건부 서식] → [데이터 막대] 클릭
3마음에 드는 색상을 선택하면 끝!
✨ 숫자의 크기에 비례한 막대가 셀 안에 자동으로 그려집니다.

2 특정 조건만 콕 집어 강조하기 예: 재고 10개 미만 → 빨간색

"재고가 10개 미만인 것만 빨간색으로!" 같은 구체적인 숫자 조건이 필요할 때 사용합니다.

1조건을 적용할 숫자 범위를 선택합니다.
2
[조건부 서식] → [셀 강조 규칙] → [보다 작음] 클릭
3왼쪽 칸에 기준값(예: 10) 입력 → 오른쪽에서 연한 빨강 채우기 선택
4[확인] 클릭
🚨 10보다 작은 숫자들에만 자동으로 빨간 불이 들어옵니다!

3 텍스트 조건 활용하기 예: "완료" → 초록색

숫자뿐만 아니라 특정 글자가 포함된 셀도 강조할 수 있습니다. 진행 상태 관리에 딱 좋아요.

1상태값(완료 / 진행 중 / 지연 등)이 적힌 텍스트 범위를 선택합니다.
2
[조건부 서식] → [셀 강조 규칙] → [텍스트 포함] 클릭
3입력창에 '완료' 입력 → 서식: 녹색 채우기 선택 → [확인]
✨ 이제 상태를 '완료'로 바꾸기만 하면 셀이 자동으로 초록색으로 변합니다!

? 여기서 막히셨나요?
Q1. 설정한 서식을 지우고 싶어요!
서식이 걸린 범위 선택 후 [조건부 서식] → [규칙 지우기] → [선택한 셀의 규칙 지우기] 클릭하면 깔끔하게 초기화됩니다. 🧹
Q2. 조건이 여러 개일 때 우선순위를 바꾸고 싶어요.
[조건부 서식] → [규칙 관리]에서 내가 만든 규칙 목록을 볼 수 있어요. 위아래 화살표로 순서를 조정하면 됩니다. 🛠️
Q3. 전체 행에 색을 칠하고 싶은데 셀 하나만 바뀌어요.
이건 '수식을 사용한 서식'과 $ 기호가 필요한 고급 기능입니다. 다음 시리즈에서 행 전체를 강조하는 법을 따로 다룰게요! 조금만 기다려주세요 😊

✅ 결론: 보고서의 품격은 '강조'에서 나옵니다

단순한 숫자 나열보다 조건부 서식이 적용된 표는 읽는 사람의 시간을 아껴줍니다.
상사에게 칭찬받는 보고서, 이제 클릭 몇 번으로 만들어 보세요! ☕

오늘 내용 중 궁금한 점이나 "이런 조건도 가능한가요?" 하는 질문이 있다면 언제든 댓글로 남겨주세요!

칼퇴는 실력이고, 그 실력은 올바른 도구 활용에서 나옵니다. 💪

물류아저씨의 코딩으로 칼퇴하기

#엑셀 #조건부서식 #엑셀기초 #직장인엑셀 #업무효율 #보고서디자인 #데이터시각화 #칼퇴 #엑셀꿀팁 #물류관리 #칵칵 #물류아저씨

반응형
반응형
코딩으로 시간 벌기 / 엑셀 VBA

두 번째 이야기: 색깔 있는 셀, 합계도 5초 만에!

물류아재 칵칵 · 엑셀 VBA 시리즈 2편

안녕하세요, 물류와 코딩 사이의 경계에서 성장하고 있는 물류아재 칵칵입니다.

지난 1편에서 CountByColor 함수로 색깔 셀의 개수를 세는 방법을 소개했는데요, 이번에는 색깔 셀의 합계(Sum)를 구하는 SumByColor 함수를 만들어 보겠습니다!


왜 SumByColor가 필요할까요?

예를 들어 이런 상황을 생각해보세요:

📦 실제 물류 업무 사례
월말 정산 시 '지연 출고' 건에 빨간색, '우선 처리' 건에 노란색을 칠해 두었습니다.
이제 색깔별로 출고 수량의 합계를 구해야 하는데, 엑셀 기본 함수로는 불가능합니다.

SUMIF 함수는 텍스트·숫자 조건만 지원하고 셀 색상 조건은 지원하지 않습니다. 그래서 VBA로 직접 만들어야 합니다.


1편 vs 2편 한눈에 비교

함수 기능 사용 예시
CountByColor 색깔 셀 개수 세기 (1편) =CountByColor(A1:A100, D1)
SumByColor 색깔 셀 합계 구하기 (2편 ⭐) =SumByColor(A1:A100, D1)
AverageByColor 색깔 셀 평균 구하기 (보너스) =AverageByColor(A1:A100, D1)

SumByColor 함수 만들기

아래 코드를 VBA 모듈에 붙여넣으세요.

Function SumByColor(rng As Range, colorcell As Range) As Double
Dim cell As Range
Dim colorindex As Long
Dim total As Double

```
'기준 색상의 색상 인덱스 가져오기
colorindex = colorcell.Interior.Color

'범위 내 색상 비교 후 합산
For Each cell In rng
If cell.Interior.Color = colorindex Then
If IsNumeric(cell.Value) Then
total = total + cell.Value
End If
End If
Next cell

SumByColor = total
```

End Function
💡 1편 코드와의 차이점
1편의 CountByColor는 count = count + 1로 개수를 셌다면, 이번 SumByColor는 total = total + cell.Value로 셀의 값을 더합니다.
IsNumeric() 검사를 추가해 텍스트 셀에서 오류가 나지 않도록 안전하게 만들었습니다.

설치 방법 (1편과 동일합니다)

  1. 엑셀 상단 메뉴에서 개발 도구 탭을 클릭합니다.
  2. Visual Basic 버튼을 클릭해 VBA 편집기를 엽니다.
  3. 삽입(I) → 모듈(M) 을 클릭해 새 모듈을 추가합니다.
  4. 위 코드를 복사해 모듈 창에 붙여넣습니다.
  5. 엑셀 시트로 돌아와 =SumByColor(범위, 기준색상셀) 을 입력하면 끝!

실제 사용 예시

' B2:B50 범위에서 E2와 같은 색상인 셀의 합계
=SumByColor(B2:B50, E2)

’ C2:C100 범위에서 F3와 같은 색상인 셀의 합계
=SumByColor(C2:C100, F3)

기준 셀(E2, F3) 자체의 값은 합산에 포함되지 않고 색깔 정보만 참조합니다. 비어있는 색상 셀을 별도로 만들어 두면 편리합니다.


보너스: AverageByColor (평균 구하기)

합계를 구할 수 있으면 평균도 쉽게 만들 수 있습니다. 개수와 합계를 동시에 구해서 나누면 됩니다.

Function AverageByColor(rng As Range, colorcell As Range) As Double
Dim cell As Range
Dim colorindex As Long
Dim total As Double
Dim count As Long

```
colorindex = colorcell.Interior.Color

For Each cell In rng
If cell.Interior.Color = colorindex Then
If IsNumeric(cell.Value) Then
total = total + cell.Value
count = count + 1
End If
End If
Next cell

If count = 0 Then
AverageByColor = 0 '0으로 나누기 방지
Else
AverageByColor = total / count
End If
```

End Function
⚠️ 저장 형식 주의!
VBA 매크로 함수는 파일 저장 시 반드시 매크로 사용 통합 문서 (.xlsm) 형식으로 저장해야 합니다.
일반 .xlsx로 저장하면 매크로가 사라집니다!

CountByColor(1편)와 SumByColor(2편), 두 함수만 있어도 색깔 기반 엑셀 집계 업무의 대부분을 해결할 수 있습니다. 보너스 AverageByColor까지 모듈에 넣어두면 완벽한 색깔 집계 도구 세트 완성!

다음 편에서는 색깔별로 데이터를 자동 정렬하는 매크로를 소개해 드릴 예정입니다. 기대해 주세요!

반응형
반응형

소설로 읽는 고려사 (4편): 80만 대군을 돌려세운 혀의 힘, 서희의 외교 담판


소설로 만나는 역사

성종이 유교 정치의 기틀을 다지며 나라의 안정을 꾀하던 993년 겨울, 고려의 북쪽 하늘에 거대한 먹구름이 드리워졌다. 당시 동아시아의 신흥 강자로 떠오른 거란(요나라)이 80만 대군을 이끌고 압록강을 건넌 것이다.
"고구려의 옛 땅을 내놓고 항복하라! 그렇지 않으면 개경을 잿더미로 만들 것이다!"
거란의 장수 소손녕의 포효에 고려 조정은 공포에 질렸다. 땅을 떼어주고 항복하자는 '할지론'이 득세했고, 심지어 서경(평양) 이북의 땅을 버리자는 극단적인 주장까지 나왔다. 그때, 침묵을 지키던 중군사 서희(徐熙)가 차갑게 입을 열었다.
"적의 기세에 눌려 땅을 내주는 것은 나라를 통째로 바치는 것과 같습니다. 저들이 진정 원하는 것이 무엇인지 제가 직접 확인하고 오겠습니다."
서희는 홀홀단신으로 소손녕의 진영으로 향했다. 거란의 기세는 등등했다. 소손녕은 서희에게 뜰 아래에서 절을 하라며 기선제압을 시도했지만, 서희는 눈 하나 깜짝하지 않았다.
"두 나라의 대신이 만났는데 어찌 예우를 갖추지 않는단 말이오!"
당당한 서희의 태도에 당황한 소손녕은 결국 맞절을 하며 회담을 시작했다. 소손녕은 "고려는 신라의 땅에서 일어났는데 왜 고구려의 땅을 차지하고 있느냐"며 억지를 부렸다. 서희는 기다렸다는 듯 미소를 지었다.
"우리 국호가 왜 '고려'겠소? 우리는 고구려를 계승한 나라요. 오히려 당신들의 수도인 요양도 원래 우리 땅인데 어찌 우리가 남의 땅을 침범했다 하는가!"
논리에서 밀린 소손녕이 송나라와의 교류를 문제 삼자, 서희는 핵심을 찔렀다.
"우리가 당신들과 교류하지 못하는 것은 압록강 근처를 가로막은 여진족 때문이오. 그 땅을 우리가 관리하게 해준다면 어찌 거란과 교류하지 않겠소?"
서희의 치밀한 심리전에 말려든 소손녕은 결국 80만 대군을 철수시켰을 뿐만 아니라, 고려가 압록강 동쪽의 땅을 차지하는 것에 동의했다. 칼 한 번 휘두르지 않고 얻어낸 기적 같은 승리였다.

한능검 핵심:

서희와 거란의 1차 침입, 이것만 알면 끝!
서희의 담판은 한국사 외교 파트에서 가장 비중 있게 다뤄지는 주제입니다.

1. 거란의 1차 침입 (993, 성종)

* 배경: 고려의 친송 북진 정책에 불만을 품은 거란이 침입함.
* 서희의 담판: 소손녕과의 외교 협상을 통해 거란의 침입 의도가 '고려와 송의 관계 단절'임을 파악함.
* 결과: 강동 6주 확보 (★★★★★)
   * 압록강 동쪽의 여진족을 몰아내고 6개의 성(강동 6주)을 쌓아 영토를 압록강까지 확장함.
   * 거란과 교류할 것을 약속하며 전쟁 없이 영토를 확장한 사례.

2. 고려의 대외 관계 이해

* 거란이 침입한 근본 원인은 고려가 거란을 적대시하고(태조의 만부교 사건 등) 송나라와 친하게 지냈기 때문임.
* 서희는 이를 역이용해 '거란과의 교류'를 명분으로 실리(땅)를 챙김.

👉 암기 구호:

“서희-말빨-강동6주-압록강까지!”

마무리하며

서희의 담판은 단순한 말재주가 아니라, 정확한 국제 정세 파악과 당당한 주권 의식이 만들어낸 승리였습니다. 위기의 순간에 땅을 버리려 했던 이들에게 서희가 보여준 결단은 오늘날 우리에게도 큰 울림을 줍니다.
다음 편에서는 거란의 끈질긴 침략을 잠재운 노장의 투혼, "강감찬과 귀주대첩: 살수에서 귀주까지, 승리의 물결" 이야기로 찾아뵙겠습니다.

반응형
반응형

1초 만에 데이터 찢기! 부서별/지역별 시트 자동 분할 매크로 (복붙용 코드 포함) 🚀


안녕하세요! 물류와 코딩 사이의 경계에서 성장하고 있는 물류아재 칵칵입니다. ☕

오늘 하루도 이런 지시를 받지 않으셨나요?
"김대리, 이번 달 전체 매출 데이터 뽑은 거, 각 부서별로 시트 나눠서 따로 정리 좀 해줘."

부서가 3~4개면 필터를 걸고 복사해서 새 시트에 붙여넣는 작업을 기꺼이 할 수 있습니다. 하지만 부서가 20개, 30개라면 어떨까요?
거래처별, 지역별, 담당자별로 데이터를 찢어야 한다면 귀중한 오전 시간은 'Ctrl+C, Ctrl+V'만 하다가 날아가 버립니다. 😱

오늘은 이 지독한 복붙 노가다를 버튼 클릭 한 번, 단 1초 만에 해결해 주는 '데이터 자동 분할' 매크로를 준비했습니다. VBA를 몰라도 괜찮습니다. 늘 그랬듯, 아래 순서대로 복사해서 붙여넣기만 하세요! 👇

## 🛠️ Step 1. 매크로를 담을 그릇 만들기

먼저 엑셀에 코드를 입력할 공간을 열어야 합니다.
* [개발 도구] 탭을 누릅니다.
   * 혹시 '개발 도구' 탭이 안 보이나요? 상단 메뉴 아무 곳이나 마우스 우클릭 → [리본 사용자 지정] → 오른쪽 목록에서 **[개발 도구]**에 체크하고 확인을 누르세요! ✅
* 가장 왼쪽에 있는 [Visual Basic] 버튼을 클릭합니다. (단축키: Alt + F11)
* 새로 뜬 창 상단 메뉴에서 [삽입] → **[모듈]**을 클릭합니다.
* 이제 하얀색 빈 메모장 같은 창이 나타날 거예요. 여기에 아래 코드를 복사해서 붙여넣으세요!

## 💻 Step 2. 마법의 코드 복사하기

아래 코드를 그대로 복사해서 방금 만든 하얀 창에 붙여넣으세요. 📋

'// 기능: 특정 열을 기준으로 데이터를 시트별로 자동 분할합니다.
Sub SplitDataByColumn()
    Dim ws As Worksheet, newWs As Worksheet
    Dim rng As Range, cell As Range
    Dim dict As Object
    Dim key As Variant
    Dim lastRow As Long, colIndex As Long
    
    Set ws = ActiveSheet
    lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
    
    '1. 기준 열 번호 입력받기
    On Error Resume Next
    colIndex = InputBox("데이터를 나눌 기준 열 번호를 숫자로 입력하세요." & vbNewLine & "(예: A열=1, B열=2, C열=3)", "기준 열 선택", 1)
    If colIndex = 0 Then Exit Sub
    On Error GoTo 0
    
    Set dict = CreateObject("Scripting.Dictionary")
    
    '2. 고유한 기준값(부서명 등) 추출
    For Each cell In ws.Range(ws.Cells(2, colIndex), ws.Cells(lastRow, colIndex))
        If cell.Value <> "" And Not dict.exists(cell.Value) Then
            dict.Add cell.Value, Nothing
        End If
    Next cell
    
    Application.ScreenUpdating = False '작업 속도 향상
    
    '3. 시트 생성 및 데이터 복사
    For Each key In dict.keys
        ws.Range("A1").AutoFilter Field:=colIndex, Criteria1:=key
        
        '이미 해당 이름의 시트가 있는지 확인 후 생성
        On Error Resume Next
        Set newWs = Sheets(CStr(key))
        If newWs Is Nothing Then
            Set newWs = Sheets.Add(After:=Sheets(Sheets.Count))
            newWs.Name = CStr(key)
        Else
            newWs.Cells.Clear '기존 데이터가 있으면 삭제
        End If
        On Error GoTo 0
        
        ws.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Destination:=newWs.Range("A1")
        newWs.Columns.AutoFit
        Set newWs = Nothing
    Next key
    
    ws.AutoFilterMode = False
    ws.Activate
    Application.ScreenUpdating = True
    
    MsgBox "모든 시트 분할이 완료되었습니다! 칼퇴하세요! 🎉", vbInformation
End Sub

## 🚀 Step 3. 매크로 실행해서 노가다 끝내기!

코드를 붙여넣었다면 이제 엑셀 시트로 돌아오세요.
* [개발 도구] → **[매크로]**를 클릭합니다. (단축키: Alt + F8)
* 목록에서 SplitDataByColumn을 선택하고 **[실행]**을 누릅니다.
* 작은 창이 뜨면, 데이터를 나눌 기준이 되는 열 번호를 입력하세요.
   * 부서명이 B열에 있다면 숫자 2를 입력하고 확인!
* 눈 깜짝할 사이에 시트 탭이 늘어나며 데이터가 완벽하게 분리됩니다! ✨

## ⚠️ 혹시 막히시나요? 대안을 알려드려요!

Q1. 매크로를 실행했는데 오류가 떠요!
* 이유: 데이터의 제목(머리글)이 1행이 아니거나, 데이터 중간에 빈 행이 있을 때 그럴 수 있습니다.
* 대안: 데이터 제목줄을 1행으로 맞추고, 중간에 완전히 빈 행이 없는지 확인해 보세요! 🧐
Q2. 시트가 만들어지다 멈춰요.
* 이유: 부서명(시트 이름이 될 값)에 /, :, ?, *, [, ] 같이 시트 이름으로 쓸 수 없는 특수문자가 섞여 있을 때 발생합니다.
* 대안: 원본 데이터의 기준 열에서 특수문자를 제거하거나 다른 문자로 바꿔보세요! 🛠️
Q3. 파일을 껐다 켜니 매크로가 사라졌어요!
* 이유: 일반 엑셀 파일(.xlsx)로 저장해서 그렇습니다.
* 대안: 반드시 **[다른 이름으로 저장]**에서 파일 형식을 **[Excel 매크로 사용 통합 문서(.xlsm)]**로 선택해서 저장해 주세요! 💾

## 결론: 엑셀에게 일을 시키세요!

매일 하던 30분짜리 단순 노동, 오늘부터는 1초 만에 끝내고 여유롭게 아침 커피 한 잔 하시기 바랍니다. ☕ 이 매크로 하나가 여러분의 소중한 시간을 벌어다 줄 거예요.
사용해 보시다가 궁금한 점이나 "이런 기능도 추가하고 싶어요!" 하는 의견이 있다면 언제든 댓글로 남겨주세요! 💬
칼퇴는 실력이고, 그 실력은 올바른 도구 활용에서 나옵니다. 💪

반응형

+ Recent posts