์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿ” ์—‘์…€ ํ’ˆ์งˆ ๋ณด์ฆ๊ณผ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์ž๋™ํ™” ์‹œ์Šคํ…œโ€” ๋ฐ์ดํ„ฐ ์‹ ๋ขฐ๋„๋ฅผ ๊ทนํ•œ๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ์™„์ „ ๊ฐ€์ด๋“œ
๐Ÿ“Š Excel Automation

๐Ÿ” ์—‘์…€ ํ’ˆ์งˆ ๋ณด์ฆ๊ณผ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์ž๋™ํ™” ์‹œ์Šคํ…œ
โ€” ๋ฐ์ดํ„ฐ ์‹ ๋ขฐ๋„๋ฅผ ๊ทนํ•œ๊นŒ์ง€ ๋Œ์–ด์˜ฌ๋ฆฌ๋Š” ์™„์ „ ๊ฐ€์ด๋“œ

โœ… QA ยท ์ž๋™ํ™” ยท ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ยท VBA ยท ์ˆ˜์‹ ยท ์‹ค๋ฌด ์™„์ „์ •๋ณต
๐Ÿ™‹ ์•ผ ๋‚˜ ์–ด์ œ ๋ณด๊ณ ์„œ ์˜ฌ๋ ธ๋Š”๋ฐ ํŒ€์žฅ๋‹˜์ด "์ด ์ˆซ์ž ๋งž์•„?" ํ•˜์‹œ๋Š” ๊ฑฐ์•ผ... ์‹์€๋•€ ใ…‹ใ…‹ใ…‹
ใ…‹ใ…‹ใ…‹ ๊ทธ๊ฑฐ ์—‘์…€ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์•ˆ ํ•œ ๊ฑฐ ์•„๋‹ˆ์•ผ? ์š”์ฆ˜ ์ž๋™ํ™” ์‹œ์Šคํ…œ ์“ฐ๋ฉด ๊ทธ๋Ÿฐ ๊ฑฐ ๋‹ค ์žก์•„์ฃผ๋Š”๋ฐ?
์ง„์งœ?? ์–ด๋–ป๊ฒŒ ํ•˜๋Š” ๊ฑด๋ฐ ์•Œ๋ ค์ค˜ ์ œ๋ฐœ ๐Ÿ™

๋งž์•„์š”, ์ด๋Ÿฐ ์ƒํ™ฉ ์‹ค๋ฌด์—์„œ ์ง„์งœ ๋งŽ์ด ๊ฒช์ฃ  ใ…‹ใ…‹ใ…‹. ์—‘์…€๋กœ ๋ฐ์ดํ„ฐ ์ž‘์—…ํ•˜๋‹ค ๋ณด๋ฉด ์ˆซ์ž ํ•˜๋‚˜ ํ‹€๋ ค์„œ ๋ณด๊ณ ์„œ ์ „์ฒด๊ฐ€ ๋’ค์ง‘์–ด์ง€๋Š” ๊ฒฝํ—˜, ํ•œ ๋ฒˆ์ฏค์€ ๋‹ค๋“ค ์žˆ์„ ๊ฑฐ์˜ˆ์š”. ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ ์—‘์…€ ํ’ˆ์งˆ ๋ณด์ฆ(QA)๊ณผ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์ž๋™ํ™” ์‹œ์Šคํ…œ์„ ์™„์ „ ํŒŒํ—ค์ณ๋ณผ ๊ฑฐ์˜ˆ์š”. ๊ธฐ์ดˆ ๊ฐœ๋…๋ถ€ํ„ฐ ์‹ค์ „ VBA ์ฝ”๋“œ, ์ˆ˜์‹ ํ™œ์šฉ๋ฒ•๊นŒ์ง€ โ€” ์ง„์งœ ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์œผ๋กœ๋งŒ ๊ฝ‰๊ฝ‰ ์ฑ„์› ์Šต๋‹ˆ๋‹ค ๐Ÿ’ช


์—‘์…€ ํ’ˆ์งˆ ๋ณด์ฆ ์‹œ์Šคํ…œ ์ „์ฒด ํ๋ฆ„๋„ ๐Ÿ“ฅ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์›์‹œ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๐Ÿ” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ˜•์‹ยท๋ฒ”์œ„ ์ฒดํฌ โš™๏ธ ์ž๋™ ์˜ค๋ฅ˜ ๊ฒ€์ถœ ์ˆ˜์‹ยทVBA ์ฒ˜๋ฆฌ ๐Ÿ“‹ ๋ฆฌํฌํŠธ ์ƒ์„ฑ ๊ฒฐ๊ณผ ์ž๋™ ์ถœ๋ ฅ โœ… ์Šน์ธ QA ์™„๋ฃŒ ๐Ÿ”‘ ํ•ต์‹ฌ ์ž๋™ํ™” ๋„๊ตฌ 3์ด์‚ฌ ๐Ÿ“ ์—‘์…€ ์ˆ˜์‹ ๊ธฐ๋ฐ˜ IFERROR, ISBLANK COUNTIF, MATCH ๋“ฑ ์กฐ๊ฑด๋ถ€ ์„œ์‹ ์—ฐ๋™ ๐Ÿค– VBA ๋งคํฌ๋กœ ์ž๋™ํ™” ๋ฃจํ”„ ๊ธฐ๋ฐ˜ ์ „์ฒด ๊ฒ€์‚ฌ ์˜ค๋ฅ˜ ์…€ ์ž๋™ ํ•˜์ด๋ผ์ดํŠธ ๋กœ๊ทธ ์‹œํŠธ ์ž๋™ ์ƒ์„ฑ ๐Ÿ›ก๏ธ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ž…๋ ฅ ๋‹จ๊ณ„ ์‚ฌ์ „ ์ฐจ๋‹จ ๋“œ๋กญ๋‹ค์šดยท๋ฒ”์œ„ ์ œํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ปค์Šคํ…€
๐Ÿค” 1. ์—‘์…€ ์˜ค๋ฅ˜, ์ง„์งœ ์–ผ๋งˆ๋‚˜ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ์ผ๊นŒ?

์†”์งํžˆ ๋งํ•˜๋ฉด... ์—‘์…€ ์˜ค๋ฅ˜๋Š” ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์ˆ˜์กฐ ์›์˜ ์†์‹ค์„ ์ผ์œผํ‚จ ์‚ฌ๋ก€๊ฐ€ ์‹ค์ œ๋กœ ์žˆ์–ด์š”. ๊ทธ๋ƒฅ "์ˆซ์ž ์ข€ ํ‹€๋ ธ๋„ค~" ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฑฐ์ฃ  ใ…‹ใ…‹ใ…‹.

๐Ÿ’ฅ ์‹ค์ œ๋กœ ์ผ์–ด๋‚œ ์—‘์…€ ์˜ค๋ฅ˜ ์‚ฌ๊ฑด๋“ค
1
JP๋ชจ๊ฑด ์ฒด์ด์Šค (2012) โ€” ์—‘์…€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์˜ ์ˆ˜์‹ ์˜ค๋ฅ˜ ํ•˜๋‚˜๋กœ ๋ฆฌ์Šคํฌ ๊ณ„์‚ฐ์ด ์ž˜๋ชป๋˜์–ด ์•ฝ 60์–ต ๋‹ฌ๋Ÿฌ(์•ฝ 8์กฐ ์›) ์†์‹ค ๋ฐœ์ƒ. ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ๊ณผ์ •์—์„œ ๋‚˜๋ˆ—์…ˆ ์ˆ˜์‹์ด ํ•ฉ์‚ฐ ์ˆ˜์‹์œผ๋กœ ๋ฐ”๋€ ๊ฒŒ ์›์ธ์ด์—ˆ์Œ.
2
์˜๊ตญ ์ฝ”๋กœ๋‚˜19 ํ™•์ง„์ž ์ง‘๊ณ„ ์˜ค๋ฅ˜ (2020) โ€” ์—‘์…€์˜ ์ตœ๋Œ€ ํ–‰ ์ˆ˜ ์ œํ•œ(65,536ํ–‰)์„ ์ดˆ๊ณผํ•˜๋ฉด์„œ ์•ฝ 15,841๋ช…์˜ ํ™•์ง„์ž ๋ฐ์ดํ„ฐ๊ฐ€ ๋ˆ„๋ฝ๋จ. ์ ‘์ด‰์ž ์ถ”์ ์ด ๋Šฆ์–ด์ง€๋Š” ๊ณต์ค‘๋ณด๊ฑด ์œ„๊ธฐ ์ดˆ๋ž˜.
3
๋ผ์ธํ•˜ํŠธ-๋กœ๊ณ ํ”„ ๋…ผ๋ฌธ ์˜ค๋ฅ˜ (2010) โ€” ํ•˜๋ฒ„๋“œ ๊ฒฝ์ œํ•™์ž๋“ค์˜ ์œ ๋ช…ํ•œ ๊ฒฝ์ œ ๋…ผ๋ฌธ์—์„œ ์—‘์…€ ์…€ ๋ฒ”์œ„ ์„ ํƒ ์‹ค์ˆ˜๋กœ ๋ฐ์ดํ„ฐ ์ผ๋ถ€๊ฐ€ ๊ณ„์‚ฐ์—์„œ ๋น ์ง. ์ด ๋…ผ๋ฌธ์ด ์—ฌ๋Ÿฌ ๋‚˜๋ผ์˜ ๊ธด์ถ• ์ •์ฑ… ๊ทผ๊ฑฐ๋กœ ์“ฐ์˜€๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ๊ธ‰๋ ฅ์ด ์–ด๋งˆ์–ด๋งˆํ–ˆ์Œ.

์ด๋Ÿฐ ์‚ฌ๋ก€๋“ค์„ ๋ณด๋ฉด ์—‘์…€ ์˜ค๋ฅ˜ ๊ฒ€์ฆ์ด ๋‹จ์ˆœํ•œ "๊ผผ๊ผผํ•จ"์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ์ ์œผ๋กœ ๋ฐ˜๋“œ์‹œ ๊ฐ–์ถฐ์•ผ ํ•  ์ธํ”„๋ผ๋ผ๋Š” ๊ฒŒ ๋А๊ปด์ง€์ฃ ? ๊ทธ๋ž˜์„œ ์˜ค๋Š˜ ๋ฐฐ์šธ ํ’ˆ์งˆ ๋ณด์ฆ(QA) ์ž๋™ํ™” ์‹œ์Šคํ…œ์ด ์ง„์งœ ์ค‘์š”ํ•œ ๊ฑฐ์˜ˆ์š”.

๐Ÿ’ก ์•Œ์•„๋‘๋ฉด ์ข‹์€ ํ†ต๊ณ„: KPMG ์—ฐ๊ตฌ์— ๋”ฐ๋ฅด๋ฉด ๊ธฐ์—… ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์˜ ์•ฝ 90%์— ์˜ค๋ฅ˜๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ทธ ์ค‘ 50%๋Š” ์ค‘์š”ํ•œ ์˜์‚ฌ๊ฒฐ์ •์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์˜ค๋ฅ˜๋ผ๊ณ  ํ•ด์š”. ๋ฌด์„ญ์ฃ ? ใ…‹ใ…‹ใ…‹

๐Ÿ—‚๏ธ 2. ์—‘์…€ ์˜ค๋ฅ˜์˜ ์ข…๋ฅ˜์™€ ๋ถ„๋ฅ˜ ์ฒด๊ณ„

์˜ค๋ฅ˜๋ฅผ ์žก์œผ๋ ค๋ฉด ๋จผ์ € ์˜ค๋ฅ˜๊ฐ€ ์–ด๋–ค ์ข…๋ฅ˜์ธ์ง€ ์•Œ์•„์•ผ ํ•ด์š”. ์—‘์…€ ์˜ค๋ฅ˜๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ ˆ์ด์–ด๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ“Œ ๋ ˆ์ด์–ด 1: ์—‘์…€์ด ์ง์ ‘ ํ‘œ์‹œํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ’

์—‘์…€์ด ์Šค์Šค๋กœ "์ด๊ฑฐ ์ด์ƒํ•ด์š”!" ํ•˜๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์˜ค๋ฅ˜๋“ค์ด์—์š”. ์ด๊ฑด ๋น„๊ต์  ์žก๊ธฐ ์‰ฌ์šด ํŽธ์ด์—์š”.

์˜ค๋ฅ˜ ์ฝ”๋“œ ์˜๋ฏธ ์ฃผ์š” ์›์ธ ํ•ด๊ฒฐ ๋ฐฉํ–ฅ
#DIV/0! 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋ถ„๋ชจ๊ฐ€ 0์ด๊ฑฐ๋‚˜ ๋นˆ ์…€ IFERROR, IF(๋ถ„๋ชจ=0,...) ์ฒ˜๋ฆฌ
#VALUE! ์ž˜๋ชป๋œ ๊ฐ’ ์œ ํ˜• ํ…์ŠคํŠธ๋ฅผ ์ˆซ์ž๋กœ ๊ณ„์‚ฐ ISNUMBER, VALUE() ํ•จ์ˆ˜ ํ™œ์šฉ
#REF! ์ž˜๋ชป๋œ ์ฐธ์กฐ ์ฐธ์กฐ ์…€ ์‚ญ์ œ๋จ ์ˆ˜์‹ ์žฌ๊ฒ€ํ† , ์ด๋ฆ„ ์ •์˜ ํ™œ์šฉ
#NAME? ์ธ์‹ ๋ถˆ๊ฐ€ ์ด๋ฆ„ ํ•จ์ˆ˜๋ช… ์˜คํƒ€, ์ •์˜ ์•ˆ ๋œ ์ด๋ฆ„ ํ•จ์ˆ˜๋ช… ํ™•์ธ, ์ด๋ฆ„ ๊ด€๋ฆฌ์ž ์ ๊ฒ€
#N/A ๊ฐ’ ์—†์Œ VLOOKUP ๋“ฑ ๊ฒ€์ƒ‰ ์‹คํŒจ IFERROR, IFNA ํ•จ์ˆ˜ ์ฒ˜๋ฆฌ
#NUM! ์ˆซ์ž ๋ฒ”์œ„ ์ดˆ๊ณผ ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ์ˆซ์ž ์ž…๋ ฅ๊ฐ’ ๋ฒ”์œ„ ์ œํ•œ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ
#NULL! ๊ต์ฐจ ๋ฒ”์œ„ ์—†์Œ ๋ฒ”์œ„ ์—ฐ์‚ฐ์ž ์˜ค์šฉ ์ฝœ๋ก (:) ์‚ฌ์šฉ ํ™•์ธ
๐Ÿ“Œ ๋ ˆ์ด์–ด 2: ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜ (์—‘์…€์ด ๋ชจ๋ฅด๋Š” ์˜ค๋ฅ˜)

์ด๊ฒŒ ์ง„์งœ ๋ฌด์„œ์šด ์˜ค๋ฅ˜์˜ˆ์š”. ์—‘์…€์€ ์•„๋ฌด ๋ถˆํ‰ ์—†์ด ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋†“๋Š”๋ฐ, ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ํ‹€๋ฆฐ ๊ฐ’์ธ ๊ฒฝ์šฐ์ฃ . ์˜ˆ๋ฅผ ๋“ค์–ด ํ•ฉ๊ณ„๋ฅผ ๋‚ด์•ผ ํ•˜๋Š”๋ฐ ํ‰๊ท ์„ ๋ƒˆ๋‹ค๊ฑฐ๋‚˜, ๋ฒ”์œ„๋ฅผ ํ•˜๋‚˜ ๋น ๋œจ๋ ธ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๊ฒฝ์šฐ์˜ˆ์š”.

๐ŸŽญ ๋…ผ๋ฆฌ์  ์˜ค๋ฅ˜์˜ ๋Œ€ํ‘œ ์œ ํ˜•๋“ค

๐Ÿ“Š ๋ฒ”์œ„ ์˜ค๋ฅ˜ SUM(A1:A9) ๋Œ€์‹  SUM(A1:A8)์ฒ˜๋Ÿผ ๋ฒ”์œ„๊ฐ€ ์ž˜๋ชป ์ง€์ •๋œ ๊ฒฝ์šฐ
๐Ÿ”„ ์ˆœํ™˜ ์ฐธ์กฐ ์…€์ด ์ž๊ธฐ ์ž์‹ ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ (๊ณ„์‚ฐ์ด ๋ฌดํ•œ ๋ฐ˜๋ณต๋จ)
๐Ÿ“‹ ๋ณต์‚ฌ ์˜ค๋ฅ˜ ์ ˆ๋Œ€์ฐธ์กฐ($)์™€ ์ƒ๋Œ€์ฐธ์กฐ ํ˜ผ๋™์œผ๋กœ ์ˆ˜์‹ ๋ณต์‚ฌ ์‹œ ์˜ค๋ฅ˜
๐Ÿ”ข ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ถˆ์ผ์น˜ ํ…์ŠคํŠธ๋กœ ์ €์žฅ๋œ ์ˆซ์ž๊ฐ€ ๊ณ„์‚ฐ์—์„œ ์ œ์™ธ๋˜๋Š” ๊ฒฝ์šฐ
๐Ÿ“… ๋‚ ์งœ ํ˜•์‹ ์˜ค๋ฅ˜ ๋‚ ์งœ๊ฐ€ ํ…์ŠคํŠธ๋กœ ์ธ์‹๋˜์–ด ๋‚ ์งœ ๊ณ„์‚ฐ์ด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ
๐Ÿ”— ๋งํฌ ์˜ค๋ฅ˜ ์™ธ๋ถ€ ํŒŒ์ผ ๋งํฌ๊ฐ€ ๋Š์–ด์ ธ ์ž˜๋ชป๋œ ๊ฐ’์ด ๊ณ ์ •๋˜๋Š” ๊ฒฝ์šฐ

๐Ÿ“Œ ๋ ˆ์ด์–ด 3: ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ์˜ค๋ฅ˜

๋ฐ์ดํ„ฐ ์ž์ฒด์˜ ํ’ˆ์งˆ ๋ฌธ์ œ์˜ˆ์š”. ์ˆ˜์‹์€ ๋ฉ€์ฉกํ•œ๋ฐ ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์“ฐ๋ ˆ๊ธฐ๋ฉด ๊ฒฐ๊ณผ๋„ ์“ฐ๋ ˆ๊ธฐ์ฃ . ์ด๊ฑธ IT์—์„œ๋Š” "Garbage In, Garbage Out"์ด๋ผ๊ณ  ํ•ด์š” ใ…‹ใ…‹ใ…‹.

๐Ÿ—‘๏ธ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ฌธ์ œ ์œ ํ˜•

โ€ข ์ค‘๋ณต ๋ฐ์ดํ„ฐ (Duplicate)
โ€ข ๊ณต๋ฐฑ ๋ฐ์ดํ„ฐ (Blank/Null)
โ€ข ์ด์ƒ์น˜ (Outlier)
โ€ข ๋ถˆ์ผ์น˜ ํ˜•์‹ (Format Inconsistency)
โ€ข ์˜คํƒ€ ๋ฐ ์ž˜๋ชป๋œ ์ž…๋ ฅ

๐ŸŽฏ ํ’ˆ์งˆ ๊ธฐ์ค€ 4๊ฐ€์ง€

โ€ข ์™„์ „์„ฑ: ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์žˆ๋Š”๊ฐ€?
โ€ข ์ •ํ™•์„ฑ: ๊ฐ’์ด ์‹ค์ œ์™€ ์ผ์น˜ํ•˜๋Š”๊ฐ€?
โ€ข ์ผ๊ด€์„ฑ: ํ˜•์‹์ด ํ†ต์ผ๋˜์–ด ์žˆ๋Š”๊ฐ€?
โ€ข ์œ ํšจ์„ฑ: ํ—ˆ์šฉ ๋ฒ”์œ„ ๋‚ด์˜ ๊ฐ’์ธ๊ฐ€?


๐Ÿ”ง 3. ์ˆ˜์‹ ๊ธฐ๋ฐ˜ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์‹œ์Šคํ…œ ๊ตฌ์ถ•ํ•˜๊ธฐ

์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹ค์ „์œผ๋กœ ๋“ค์–ด๊ฐ€๋ณผ๊ฒŒ์š”! ๋จผ์ € VBA ์—†์ด ์ˆœ์ˆ˜ ์ˆ˜์‹๋งŒ์œผ๋กœ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด์—์š”. ์ฝ”๋”ฉ ๋ชฐ๋ผ๋„ ๋ผ์š”, ์ˆ˜์‹๋งŒ ์•Œ๋ฉด ๋จ ใ…‹ใ…‹ใ…‹.

๐Ÿ›ก๏ธ 3-1. IFERROR / IFNA โ€” ์˜ค๋ฅ˜์˜ ๋ฐฉํŒจ๋ง‰์ด

๊ฐ€์žฅ ๊ธฐ๋ณธ์ด๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜์˜ˆ์š”. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋Œ€์‹  ๋ณด์—ฌ์ค„ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๊ฑฐ์˜ˆ์š”.

=IFERROR(๊ณ„์‚ฐ์‹, ์˜ค๋ฅ˜์‹œ_ํ‘œ์‹œ๊ฐ’)

์˜ˆ์‹œ: =IFERROR(A1/B1, "๋ถ„๋ชจ ์˜ค๋ฅ˜")
์˜ˆ์‹œ: =IFERROR(VLOOKUP(A1,D:E,2,0), "๋ฐ์ดํ„ฐ ์—†์Œ")

=IFNA(VLOOKUP(A1,D:E,2,0), "ํ•ด๋‹น ์—†์Œ") โ† #N/A๋งŒ ์ฒ˜๋ฆฌ
๐Ÿ’ก IFERROR vs IFNA: IFERROR๋Š” ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ์žก๊ณ , IFNA๋Š” #N/A ์˜ค๋ฅ˜๋งŒ ์žก์•„์š”. VLOOKUP ๊ฐ™์€ ๊ฒ€์ƒ‰ ํ•จ์ˆ˜์—์„œ๋Š” IFNA๋ฅผ ์“ฐ๋Š” ๊ฒŒ ๋” ์ •ํ™•ํ•ด์š”. ๋‹ค๋ฅธ ์˜ค๋ฅ˜(#REF! ๊ฐ™์€)๋Š” ์ˆจ๊ธฐ์ง€ ์•Š๊ณ  ๋ณด์—ฌ์ค˜์•ผ ํ•˜๊ฑฐ๋“ ์š”!
๐Ÿ” 3-2. IS ๊ณ„์—ด ํ•จ์ˆ˜ โ€” ๋ฐ์ดํ„ฐ ํƒ€์ž… ๊ฒ€์‚ฌ๊ด€

๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜๋“ค์ด์—์š”. ์ด๊ฑธ ํ™œ์šฉํ•˜๋ฉด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์„ ์ž๋™์œผ๋กœ ์ฒดํฌํ•  ์ˆ˜ ์žˆ์–ด์š”.

ํ•จ์ˆ˜ TRUE ๋ฐ˜ํ™˜ ์กฐ๊ฑด ํ™œ์šฉ ์˜ˆ์‹œ
ISNUMBER() ์ˆซ์ž์ธ ๊ฒฝ์šฐ =IF(ISNUMBER(A1),"โœ…","โŒ ์ˆซ์ž ์•„๋‹˜")
ISTEXT() ํ…์ŠคํŠธ์ธ ๊ฒฝ์šฐ =IF(ISTEXT(A1),"ํ…์ŠคํŠธ","์ˆซ์ž/๊ธฐํƒ€")
ISBLANK() ๋นˆ ์…€์ธ ๊ฒฝ์šฐ =IF(ISBLANK(A1),"โš ๏ธ ํ•„์ˆ˜์ž…๋ ฅ","OK")
ISERROR() ์˜ค๋ฅ˜๊ฐ’์ธ ๊ฒฝ์šฐ =IF(ISERROR(A1),"์˜ค๋ฅ˜๋ฐœ์ƒ",A1)
ISDATE() ๋‚ ์งœ์ธ ๊ฒฝ์šฐ ๋‚ ์งœ ํ˜•์‹ ๊ฒ€์ฆ์— ํ™œ์šฉ
๐Ÿ“Š 3-3. COUNTIF / COUNTIFS โ€” ์ค‘๋ณต ๋ฐ ์กฐ๊ฑด ๊ฒ€์‚ฌ

์ค‘๋ณต ๋ฐ์ดํ„ฐ ๊ฒ€์ถœ๊ณผ ์กฐ๊ฑด๋ถ€ ์นด์šดํŒ…์— ํ•„์ˆ˜์˜ˆ์š”!

' ์ค‘๋ณต ๊ฒ€์ถœ ์ˆ˜์‹ (B์—ด์— ์ž…๋ ฅ) =IF(COUNTIF($A$1:A1,A1)>1,"โš ๏ธ ์ค‘๋ณต","OK")

' ํŠน์ • ๋ฒ”์œ„ ๋‚ด ๊ฐ’ ๊ฐœ์ˆ˜ ํ™•์ธ =COUNTIFS(A:A,">=0",A:A,"<=100") โ† 0~100 ์‚ฌ์ด ๊ฐ’ ๊ฐœ์ˆ˜

' ๋นˆ ์…€ ๊ฐœ์ˆ˜ ํ™•์ธ =COUNTBLANK(A1:A100) โ† ๋นˆ ์…€ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜

' ์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜ =COUNTIF(A1:A100,"<0") โ† ์Œ์ˆ˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜
๐ŸŽฏ 3-4. ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ โ€” ์ž…๋ ฅ ๋‹จ๊ณ„์—์„œ ์ฐจ๋‹จํ•˜๊ธฐ

์˜ค๋ฅ˜๋ฅผ ์‚ฌํ›„์— ์žก๋Š” ๊ฒƒ๋ณด๋‹ค ์ž…๋ ฅ ๋‹จ๊ณ„์—์„œ ์•„์˜ˆ ๋ง‰๋Š” ๊ฒŒ ํ›จ์”ฌ ํšจ์œจ์ ์ด์—์š”. ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ(Data Validation)๊ฐ€ ๋ฐ”๋กœ ๊ทธ ์—ญํ• ์„ ํ•ด์š”.

โš™๏ธ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์„ค์ • ๊ฒฝ๋กœ

๋ฐ์ดํ„ฐ ํƒญ โ†’ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ โ†’ ์„ค์ •

๐Ÿ“Œ ์ •์ˆ˜: 1~100 ์‚ฌ์ด ์ •์ˆ˜๋งŒ ํ—ˆ์šฉ
๐Ÿ“Œ ์†Œ์ˆ˜: 0.0~1.0 ์‚ฌ์ด ์†Œ์ˆ˜๋งŒ ํ—ˆ์šฉ
๐Ÿ“Œ ๋ชฉ๋ก: ๋“œ๋กญ๋‹ค์šด ๋ชฉ๋ก์—์„œ๋งŒ ์„ ํƒ ๊ฐ€๋Šฅ
๐Ÿ“Œ ๋‚ ์งœ: ํŠน์ • ๋‚ ์งœ ๋ฒ”์œ„๋งŒ ํ—ˆ์šฉ
๐Ÿ“Œ ํ…์ŠคํŠธ ๊ธธ์ด: ์ตœ๋Œ€ ๊ธ€์ž ์ˆ˜ ์ œํ•œ
๐Ÿ“Œ ์‚ฌ์šฉ์ž ์ง€์ •: ์ˆ˜์‹์œผ๋กœ ๋ณต์žกํ•œ ์กฐ๊ฑด ์„ค์ • ๊ฐ€๋Šฅ

' ์‚ฌ์šฉ์ž ์ง€์ • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ˆ˜์‹ ์˜ˆ์‹œ

' ์ด๋ฉ”์ผ ํ˜•์‹ ๊ฒ€์‚ฌ (@ ํฌํ•จ ์—ฌ๋ถ€) =ISNUMBER(FIND("@",A1))

' ๋ฏธ๋ž˜ ๋‚ ์งœ๋งŒ ํ—ˆ์šฉ =A1>TODAY()

' ์ค‘๋ณต ์ž…๋ ฅ ๋ฐฉ์ง€ =COUNTIF($A$1:$A$100,A1)=1

' ํŠน์ • ํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฐ’๋งŒ ํ—ˆ์šฉ =LEFT(A1,2)="KR"
โš ๏ธ ์ฃผ์˜! ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋กœ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์š”. ์™„๋ฒฝํ•œ ๋ฐฉ์–ด๋ง‰์€ ์•„๋‹ˆ๋ผ๋Š” ๊ฑฐ ์•Œ์•„๋‘์„ธ์š”. ๊ทธ๋ž˜์„œ ์‚ฌํ›„ ๊ฒ€์ฆ ์‹œ์Šคํ…œ๋„ ํ•จ๊ป˜ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ด์š”!
๐Ÿ”— 3-5. ๊ต์ฐจ ๊ฒ€์ฆ ์ˆ˜์‹ ์‹œ์Šคํ…œ

์—ฌ๋Ÿฌ ์‹œํŠธ๋‚˜ ์—ฌ๋Ÿฌ ์—ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋กœ ์ผ์น˜ํ•˜๋Š”์ง€ ์ž๋™์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ต์ฐจ ๊ฒ€์ฆ ์ˆ˜์‹์ด์—์š”. ์‹ค๋ฌด์—์„œ ์ง„์งœ ๋งŽ์ด ์“ฐ์—ฌ์š”!

' ๋‘ ์—ด์˜ ํ•ฉ๊ณ„๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ =IF(SUM(B2:B100)=SUM(C2:C100),"โœ… ์ผ์น˜","โŒ ๋ถˆ์ผ์น˜ - ์ฐจ์ด: "&(SUM(B2:B100)-SUM(C2:C100)))

' ์‹œํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ผ์น˜ ํ™•์ธ =IF(Sheet1!A1=Sheet2!A1,"โœ…","โŒ ๋ถˆ์ผ์น˜")

' ์ „์ฒด ํ–‰ ํ•ฉ๊ณ„์™€ ์ดํ•ฉ๊ณ„ ์ผ์น˜ ์—ฌ๋ถ€ =IF(SUM(B2:B100)=B101,"โœ… ๊ฒ€์ฆ ํ†ต๊ณผ","โŒ ํ•ฉ๊ณ„ ์˜ค๋ฅ˜")

' MATCH๋กœ ๋ˆ„๋ฝ ๋ฐ์ดํ„ฐ ํ™•์ธ =IF(ISNA(MATCH(A1,Sheet2!A:A,0)),"โš ๏ธ ๋ˆ„๋ฝ","ํ™•์ธ๋จ")

๐Ÿค– VBA ์ž๋™ํ™” ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์‹œ์Šคํ…œ ๊ตฌ์กฐ๋„ ๐Ÿš€ ํŠธ๋ฆฌ๊ฑฐ ์ด๋ฒคํŠธ ๋ฒ„ํŠผ ํด๋ฆญ / ํŒŒ์ผ ์—ด๊ธฐ / ์ €์žฅ ์‹œ โš™๏ธ VBA ๊ฒ€์ฆ ์—”์ง„ ์‹คํ–‰ ์ „์ฒด ๋ฐ์ดํ„ฐ ๋ฒ”์œ„ ์ˆœํšŒ (For Each Loop) ๐Ÿ”ข ์ˆซ์ž/ํƒ€์ž… ๊ฒ€์‚ฌ IsNumeric, IsDate ๋นˆ ์…€, ๋ฒ”์œ„ ์ดˆ๊ณผ ํ™•์ธ ๐Ÿ”— ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ์ˆ˜์‹ ์˜ค๋ฅ˜ ์…€ ํƒ์ง€ ์ˆœํ™˜์ฐธ์กฐ ๊ฐ์ง€ ๐Ÿ“Š ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ ๊ฒ€์‚ฌ ํ•ฉ๊ณ„ ๊ต์ฐจ ๊ฒ€์ฆ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ํƒ์ง€ ๐Ÿ“‹ ๊ฒฐ๊ณผ ๋ฆฌํฌํŠธ ์ž๋™ ์ƒ์„ฑ ์˜ค๋ฅ˜ ์…€ ํ•˜์ด๋ผ์ดํŠธ + ๋กœ๊ทธ ์‹œํŠธ ๊ธฐ๋ก + ์•Œ๋ฆผ
๐Ÿค– 4. VBA๋กœ ๋งŒ๋“œ๋Š” ์™„์ „ ์ž๋™ํ™” ์˜ค๋ฅ˜ ๊ฒ€์ฆ ์‹œ์Šคํ…œ

์ด์ œ ์ง„์งœ ํ•ต์‹ฌ์ด์—์š”! VBA(Visual Basic for Applications)๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ˆ˜์‹์œผ๋กœ๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋Š” ๋ณต์žกํ•œ ๊ฒ€์ฆ ๋กœ์ง์„ ์™„์ „ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ฒ˜์Œ์—” ์–ด๋ ค์›Œ ๋ณด์—ฌ๋„ ๊ตฌ์กฐ๋งŒ ์ดํ•ดํ•˜๋ฉด ์ง„์งœ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š” ใ…‹ใ…‹ใ…‹.

๐Ÿ”‘ 4-1. VBA ๊ธฐ๋ณธ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ๋ชจ๋“ˆ

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ๋ชจ๋“ˆ์ด์—์š”. VBA ํŽธ์ง‘๊ธฐ(Alt+F11)์—์„œ ์ƒˆ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๊ณ  ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋ผ์š”!

Sub ๋ฐ์ดํ„ฐํ’ˆ์งˆ๊ฒ€์‚ฌ() Dim ws As Worksheet Dim rng As Range Dim cell As Range Dim errorCount As Integer Dim logWs As Worksheet Dim logRow As Integer ' ๊ฒ€์‚ฌ ๋Œ€์ƒ ์‹œํŠธ ์„ค์ • Set ws = ThisWorkbook.Sheets("๋ฐ์ดํ„ฐ") Set rng = ws.Range("A2:F100") ' ๊ฒ€์‚ฌ ๋ฒ”์œ„ ' ๋กœ๊ทธ ์‹œํŠธ ์ƒ์„ฑ ๋˜๋Š” ์ดˆ๊ธฐํ™” On Error Resume Next Set logWs = ThisWorkbook.Sheets("์˜ค๋ฅ˜๋กœ๊ทธ") On Error GoTo 0 If logWs Is Nothing Then Set logWs = ThisWorkbook.Sheets.Add(After:=ws) logWs.Name = "์˜ค๋ฅ˜๋กœ๊ทธ" Else logWs.Cells.Clear End If ' ๋กœ๊ทธ ํ—ค๋” ์ž‘์„ฑ logWs.Range("A1").Value = "์…€ ์ฃผ์†Œ" logWs.Range("B1").Value = "์˜ค๋ฅ˜ ์œ ํ˜•" logWs.Range("C1").Value = "ํ˜„์žฌ ๊ฐ’" logWs.Range("D1").Value = "๋ฐœ๊ฒฌ ์‹œ๊ฐ„" logRow = 2 errorCount = 0 ' ์ „์ฒด ์…€ ์ˆœํšŒ ๊ฒ€์‚ฌ For Each cell In rng Dim hasError As Boolean Dim errorMsg As String hasError = False errorMsg = "" ' 1. ์ˆ˜์‹ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ If IsError(cell.Value) Then hasError = True errorMsg = "์ˆ˜์‹ ์˜ค๋ฅ˜: " & CStr(cell.Value) cell.Interior.Color = RGB(255, 100, 100) ' ๋นจ๊ฐ„์ƒ‰ ํ•˜์ด๋ผ์ดํŠธ End If ' 2. ๋นˆ ์…€ ๊ฒ€์‚ฌ (ํ•„์ˆ˜ ์—ด: A,B,C์—ด) If Not hasError Then If cell.Column <= 3 And IsEmpty(cell) Then hasError = True errorMsg = "ํ•„์ˆ˜๊ฐ’ ๋ˆ„๋ฝ" cell.Interior.Color = RGB(255, 200, 100) ' ์ฃผํ™ฉ์ƒ‰ End If End If ' 3. ์ˆซ์ž ๋ฒ”์œ„ ๊ฒ€์‚ฌ (D์—ด: 0~1000 ์‚ฌ์ด์—ฌ์•ผ ํ•จ) If Not hasError Then If cell.Column = 4 Then If IsNumeric(cell.Value) Then If cell.Value < 0 Or cell.Value > 1000 Then hasError = True errorMsg = "๋ฒ”์œ„ ์ดˆ๊ณผ: " & cell.Value & " (ํ—ˆ์šฉ: 0~1000)" cell.Interior.Color = RGB(255, 150, 150) End If Else hasError = True errorMsg = "์ˆซ์ž ์•„๋‹˜: " & cell.Value cell.Interior.Color = RGB(200, 100, 255) End If End If End If ' ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ ์‹œ ๋กœ๊ทธ ๊ธฐ๋ก If hasError Then errorCount = errorCount + 1 logWs.Cells(logRow, 1).Value = cell.Address logWs.Cells(logRow, 2).Value = errorMsg logWs.Cells(logRow, 3).Value = CStr(cell.Value) logWs.Cells(logRow, 4).Value = Now() logRow = logRow + 1 Else ' ์ •์ƒ ์…€์€ ๋ฐฐ๊ฒฝ์ƒ‰ ์ดˆ๊ธฐํ™” cell.Interior.ColorIndex = xlNone End If Next cell ' ๊ฒฐ๊ณผ ์•Œ๋ฆผ If errorCount = 0 Then MsgBox "โœ… ๊ฒ€์‚ฌ ์™„๋ฃŒ! ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.", vbInformation Else MsgBox "โš ๏ธ ์ด " & errorCount & "๊ฐœ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค." & Chr(10) & _ "'์˜ค๋ฅ˜๋กœ๊ทธ' ์‹œํŠธ์—์„œ ์ƒ์„ธ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์„ธ์š”.", vbExclamation End If End Sub
๐Ÿ”„ 4-2. ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ž๋™ ํƒ์ง€ ๋ฐ ์ฒ˜๋ฆฌ
Sub ์ค‘๋ณต๋ฐ์ดํ„ฐํƒ์ง€() Dim ws As Worksheet Dim lastRow As Long Dim i As Long, j As Long Dim dupCount As Integer Set ws = ThisWorkbook.Sheets("๋ฐ์ดํ„ฐ") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row dupCount = 0 ' A์—ด ๊ธฐ์ค€ ์ค‘๋ณต ํƒ์ง€ For i = 2 To lastRow For j = i + 1 To lastRow If ws.Cells(i, 1).Value = ws.Cells(j, 1).Value And _ ws.Cells(i, 1).Value <> "" Then ' ์ค‘๋ณต ํ–‰ ํ•˜์ด๋ผ์ดํŠธ ws.Rows(j).Interior.Color = RGB(255, 220, 220) ws.Cells(j, 1).Comment.Delete ws.Cells(j, 1).AddComment "์ค‘๋ณต ๋ฐ์ดํ„ฐ - " & i & "ํ–‰๊ณผ ๋™์ผ" dupCount = dupCount + 1 End If Next j Next i MsgBox "์ค‘๋ณต ํƒ์ง€ ์™„๋ฃŒ: " & dupCount & "๊ฐœ ๋ฐœ๊ฒฌ", vbInformation End Sub
๐Ÿ“… 4-3. ๋‚ ์งœ ํ˜•์‹ ์ž๋™ ๊ฒ€์ฆ ๋ฐ ๋ณ€ํ™˜

๋‚ ์งœ ์˜ค๋ฅ˜๋Š” ์ •๋ง ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜ˆ์š”. ํ…์ŠคํŠธ๋กœ ์ €์žฅ๋œ ๋‚ ์งœ๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ์ฝ”๋“œ์˜ˆ์š”.

Sub ๋‚ ์งœํ˜•์‹๊ฒ€์ฆ() Dim ws As Worksheet Dim cell As Range Dim rng As Range Dim fixCount As Integer Set ws = ThisWorkbook.Sheets("๋ฐ์ดํ„ฐ") Set rng = ws.Range("E2:E100") ' ๋‚ ์งœ ์—ด fixCount = 0 For Each cell In rng If Not IsEmpty(cell) Then ' ํ…์ŠคํŠธ๋กœ ์ €์žฅ๋œ ๋‚ ์งœ ๊ฐ์ง€ If Not IsDate(cell.Value) Then ' ๋ณ€ํ™˜ ์‹œ๋„ Dim tempDate As String tempDate = CStr(cell.Value) ' YYYYMMDD ํ˜•์‹ ์ฒ˜๋ฆฌ (์˜ˆ: 20240115) If Len(tempDate) = 8 And IsNumeric(tempDate) Then cell.Value = DateSerial(Left(tempDate, 4), _ Mid(tempDate, 5, 2), _ Right(tempDate, 2)) cell.NumberFormat = "yyyy-mm-dd" cell.Interior.Color = RGB(200, 255, 200) ' ์ดˆ๋ก: ์ž๋™์ˆ˜์ •๋จ fixCount = fixCount + 1 Else ' ๋ณ€ํ™˜ ๋ถˆ๊ฐ€ - ์˜ค๋ฅ˜ ํ‘œ์‹œ cell.Interior.Color = RGB(255, 150, 150) cell.AddComment "๋‚ ์งœ ํ˜•์‹ ์˜ค๋ฅ˜ - ์ˆ˜๋™ ํ™•์ธ ํ•„์š”" End If End If End If Next cell MsgBox "๋‚ ์งœ ๊ฒ€์ฆ ์™„๋ฃŒ. ์ž๋™ ์ˆ˜์ •: " & fixCount & "๊ฐœ", vbInformation End Sub
๐Ÿ“Š 4-4. ์ž๋™ QA ๋ฆฌํฌํŠธ ์ƒ์„ฑ๊ธฐ

๊ฒ€์ฆ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์œ ๋ฆฌํฌํŠธ ์‹œํŠธ๋กœ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ์˜ˆ์š”. ์ด๊ฑฐ ์“ฐ๋ฉด ํŒ€์žฅ๋‹˜ํ•œํ…Œ "QA ์™„๋ฃŒ ๋ณด๊ณ ์„œ์ž…๋‹ˆ๋‹ค~" ํ•˜๊ณ  ๋ฐ”๋กœ ์ œ์ถœ ๊ฐ€๋Šฅ ใ…‹ใ…‹ใ…‹.

Sub QA๋ฆฌํฌํŠธ์ƒ์„ฑ() Dim reportWs As Worksheet Dim dataWs As Worksheet Dim lastRow As Long Dim totalCells As Long Dim errorCells As Long Dim blankCells As Long Dim dupCells As Long Set dataWs = ThisWorkbook.Sheets("๋ฐ์ดํ„ฐ") lastRow = dataWs.Cells(dataWs.Rows.Count, "A").End(xlUp).Row ' ๋ฆฌํฌํŠธ ์‹œํŠธ ์ƒ์„ฑ On Error Resume Next Application.DisplayAlerts = False ThisWorkbook.Sheets("QA๋ฆฌํฌํŠธ").Delete Application.DisplayAlerts = True On Error GoTo 0 Set reportWs = ThisWorkbook.Sheets.Add(After:=dataWs) reportWs.Name = "QA๋ฆฌํฌํŠธ" ' ๋ฆฌํฌํŠธ ํ—ค๋” ์Šคํƒ€์ผ๋ง With reportWs.Range("A1:F1") .Merge .Value = "๐Ÿ“Š ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ณด์ฆ(QA) ๋ฆฌํฌํŠธ" .Font.Size = 16 .Font.Bold = True .Interior.Color = RGB(26, 26, 46) .Font.Color = RGB(255, 255, 255) .HorizontalAlignment = xlCenter .RowHeight = 40 End With ' ๊ธฐ๋ณธ ํ†ต๊ณ„ ๊ณ„์‚ฐ totalCells = (lastRow - 1) * 6 ' 6์—ด ๊ธฐ์ค€ errorCells = 0 blankCells = 0 Dim cell As Range For Each cell In dataWs.Range("A2:F" & lastRow) If IsError(cell.Value) Then errorCells = errorCells + 1 If IsEmpty(cell) Then blankCells = blankCells + 1 Next cell ' ๋ฆฌํฌํŠธ ๋‚ด์šฉ ์ž‘์„ฑ reportWs.Range("A3").Value = "๊ฒ€์‚ฌ ์ผ์‹œ" reportWs.Range("B3").Value = Now() reportWs.Range("A4").Value = "๊ฒ€์‚ฌ ๋ฒ”์œ„" reportWs.Range("B4").Value = "A2:F" & lastRow & " (" & totalCells & "๊ฐœ ์…€)" reportWs.Range("A5").Value = "์ด ์˜ค๋ฅ˜ ์ˆ˜" reportWs.Range("B5").Value = errorCells reportWs.Range("A6").Value = "๋นˆ ์…€ ์ˆ˜" reportWs.Range("B6").Value = blankCells reportWs.Range("A7").Value = "๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ์ ์ˆ˜" ' ํ’ˆ์งˆ ์ ์ˆ˜ ๊ณ„์‚ฐ (100์  ๋งŒ์ ) Dim qualityScore As Double If totalCells > 0 Then qualityScore = (1 - (errorCells + blankCells) / totalCells) * 100 Else qualityScore = 0 End If reportWs.Range("B7").Value = Round(qualityScore, 1) & "์ " ' ์ ์ˆ˜์— ๋”ฐ๋ฅธ ์ƒ‰์ƒ If qualityScore >= 95 Then reportWs.Range("B7").Interior.Color = RGB(100, 200, 100) ' ์ดˆ๋ก ElseIf qualityScore >= 80 Then reportWs.Range("B7").Interior.Color = RGB(255, 200, 100) ' ๋…ธ๋ž‘ Else reportWs.Range("B7").Interior.Color = RGB(255, 100, 100) ' ๋นจ๊ฐ• End If reportWs.Columns("A:F").AutoFit MsgBox "โœ… QA ๋ฆฌํฌํŠธ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!", vbInformation End Sub
๐Ÿ’ก VBA ์‹คํ–‰ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ: ๊ฐœ๋ฐœ ๋„๊ตฌ ํƒญ โ†’ ์‚ฝ์ž… โ†’ ์–‘์‹ ์ปจํŠธ๋กค โ†’ ๋‹จ์ถ”๋ฅผ ํด๋ฆญํ•˜๊ณ  ์‹œํŠธ์— ๊ทธ๋ฆฌ๋ฉด ๋ฒ„ํŠผ์ด ์ƒ๊ฒจ์š”. ๋ฒ„ํŠผ์— ๋งคํฌ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ฉด ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ์ „์ฒด ๊ฒ€์ฆ์ด ์‹คํ–‰๋ผ์š”!

๐ŸŽจ 5. ์กฐ๊ฑด๋ถ€ ์„œ์‹์œผ๋กœ ์‹œ๊ฐ์  ์˜ค๋ฅ˜ ๊ฒฝ๋ณด ์‹œ์Šคํ…œ ๋งŒ๋“ค๊ธฐ

์กฐ๊ฑด๋ถ€ ์„œ์‹(Conditional Formatting)์€ VBA ์—†์ด๋„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์˜ˆ์š”. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์ž๋™์œผ๋กœ ์ƒ‰์ƒ์ด ๋ฐ”๋€Œ๋‹ˆ๊นŒ ์ง„์งœ ํŽธํ•ด์š” ใ…‹ใ…‹ใ…‹.

๐Ÿšฆ 5-1. ์‹ ํ˜ธ๋“ฑ ์‹œ์Šคํ…œ ๊ตฌ์ถ•

๋ฐ์ดํ„ฐ ์ƒํƒœ๋ฅผ ์‹ ํ˜ธ๋“ฑ์ฒ˜๋Ÿผ ๋นจ๊ฐ•/๋…ธ๋ž‘/์ดˆ๋ก์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ์‹œ์Šคํ…œ์ด์—์š”. ์ง๊ด€์ ์ด๋ผ ๋ˆ„๊ตฌ๋‚˜ ๋ฐ”๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿšฆ ์‹ ํ˜ธ๋“ฑ ์กฐ๊ฑด๋ถ€ ์„œ์‹ ์„ค์ •๋ฒ•

ํ™ˆ ํƒญ โ†’ ์กฐ๊ฑด๋ถ€ ์„œ์‹ โ†’ ์ƒˆ ๊ทœ์น™ โ†’ ์ˆ˜์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ์‹ ์ง€์ •

๐Ÿ”ด ๋นจ๊ฐ• (์œ„ํ—˜): =OR(ISBLANK(A1),ISERROR(A1),A1<0)
โ†’ ๋นˆ ์…€, ์˜ค๋ฅ˜, ์Œ์ˆ˜๊ฐ’ โ†’ ๋นจ๊ฐ„ ๋ฐฐ๊ฒฝ

๐ŸŸก ๋…ธ๋ž‘ (์ฃผ์˜): =AND(A1>=0,A1<10)
โ†’ 0 ์ด์ƒ 10 ๋ฏธ๋งŒ โ†’ ๋…ธ๋ž€ ๋ฐฐ๊ฒฝ

๐ŸŸข ์ดˆ๋ก (์ •์ƒ): =AND(A1>=10,A1<=1000)
โ†’ ์ •์ƒ ๋ฒ”์œ„ โ†’ ์ดˆ๋ก ๋ฐฐ๊ฒฝ

๐Ÿ” 5-2. ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ž๋™ ํ•˜์ด๋ผ์ดํŠธ
' ์กฐ๊ฑด๋ถ€ ์„œ์‹ ์ˆ˜์‹ (A์—ด ์ค‘๋ณต ๊ฐ•์กฐ) =COUNTIF($A$1:$A$100,A1)>1

' ํ˜„์žฌ ํ–‰ ์ „์ฒด๋ฅผ ํ•˜์ด๋ผ์ดํŠธํ•˜๋Š” ์ˆ˜์‹ (ํ–‰ ์ „์ฒด ์„ ํƒ ํ›„ ์ ์šฉ) =COUNTIF($A$1:$A$100,$A1)>1
๐Ÿ“Š 5-3. ์•„์ด์ฝ˜ ์ง‘ํ•ฉ์œผ๋กœ ํ’ˆ์งˆ ๋“ฑ๊ธ‰ ํ‘œ์‹œ

์กฐ๊ฑด๋ถ€ ์„œ์‹์˜ "์•„์ด์ฝ˜ ์ง‘ํ•ฉ" ๊ธฐ๋Šฅ์„ ์“ฐ๋ฉด ์ˆซ์ž ์˜†์— ์ž๋™์œผ๋กœ ํ™”์‚ดํ‘œ๋‚˜ ์‹ ํ˜ธ๋“ฑ ์•„์ด์ฝ˜์ด ๋ถ™์–ด์š”. ํ’ˆ์งˆ ์ ์ˆ˜ ํ‘œ์‹œ์— ๋”ฑ์ด์—์š”!

โš™๏ธ ์•„์ด์ฝ˜ ์ง‘ํ•ฉ ์„ค์ •

์กฐ๊ฑด๋ถ€ ์„œ์‹ โ†’ ์•„์ด์ฝ˜ ์ง‘ํ•ฉ โ†’ 3๊ฐ€์ง€ ์‹ ํ˜ธ๋“ฑ

โ€ข ๐ŸŸข ์ดˆ๋ก ์‹ ํ˜ธ๋“ฑ: ๊ฐ’ โ‰ฅ 90 (ํผ์„ผํŠธ)
โ€ข ๐ŸŸก ๋…ธ๋ž€ ์‹ ํ˜ธ๋“ฑ: ๊ฐ’ โ‰ฅ 70 (ํผ์„ผํŠธ)
โ€ข ๐Ÿ”ด ๋นจ๊ฐ„ ์‹ ํ˜ธ๋“ฑ: ๊ฐ’ < 70 (ํผ์„ผํŠธ)

* "์œ ํ˜•"์„ "์ˆซ์ž"๋กœ ๋ฐ”๊พธ๋ฉด ์ ˆ๋Œ€๊ฐ’ ๊ธฐ์ค€์œผ๋กœ๋„ ์„ค์ • ๊ฐ€๋Šฅํ•ด์š”!

๐Ÿ“ˆ 5-4. ๋ฐ์ดํ„ฐ ๋ง‰๋Œ€๋กœ ์ง๊ด€์  ๋น„๊ต

์ˆซ์ž ํฌ๊ธฐ๋ฅผ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„์ฒ˜๋Ÿผ ์…€ ์•ˆ์— ํ‘œ์‹œํ•ด์ค˜์„œ ์ด์ƒ์น˜๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์š”.

' ์กฐ๊ฑด๋ถ€ ์„œ์‹ โ†’ ๋ฐ์ดํ„ฐ ๋ง‰๋Œ€ โ†’ ๊ทธ๋ผ๋ฐ์ด์…˜ ์ฑ„์šฐ๊ธฐ ' ์ตœ์†Ÿ๊ฐ’: ์ž๋™ / ์ตœ๋Œ“๊ฐ’: ์ž๋™ ์„ค์ • ' ๋˜๋Š” ์ตœ์†Ÿ๊ฐ’์„ 0, ์ตœ๋Œ“๊ฐ’์„ ๊ธฐ๋Œ€ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ๊ณ ์ •ํ•˜๋ฉด ๋” ์ •ํ™•ํ•ด์š”

๐Ÿš€ 6. ๊ณ ๊ธ‰ ์˜ค๋ฅ˜ ๊ฒ€์ฆ ๊ธฐ๋ฒ• โ€” ํ”„๋กœ์ฒ˜๋Ÿผ ์“ฐ๊ธฐ

๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋‹ค ์ตํ˜”์œผ๋ฉด ์ด์ œ ํ”„๋กœ ๋ ˆ๋ฒจ๋กœ ์˜ฌ๋ผ๊ฐ€๋ณผ๊ฒŒ์š”! ์‹ค๋ฌด์—์„œ ์ง„์งœ ์ฐจ์ด๋ฅผ ๋งŒ๋“œ๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋ฒ•๋“ค์ด์—์š” ใ…‹ใ…‹ใ…‹.

๐Ÿ”ฎ 6-1. ๋™์  ๋ฐฐ์—ด ์ˆ˜์‹์œผ๋กœ ์˜ค๋ฅ˜ ๋ชฉ๋ก ์ž๋™ ์ถ”์ถœ

Excel 365 / Excel 2019 ์ด์ƒ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋™์  ๋ฐฐ์—ด ์ˆ˜์‹์ด์—์š”. ์˜ค๋ฅ˜ ์…€ ๋ชฉ๋ก์„ ์ž๋™์œผ๋กœ ๋ฝ‘์•„์ค˜์š”!

' ์˜ค๋ฅ˜๊ฐ’์ด ์žˆ๋Š” ์…€ ์ฃผ์†Œ ๋ชฉ๋ก ์ถ”์ถœ (FILTER ํ•จ์ˆ˜) =FILTER(A1:A100, ISERROR(A1:A100), "์˜ค๋ฅ˜ ์—†์Œ")

' ๋นˆ ์…€ ์ œ์™ธํ•˜๊ณ  ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœ =FILTER(A1:A100, NOT(ISBLANK(A1:A100)))

' ์ค‘๋ณต ์ œ๊ฑฐ๋œ ๊ณ ์œ ๊ฐ’ ๋ชฉ๋ก =UNIQUE(A1:A100)

' ์กฐ๊ฑด์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ์ •๋ ฌ =SORT(FILTER(A1:B100, B1:B100>0), 2, -1) โ† B์—ด ์–‘์ˆ˜๋งŒ, ๋‚ด๋ฆผ์ฐจ์ˆœ
๐Ÿงฎ 6-2. LAMBDA ํ•จ์ˆ˜๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒ€์ฆ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ

Excel 365์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ LAMBDA ํ•จ์ˆ˜๋ฅผ ์“ฐ๋ฉด ๋‚˜๋งŒ์˜ ์ปค์Šคํ…€ ๊ฒ€์ฆ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด์š”. ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด๋‘๋ฉด ๊ณ„์† ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ!

' ์ด๋ฆ„ ๊ด€๋ฆฌ์ž์—์„œ "๋ฒ”์œ„๊ฒ€์ฆ" ์ด๋ฆ„์œผ๋กœ LAMBDA ์ •์˜ =LAMBDA(๊ฐ’, ์ตœ์†Œ, ์ตœ๋Œ€, IF(ISBLANK(๊ฐ’), "๋นˆ๊ฐ’", IF(NOT(ISNUMBER(๊ฐ’)), "์ˆซ์ž์•„๋‹˜", IF(๊ฐ’<์ตœ์†Œ, "์ตœ์†Ÿ๊ฐ’๋ฏธ๋‹ฌ", IF(๊ฐ’>์ตœ๋Œ€, "์ตœ๋Œ“๊ฐ’์ดˆ๊ณผ", "โœ…์ •์ƒ")))))

' ์‚ฌ์šฉ ์˜ˆ์‹œ =๋ฒ”์œ„๊ฒ€์ฆ(A1, 0, 100) โ† A1์ด 0~100 ์‚ฌ์ด์ธ์ง€ ๊ฒ€์ฆ =๋ฒ”์œ„๊ฒ€์ฆ(B1, 1000, 999999) โ† B1์ด 1000~999999 ์‚ฌ์ด์ธ์ง€ ๊ฒ€์ฆ
๐Ÿ“‹ 6-3. Power Query๋ฅผ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฒ€์ฆ

Power Query(๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๋ณ€ํ™˜)๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ ๊ฒ€์ฆ์— ํŠนํžˆ ๊ฐ•๋ ฅํ•ด์š”. ์—‘์…€ 2016 ์ด์ƒ์—์„œ ๊ธฐ๋ณธ ํƒ‘์žฌ๋˜์–ด ์žˆ์–ด์š”.

โšก Power Query ํ’ˆ์งˆ ๊ฒ€์ฆ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“Œ ์—ด ํ’ˆ์งˆ ๋ณด๊ธฐ: ๋ฐ์ดํ„ฐ ํƒญ โ†’ ์ฟผ๋ฆฌ ํŽธ์ง‘๊ธฐ โ†’ ๋ณด๊ธฐ โ†’ ์—ด ํ’ˆ์งˆ
โ†’ ๊ฐ ์—ด์˜ ์œ ํšจ/์˜ค๋ฅ˜/๋นˆ ๊ฐ’ ๋น„์œจ์„ ์ž๋™์œผ๋กœ ์‹œ๊ฐํ™”ํ•ด์ค˜์š”!

๐Ÿ“Œ ์—ด ๋ถ„ํฌ ๋ณด๊ธฐ: ๊ฐ’์˜ ๋ถ„ํฌ๋ฅผ ํžˆ์Šคํ† ๊ทธ๋žจ์œผ๋กœ ์ž๋™ ํ‘œ์‹œ

๐Ÿ“Œ ์˜ค๋ฅ˜ ํ–‰ ํ•„ํ„ฐ๋ง: ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ํ–‰๋งŒ ์ž๋™์œผ๋กœ ํ•„ํ„ฐ๋ง

๐Ÿ“Œ ๋ฐ์ดํ„ฐ ํ˜•์‹ ์ž๋™ ๊ฐ์ง€: ๊ฐ ์—ด์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ž๋™ ์„ค์ •

๐Ÿ“Œ M ์–ธ์–ด๋กœ ์ปค์Šคํ…€ ๊ฒ€์ฆ: ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ ์ ์šฉ ๊ฐ€๋Šฅ

๐Ÿ” 6-4. ์‹œํŠธ ๋ณดํ˜ธ์™€ ๊ฒ€์ฆ ์‹œ์Šคํ…œ ์—ฐ๋™

๊ฒ€์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ–ˆ์œผ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ˆ˜๋กœ ์ˆ˜์‹์„ ๊ฑด๋“œ๋ฆฌ์ง€ ๋ชปํ•˜๋„๋ก ์‹œํŠธ ๋ณดํ˜ธ๋ฅผ ํ•จ๊ป˜ ์„ค์ •ํ•ด์•ผ ํ•ด์š”.

Sub ์‹œํŠธ๋ณดํ˜ธ์„ค์ •() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("๋ฐ์ดํ„ฐ") ' ์ˆ˜์‹ ์…€๋งŒ ์ž ๊ธˆ (์ž…๋ ฅ ์…€์€ ์ž ๊ธˆ ํ•ด์ œ) ws.Cells.Locked = False ' ์ „์ฒด ์ž ๊ธˆ ํ•ด์ œ ' ์ˆ˜์‹์ด ์žˆ๋Š” ์…€๋งŒ ์ž ๊ธˆ Dim cell As Range For Each cell In ws.UsedRange If cell.HasFormula Then cell.Locked = True End If Next cell ' ์‹œํŠธ ๋ณดํ˜ธ (์ˆ˜์‹ ์ˆจ๊ธฐ๊ธฐ ํฌํ•จ) ws.Protect Password:="QA2024", _ AllowFiltering:=True, _ AllowSorting:=True, _ DrawingObjects:=True, _ Contents:=True MsgBox "โœ… ์‹œํŠธ ๋ณดํ˜ธ ์™„๋ฃŒ! ์ˆ˜์‹ ์…€์ด ์ž ๊ฒผ์Šต๋‹ˆ๋‹ค.", vbInformation End Sub

๐Ÿ“Š ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋Œ€์‹œ๋ณด๋“œ (์˜ˆ์‹œ) ํ’ˆ์งˆ ์ ์ˆ˜ 87 ์  ์œ„ํ—˜ ์ฃผ์˜ ์šฐ์ˆ˜ ์ด ๊ฒ€์‚ฌ ์…€ 2,400๊ฐœ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ 312๊ฐœ ์˜ค๋ฅ˜ ์œ ํ˜•๋ณ„ ๋ถ„ํฌ ๋นˆ ์…€ 70% ์ˆ˜์‹์˜ค๋ฅ˜ 30% ๋ฒ”์œ„์ดˆ๊ณผ 20% ์ค‘๋ณต๋ฐ์ดํ„ฐ 10% ๐Ÿ“‹ ๊ฒ€์‚ฌ ์š”์•ฝ โœ… ์ •์ƒ ์…€: 2,088๊ฐœ (87%) โš ๏ธ ๊ฒฝ๊ณ  ์…€: 218๊ฐœ (9.1%) โŒ ์˜ค๋ฅ˜ ์…€: 94๊ฐœ (3.9%) ๊ฒ€์‚ฌ ์‹œ๊ฐ„: 2024-01-15 09:32 ๊ฒ€์‚ฌ ๋ฒ”์œ„: Sheet1 A1:F400 ์ƒํƒœ: ๊ฒ€ํ†  ํ•„์š” ๐Ÿ” โš ๏ธ ๊ฒ€ํ†  ํ•„์š” ๊ตฌ๊ฐ„ 95์  ์ด์ƒ: ์šฐ์ˆ˜ / 80~95: ์–‘ํ˜ธ / 80๋ฏธ๋งŒ: ์œ„ํ—˜
๐Ÿ“‹ 7. ์‹ค์ „ QA ์ฒดํฌ๋ฆฌ์ŠคํŠธ โ€” ๋ฐฐํฌ ์ „ ๋ฐ˜๋“œ์‹œ ํ™•์ธ!

์—‘์…€ ํŒŒ์ผ์„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ๋ณด๊ณ ์„œ๋กœ ์ œ์ถœํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ๊ฑฐ์ณ์•ผ ํ•  ์ฒดํฌ๋ฆฌ์ŠคํŠธ์˜ˆ์š”. ์ด๊ฑฐ ํ•˜๋‚˜๋งŒ ์ž˜ ์ง€์ผœ๋„ "์ด ์ˆซ์ž ๋งž์•„?" ์†Œ๋ฆฌ ์•ˆ ๋“ค์–ด์š” ใ…‹ใ…‹ใ…‹.

โœ… 1๋‹จ๊ณ„: ์ˆ˜์‹ ๊ฒ€์ฆ

โ–ก ๋ชจ๋“  SUM/AVERAGE ๋ฒ”์œ„๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธ
โ–ก VLOOKUP/XLOOKUP ์ฐธ์กฐ ๋ฒ”์œ„๊ฐ€ ์ •ํ™•ํ•œ์ง€ ํ™•์ธ
โ–ก ์ ˆ๋Œ€์ฐธ์กฐ($)์™€ ์ƒ๋Œ€์ฐธ์กฐ๊ฐ€ ์˜๋„๋Œ€๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
โ–ก ์ˆœํ™˜ ์ฐธ์กฐ ์—†๋Š”์ง€ ํ™•์ธ (์ˆ˜์‹ ํƒญ โ†’ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ โ†’ ์ˆœํ™˜ ์ฐธ์กฐ)
โ–ก #DIV/0!, #VALUE!, #REF!, #N/A ์˜ค๋ฅ˜ ์—†๋Š”์ง€ ํ™•์ธ
โ–ก IFERROR๋กœ ์ฒ˜๋ฆฌ๋œ ์˜ค๋ฅ˜๊ฐ€ ์‹ค์ œ๋กœ ๋ฌธ์ œ๋ฅผ ์ˆจ๊ธฐ๊ณ  ์žˆ์ง„ ์•Š์€์ง€ ํ™•์ธ

โœ… 2๋‹จ๊ณ„: ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฒ€์ฆ

โ–ก ํ•„์ˆ˜ ์ž…๋ ฅ ํ•„๋“œ์— ๋นˆ ๊ฐ’ ์—†๋Š”์ง€ ํ™•์ธ
โ–ก ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์—†๋Š”์ง€ ํ™•์ธ (COUNTIF ํ™œ์šฉ)
โ–ก ์ˆซ์ž ๋ฐ์ดํ„ฐ๊ฐ€ ํ…์ŠคํŠธ๋กœ ์ €์žฅ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธ
โ–ก ๋‚ ์งœ ํ˜•์‹์ด ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
โ–ก ์ด์ƒ์น˜(Outlier) ๋ฐ์ดํ„ฐ ์—†๋Š”์ง€ ํ™•์ธ
โ–ก ๋ฐ์ดํ„ฐ ๋ฒ”์œ„๊ฐ€ ์˜ˆ์ƒ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€ ํ™•์ธ

โœ… 3๋‹จ๊ณ„: ๊ต์ฐจ ๊ฒ€์ฆ

โ–ก ์†Œ๊ณ„ ํ•ฉ์‚ฐ์ด ์ด๊ณ„์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
โ–ก ์—ฌ๋Ÿฌ ์‹œํŠธ ๊ฐ„ ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ
โ–ก ์ด์ „ ๋ฒ„์ „ ๋ฐ์ดํ„ฐ์™€ ๋น„๊ตํ•˜์—ฌ ๊ธ‰๊ฒฉํ•œ ๋ณ€ํ™” ์—†๋Š”์ง€ ํ™•์ธ
โ–ก ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ์—ฐ๊ฒฐ์ด ์ •์ƒ์ธ์ง€ ํ™•์ธ
โ–ก ํ”ผ๋ฒ— ํ…Œ์ด๋ธ”์ด ์ตœ์‹  ๋ฐ์ดํ„ฐ๋กœ ์ƒˆ๋กœ๊ณ ์นจ ๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

โœ… 4๋‹จ๊ณ„: ํŒŒ์ผ ๊ตฌ์กฐ ๊ฒ€์ฆ

โ–ก ๋ถˆํ•„์š”ํ•œ ์‹œํŠธ๋‚˜ ์ˆจ๊ฒจ์ง„ ์‹œํŠธ ์—†๋Š”์ง€ ํ™•์ธ
โ–ก ์™ธ๋ถ€ ํŒŒ์ผ ๋งํฌ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์ •์ƒ์ธ์ง€ ํ™•์ธ
โ–ก ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ๋น„์ •์ƒ์ ์œผ๋กœ ํฌ์ง€ ์•Š์€์ง€ ํ™•์ธ
โ–ก ์ธ์‡„ ์˜์—ญ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ
โ–ก ์‹œํŠธ ๋ณดํ˜ธ ๋ฐ ํ†ตํ•ฉ ๋ฌธ์„œ ๋ณดํ˜ธ๊ฐ€ ์ ์ ˆํžˆ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธ

โœ… 5๋‹จ๊ณ„: ์ตœ์ข… ๊ฒ€ํ† 

โ–ก ํŒŒ์ผ์„ ๋‹ซ๊ณ  ๋‹ค์‹œ ์—ด์–ด์„œ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธ
โ–ก ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ ์—ด์—ˆ์„ ๋•Œ ๋ ˆ์ด์•„์›ƒ์ด ๊นจ์ง€์ง€ ์•Š๋Š”์ง€ ํ™•์ธ
โ–ก ์ˆ˜์‹ ํ‘œ์‹œ ๋ชจ๋“œ(Ctrl+`)๋กœ ์ˆ˜์‹ ์ „์ฒด ๊ฒ€ํ† 
โ–ก ๊ฐ์‚ฌ ์ถ”์ (Trace Precedents/Dependents)์œผ๋กœ ์ˆ˜์‹ ํ๋ฆ„ ํ™•์ธ
โ–ก ์ตœ์ข… ๋ฒ„์ „ ํŒŒ์ผ๋ช…์— ๋‚ ์งœ ๋ฐ ๋ฒ„์ „ ํ‘œ๊ธฐ


๐Ÿ—๏ธ 8. ํŒ€์„ ์œ„ํ•œ ์—‘์…€ QA ์ž๋™ํ™” ์‹œ์Šคํ…œ ์„ค๊ณ„ํ•˜๊ธฐ

๊ฐœ์ธ์ด ์“ฐ๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ, ํŒ€ ์ „์ฒด๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ QA ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๋ฉด ํ›จ์”ฌ ๊ฐ•๋ ฅํ•ด์š”. ์ด๊ฒŒ ์ง„์งœ ํ”„๋กœ ๋ ˆ๋ฒจ์ด์—์š”!

๐Ÿ›๏ธ 8-1. ํ‘œ์ค€ ์—‘์…€ ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ ์„ค๊ณ„
๐Ÿ“ ๊ถŒ์žฅ ์‹œํŠธ ๊ตฌ์กฐ

๐Ÿ“Š [๋ฐ์ดํ„ฐ] โ€” ์‹ค์ œ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์‹œํŠธ (์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ ์šฉ)
๐Ÿ” [๊ฒ€์ฆ] โ€” ์ž๋™ ๊ฒ€์ฆ ์ˆ˜์‹ ๋ชจ์Œ ์‹œํŠธ
๐Ÿ“‹ [QA๋ฆฌํฌํŠธ] โ€” ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ํ’ˆ์งˆ ๋ณด๊ณ ์„œ
๐Ÿ“ [์˜ค๋ฅ˜๋กœ๊ทธ] โ€” VBA๊ฐ€ ๊ธฐ๋กํ•˜๋Š” ์˜ค๋ฅ˜ ์ด๋ ฅ
โš™๏ธ [์„ค์ •] โ€” ๊ฒ€์ฆ ๊ธฐ์ค€๊ฐ’, ํ—ˆ์šฉ ๋ฒ”์œ„ ๋“ฑ ์„ค์ •๊ฐ’
๐Ÿ“– [๊ฐ€์ด๋“œ] โ€” ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์•ˆ๋‚ด (์ˆจ๊น€ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)

๐Ÿ”ง 8-2. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ž๋™ ๊ฒ€์ฆ (Workbook ์ด๋ฒคํŠธ)

ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋‹ซ์„ ๋•Œ ์ž๋™์œผ๋กœ ๊ฒ€์ฆ์ด ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”. ThisWorkbook ๋ชจ๋“ˆ์— ๋„ฃ์œผ๋ฉด ๋ผ์š”!

' ThisWorkbook ๋ชจ๋“ˆ์— ์ž…๋ ฅ Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' ์ €์žฅ ์ „ ์ž๋™ ๊ฒ€์ฆ ์‹คํ–‰ Dim result As Integer result = MsgBox("์ €์žฅ ์ „ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?", _ vbYesNo + vbQuestion, "QA ์ž๋™ํ™” ์‹œ์Šคํ…œ") If result = vbYes Then Call ๋ฐ์ดํ„ฐํ’ˆ์งˆ๊ฒ€์‚ฌ ' ์•ž์„œ ๋งŒ๋“  ๊ฒ€์ฆ ๋งคํฌ๋กœ ํ˜ธ์ถœ End If End Sub Private Sub Workbook_Open() ' ํŒŒ์ผ ์—ด ๋•Œ ์ž๋™์œผ๋กœ ๋งˆ์ง€๋ง‰ ๊ฒ€์ฆ ๊ฒฐ๊ณผ ํ‘œ์‹œ Dim logWs As Worksheet On Error Resume Next Set logWs = ThisWorkbook.Sheets("์˜ค๋ฅ˜๋กœ๊ทธ") On Error GoTo 0 If Not logWs Is Nothing Then Dim lastCheck As String lastCheck = logWs.Range("D2").Value If lastCheck <> "" Then MsgBox "๋งˆ์ง€๋ง‰ QA ๊ฒ€์‚ฌ: " & lastCheck & Chr(10) & _ "์ตœ์‹  ์ƒํƒœ ํ™•์ธ์„ ์œ„ํ•ด ๊ฒ€์‚ฌ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.", vbInformation End If End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) ' ํŠน์ • ์…€ ๋ณ€๊ฒฝ ์‹œ ์ฆ‰์‹œ ๊ฒ€์ฆ If Not Intersect(Target, Range("A:F")) Is Nothing Then ' ๋ณ€๊ฒฝ๋œ ์…€๋งŒ ์ฆ‰์‹œ ๊ฒ€์ฆ If IsError(Target.Value) Then Target.Interior.Color = RGB(255, 100, 100) MsgBox "โš ๏ธ ์˜ค๋ฅ˜๊ฐ’์ด ์ž…๋ ฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: " & Target.Address, vbExclamation Else Target.Interior.ColorIndex = xlNone End If End If End Sub
๐Ÿ“Š 8-3. ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์—ฐ๋™

์—‘์…€ ํŒŒ์ผ๋„ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด์š”! ์ž๋™์œผ๋กœ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์‹œ์Šคํ…œ์ด์—์š”.

Sub ๋ฒ„์ „๊ธฐ๋ก() Dim settingWs As Worksheet Set settingWs = ThisWorkbook.Sheets("์„ค์ •") ' ํ˜„์žฌ ๋ฒ„์ „ ์ •๋ณด ์ฝ๊ธฐ Dim currentVersion As String currentVersion = settingWs.Range("B1").Value ' ๋ฒ„์ „ ๋ฒˆํ˜ธ ์ž๋™ ์ฆ๊ฐ€ (์˜ˆ: v1.0 โ†’ v1.1) Dim verNum As Double verNum = CDbl(Mid(currentVersion, 2)) + 0.1 settingWs.Range("B1").Value = "v" & Format(verNum, "0.0") settingWs.Range("B2").Value = Now() ' ์ˆ˜์ • ์‹œ๊ฐ„ settingWs.Range("B3").Value = Environ("USERNAME") ' ์ˆ˜์ •์ž ' ๋ณ€๊ฒฝ ์ด๋ ฅ ๋กœ๊ทธ Dim histRow As Long histRow = settingWs.Cells(settingWs.Rows.Count, "E").End(xlUp).Row + 1 settingWs.Cells(histRow, 5).Value = settingWs.Range("B1").Value settingWs.Cells(histRow, 6).Value = Now() settingWs.Cells(histRow, 7).Value = Environ("USERNAME") MsgBox "๋ฒ„์ „์ด " & settingWs.Range("B1").Value & "์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.", vbInformation End Sub

๐Ÿ’ก 9. ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์จ๋จน๋Š” ๊ฟ€ํŒ ๋ชจ์Œ

์ด๋ก ์€ ์ถฉ๋ถ„ํžˆ ํ–ˆ์œผ๋‹ˆ๊นŒ ์ด์ œ ์ง„์งœ ์‹ค๋ฌด์—์„œ ๋ฐ”๋กœ ์จ๋จน์„ ์ˆ˜ ์žˆ๋Š” ๊ฟ€ํŒ๋“ค์„ ๋ชจ์•„๋ดค์–ด์š” ใ…‹ใ…‹ใ…‹. ์ด๊ฑฐ ์•Œ๋ฉด ์ฃผ๋ณ€์—์„œ "์—‘์…€ ๊ณ ์ˆ˜" ์†Œ๋ฆฌ ๋“ค์–ด์š”!

๐ŸŽฏ ํŒ 1: ์ˆ˜์‹ ๊ฐ์‚ฌ ๋„๊ตฌ ํ™œ์šฉํ•˜๊ธฐ

์ˆ˜์‹ ํƒญ โ†’ ์ˆ˜์‹ ๊ฐ์‚ฌ ์„น์…˜์— ์žˆ๋Š” ๋„๊ตฌ๋“ค์ด์—์š”:

๐Ÿ”ต ์ฐธ์กฐ ์…€ ์ถ”์  (Trace Precedents): ํ˜„์žฌ ์…€์ด ์–ด๋–ค ์…€๋“ค์„ ์ฐธ์กฐํ•˜๋Š”์ง€ ํ™”์‚ดํ‘œ๋กœ ํ‘œ์‹œ
๐ŸŸข ์ข…์† ์…€ ์ถ”์  (Trace Dependents): ํ˜„์žฌ ์…€์„ ์ฐธ์กฐํ•˜๋Š” ์…€๋“ค ํ‘œ์‹œ
๐Ÿ”ด ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ: ์‹œํŠธ ์ „์ฒด์˜ ์˜ค๋ฅ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€ํ† 
๐ŸŸก ์ˆ˜์‹ ๊ณ„์‚ฐ: ์ˆ˜์‹์ด ๋‹จ๊ณ„๋ณ„๋กœ ์–ด๋–ป๊ฒŒ ๊ณ„์‚ฐ๋˜๋Š”์ง€ ํ™•์ธ (๋””๋ฒ„๊น…์— ์ตœ๊ณ !)

โŒจ๏ธ ํŒ 2: ํ•„์ˆ˜ ๋‹จ์ถ•ํ‚ค ๋ชจ์Œ
๋‹จ์ถ•ํ‚ค ๊ธฐ๋Šฅ QA ํ™œ์šฉ๋„
Ctrl + ` ์ˆ˜์‹ ํ‘œ์‹œ/์ˆจ๊ธฐ๊ธฐ ํ† ๊ธ€ โญโญโญโญโญ ์ˆ˜์‹ ์ „์ฒด ๊ฒ€ํ† 
Ctrl + [ ์ฐธ์กฐ ์…€๋กœ ์ด๋™ โญโญโญโญ ์ˆ˜์‹ ์ถ”์ 
Ctrl + ] ์ข…์† ์…€๋กœ ์ด๋™ โญโญโญโญ ์˜ํ–ฅ ๋ฒ”์œ„ ํ™•์ธ
F5 โ†’ ํŠน์ˆ˜ ํŠน์ˆ˜ ์…€ ์„ ํƒ (๋นˆ ์…€, ์˜ค๋ฅ˜ ๋“ฑ) โญโญโญโญโญ ์˜ค๋ฅ˜ ์…€ ์ผ๊ด„ ์„ ํƒ
Ctrl + Shift + End ๋ฐ์ดํ„ฐ ๋งˆ์ง€๋ง‰ ์…€๋กœ ์ด๋™ โญโญโญ ๋ฐ์ดํ„ฐ ๋ฒ”์œ„ ํ™•์ธ
Alt + F8 ๋งคํฌ๋กœ ์‹คํ–‰ โญโญโญโญโญ VBA ๊ฒ€์ฆ ์‹คํ–‰
Ctrl + Home A1 ์…€๋กœ ์ด๋™ โญโญ ๊ฒ€ํ†  ์‹œ์ž‘์  ์ด๋™
๐Ÿ” ํŒ 3: ์ด๋™ ์˜ต์…˜์œผ๋กœ ์˜ค๋ฅ˜ ์…€ ํ•œ ๋ฒˆ์— ์„ ํƒ

์ด๊ฑฐ ์ง„์งœ ๊ฟ€ํŒ์ด์—์š”! ์‹œํŠธ ์ „์ฒด์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์…€๋งŒ ํ•œ ๋ฒˆ์— ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์š”.

Ctrl + G (์ด๋™) โ†’ ํŠน์ˆ˜(S) โ†’ ์ˆ˜์‹ โ†’ ์˜ค๋ฅ˜ ์ฒดํฌ

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‹œํŠธ ์ „์ฒด์—์„œ ์˜ค๋ฅ˜๊ฐ’์ด ์žˆ๋Š” ์…€๋งŒ ํ•œ ๋ฒˆ์— ์„ ํƒ๋ผ์š”!
์„ ํƒ ํ›„ ๋ฐฐ๊ฒฝ์ƒ‰์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ Delete ํ‚ค๋กœ ์ผ๊ด„ ์‚ญ์ œ๋„ ๊ฐ€๋Šฅํ•ด์š” ใ…‹ใ…‹ใ…‹.

๐Ÿ“Œ ํŒ 4: ์ด๋ฆ„ ์ •์˜๋กœ ์ˆ˜์‹ ๊ฐ€๋…์„ฑ ๋†’์ด๊ธฐ

๋ณต์žกํ•œ ์ˆ˜์‹์—์„œ ์…€ ์ฃผ์†Œ ๋Œ€์‹  ์ด๋ฆ„์„ ์“ฐ๋ฉด ๊ฒ€์ฆ์ด ํ›จ์”ฌ ์‰ฌ์›Œ์ ธ์š”.

' ์ด๋ฆ„ ์ •์˜ ์ „ =IF(B2>C5*D7/E3,"์ดˆ๊ณผ","์ •์ƒ")

' ์ด๋ฆ„ ์ •์˜ ํ›„ (์ˆ˜์‹ ํƒญ โ†’ ์ด๋ฆ„ ๊ด€๋ฆฌ์ž์—์„œ ์ •์˜) =IF(๋งค์ถœ์•ก>๋ชฉํ‘œ๋งค์ถœ*๋‹ฌ์„ฑ๋ฅ /๊ธฐ์ค€๊ฐ’,"์ดˆ๊ณผ","์ •์ƒ")

' ์ด๋ฆ„ ์ •์˜ ๋ฐฉ๋ฒ• ' ์ˆ˜์‹ ํƒญ โ†’ ์ด๋ฆ„ ์ •์˜ โ†’ ์ด๋ฆ„: "๋งค์ถœ์•ก", ์ฐธ์กฐ ๋Œ€์ƒ: =Sheet1!$B$2
๐Ÿค ํŒ 5: ์žฌ๋Šฅ๋„ท ํ™œ์šฉํ•˜๊ธฐ

์—‘์…€ QA ์ž๋™ํ™” ์‹œ์Šคํ…œ์„ ํ˜ผ์ž ๊ตฌ์ถ•ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋ฉด ์žฌ๋Šฅ๋„ท(https://www.jaenung.net)์—์„œ ์—‘์…€ ์ „๋ฌธ๊ฐ€์˜ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”! VBA ๋งคํฌ๋กœ ๊ฐœ๋ฐœ, ์ž๋™ํ™” ์‹œ์Šคํ…œ ๊ตฌ์ถ•, ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์—‘์…€ ๊ด€๋ จ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋“ ์š”. ํ˜ผ์ž ๋‹ค ํ•˜๋ ค๊ณ  ํ•˜์ง€ ๋ง๊ณ  ์ „๋ฌธ๊ฐ€ ์†์„ ๋นŒ๋ฆฌ๋Š” ๊ฒƒ๋„ ํ˜„๋ช…ํ•œ ์„ ํƒ์ด์—์š” ใ…‹ใ…‹ใ…‹.

๐Ÿ’ก ๊ฟ€ํŒ ๋ณด๋„ˆ์Šค! ์—‘์…€ ํŒŒ์ผ์„ ๊ณต์œ ํ•  ๋•Œ๋Š” ํ•ญ์ƒ ๊ณ„์‚ฐ ์˜ต์…˜์„ "์ž๋™"์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์ˆ˜๋™์œผ๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ์ˆ˜์‹์ด ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•„์„œ ์ž˜๋ชป๋œ ๊ฐ’์ด ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์–ด์š”! (์ˆ˜์‹ ํƒญ โ†’ ๊ณ„์‚ฐ ์˜ต์…˜ โ†’ ์ž๋™)

๐ŸŽ“ 10. ์—…๋ฌด๋ณ„ ๋งž์ถค QA ์‹œ๋‚˜๋ฆฌ์˜ค

์—…๋ฌด ์œ ํ˜•์— ๋”ฐ๋ผ ๊ฒ€์ฆ ํฌ์ธํŠธ๊ฐ€ ๋‹ฌ๋ผ์š”. ์ž์‹ ์˜ ์—…๋ฌด์— ๋งž๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณจ๋ผ์„œ ์ ์šฉํ•ด๋ณด์„ธ์š”!

๐Ÿ’ฐ ์‹œ๋‚˜๋ฆฌ์˜ค 1: ์žฌ๋ฌด/ํšŒ๊ณ„ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
๐Ÿ“Š ์žฌ๋ฌด ๋ฐ์ดํ„ฐ ํ•ต์‹ฌ ๊ฒ€์ฆ ํฌ์ธํŠธ
' ๋Œ€์ฐจ๋Œ€์กฐํ‘œ ๊ท ํ˜• ๊ฒ€์ฆ (์ž์‚ฐ = ๋ถ€์ฑ„ + ์ž๋ณธ) =IF(ABS(์ž์‚ฐํ•ฉ๊ณ„-(๋ถ€์ฑ„ํ•ฉ๊ณ„+์ž๋ณธํ•ฉ๊ณ„))<0.01,"โœ… ๊ท ํ˜•","โŒ ๋ถˆ๊ท ํ˜•: "&(์ž์‚ฐํ•ฉ๊ณ„-๋ถ€์ฑ„ํ•ฉ๊ณ„-์ž๋ณธํ•ฉ๊ณ„))

' ์Œ์ˆ˜ ์žฌ๊ณ  ๊ฒ€์ฆ (์žฌ๊ณ ๋Š” 0 ์ด์ƒ์ด์–ด์•ผ ํ•จ) =IF(COUNTIF(์žฌ๊ณ ๋ฒ”์œ„,"<0")>0,"โš ๏ธ ์Œ์ˆ˜ ์žฌ๊ณ  "&COUNTIF(์žฌ๊ณ ๋ฒ”์œ„,"<0")&"๊ฑด","โœ… ์ •์ƒ")

' ์ „๊ธฐ ๋Œ€๋น„ ๊ธ‰๊ฒฉํ•œ ๋ณ€ํ™” ๊ฐ์ง€ (30% ์ด์ƒ ๋ณ€ํ™”) =IF(ABS((๋‹น๊ธฐ-์ „๊ธฐ)/์ „๊ธฐ)>0.3,"โš ๏ธ ๊ธ‰๋ณ€ ๊ฐ์ง€","์ •์ƒ")

' ์†Œ์ˆ˜์  ๋ฐ˜์˜ฌ๋ฆผ ์˜ค๋ฅ˜ ๊ฒ€์ฆ =IF(ABS(ROUND(ํ•ฉ๊ณ„,2)-ํ•ฉ๊ณ„)>0.001,"๋ฐ˜์˜ฌ๋ฆผ ์˜ค๋ฅ˜","OK")
๐Ÿ“ฆ ์‹œ๋‚˜๋ฆฌ์˜ค 2: ์žฌ๊ณ /๋ฌผ๋ฅ˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
๐Ÿญ ์žฌ๊ณ  ๋ฐ์ดํ„ฐ ํ•ต์‹ฌ ๊ฒ€์ฆ ํฌ์ธํŠธ
' ์žฌ๊ณ  ์ˆ˜๋Ÿ‰ ์Œ์ˆ˜ ๋ฐฉ์ง€ =IF(์ž…๊ณ ์ˆ˜๋Ÿ‰-์ถœ๊ณ ์ˆ˜๋Ÿ‰<0,"โŒ ์žฌ๊ณ  ๋ถ€์กฑ","โœ… ์ •์ƒ")

' ๋ฐ”์ฝ”๋“œ ํ˜•์‹ ๊ฒ€์ฆ (13์ž๋ฆฌ ์ˆซ์ž) =IF(AND(LEN(A1)=13,ISNUMBER(VALUE(A1))),"โœ… ์œ ํšจ","โŒ ๋ฐ”์ฝ”๋“œ ์˜ค๋ฅ˜")

' ์œ ํ†ต๊ธฐํ•œ ๊ฒฝ๊ณผ ์ƒํ’ˆ ํƒ์ง€ =IF(์œ ํ†ต๊ธฐํ•œ<TODAY(),"โš ๏ธ ๊ธฐํ•œ ๊ฒฝ๊ณผ","์ •์ƒ")

' ์ž…์ถœ๊ณ  ์ˆ˜๋Ÿ‰ ์ •์ˆ˜ ๊ฒ€์ฆ =IF(A1=INT(A1),"โœ… ์ •์ˆ˜","โŒ ์†Œ์ˆ˜์  ์˜ค๋ฅ˜")
๐Ÿ‘ฅ ์‹œ๋‚˜๋ฆฌ์˜ค 3: HR/์ธ์‚ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
๐Ÿง‘โ€๐Ÿ’ผ ์ธ์‚ฌ ๋ฐ์ดํ„ฐ ํ•ต์‹ฌ ๊ฒ€์ฆ ํฌ์ธํŠธ
' ์‚ฌ์›๋ฒˆํ˜ธ ์ค‘๋ณต ๊ฒ€์ฆ =IF(COUNTIF($A$2:$A$1000,A2)>1,"โŒ ์ค‘๋ณต ์‚ฌ์›๋ฒˆํ˜ธ","โœ… ๊ณ ์œ ")

' ๋‚˜์ด ์œ ํšจ์„ฑ ๊ฒ€์ฆ (18~70์„ธ) =IF(AND(DATEDIF(์ƒ๋…„์›”์ผ,TODAY(),"Y")>=18,DATEDIF(์ƒ๋…„์›”์ผ,TODAY(),"Y")<=70),"โœ…","โŒ ๋‚˜์ด ์˜ค๋ฅ˜")

' ๊ธ‰์—ฌ ๋ฒ”์œ„ ๊ฒ€์ฆ (์ตœ์ €์ž„๊ธˆ ์ด์ƒ) =IF(์›”๊ธ‰์—ฌ>=2060740,"โœ…","โŒ ์ตœ์ €์ž„๊ธˆ ๋ฏธ๋‹ฌ") โ† 2024๋…„ ๊ธฐ์ค€

' ์ž…์‚ฌ์ผ์ด ๋ฏธ๋ž˜์ธ์ง€ ํ™•์ธ =IF(์ž…์‚ฌ์ผ>TODAY(),"โš ๏ธ ๋ฏธ๋ž˜ ๋‚ ์งœ","โœ… ์ •์ƒ")
๐Ÿ“ˆ ์‹œ๋‚˜๋ฆฌ์˜ค 4: ์˜์—…/๋งค์ถœ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
๐Ÿ’น ์˜์—… ๋ฐ์ดํ„ฐ ํ•ต์‹ฌ ๊ฒ€์ฆ ํฌ์ธํŠธ
' ๋งค์ถœ ํ•ฉ๊ณ„ ๊ต์ฐจ ๊ฒ€์ฆ =IF(SUM(์ผ๋ณ„๋งค์ถœ)=์›”๋งค์ถœํ•ฉ๊ณ„,"โœ… ์ผ์น˜","โŒ ๋ถˆ์ผ์น˜: "&(SUM(์ผ๋ณ„๋งค์ถœ)-์›”๋งค์ถœํ•ฉ๊ณ„))

' ํ• ์ธ์œจ ๋ฒ”์œ„ ๊ฒ€์ฆ (0~100%) =IF(AND(ํ• ์ธ์œจ>=0,ํ• ์ธ์œจ<=1),"โœ…","โŒ ํ• ์ธ์œจ ์˜ค๋ฅ˜: "&TEXT(ํ• ์ธ์œจ,"0%"))

' ๋‹จ๊ฐ€ ร— ์ˆ˜๋Ÿ‰ = ๊ธˆ์•ก ๊ฒ€์ฆ =IF(ABS(๋‹จ๊ฐ€*์ˆ˜๋Ÿ‰-๊ธˆ์•ก)<1,"โœ…","โŒ ๊ธˆ์•ก ๋ถˆ์ผ์น˜")

' ๋ชฉํ‘œ ๋‹ฌ์„ฑ๋ฅ  ์ด์ƒ์น˜ ๊ฐ์ง€ (200% ์ดˆ๊ณผ) =IF(๋‹ฌ์„ฑ๋ฅ >2,"โš ๏ธ ์ด์ƒ์น˜ ์˜์‹ฌ","์ •์ƒ")

๐Ÿ—บ๏ธ ์˜ค๋ฅ˜ ์œ ํ˜•๋ณ„ ํ•ด๊ฒฐ ๋กœ๋“œ๋งต ์˜ค๋ฅ˜ ๋ฐœ์ƒ! ๐Ÿšจ ๐Ÿ“ ์ˆ˜์‹ ์˜ค๋ฅ˜ IFERROR๋กœ ์ฒ˜๋ฆฌ ์ˆ˜์‹ ๊ฐ์‚ฌ ๋„๊ตฌ ํ™œ์šฉ ๐Ÿ”ข ๋ฐ์ดํ„ฐ ํƒ€์ž… ์˜ค๋ฅ˜ VALUE() ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜ IS๊ณ„์—ด ํ•จ์ˆ˜๋กœ ๊ฒ€์ฆ ๐Ÿ”— ์ฐธ์กฐ ์˜ค๋ฅ˜ ์ด๋ฆ„ ์ •์˜ ํ™œ์šฉ ์ ˆ๋Œ€์ฐธ์กฐ ์žฌ์„ค์ • โฌœ ๋นˆ ์…€ ์˜ค๋ฅ˜ ISBLANK ๊ฒ€์ฆ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ ์šฉ ๐Ÿ”„ ์ค‘๋ณต ๋ฐ์ดํ„ฐ COUNTIF ํƒ์ง€ ์กฐ๊ฑด๋ถ€ ์„œ์‹ ๊ฐ•์กฐ ๐Ÿ“ ๋ฒ”์œ„ ์ดˆ๊ณผ ์˜ค๋ฅ˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ œํ•œ MIN/MAX ํ•จ์ˆ˜ ํ™œ์šฉ ๐Ÿงฎ ๋…ผ๋ฆฌ ์˜ค๋ฅ˜ ๊ต์ฐจ ๊ฒ€์ฆ ์ˆ˜์‹ ๋‹จ๊ณ„๋ณ„ ๊ณ„์‚ฐ ์ถ”์  ๊ฐ ์˜ค๋ฅ˜ ์œ ํ˜•๋ณ„ ์ „์šฉ ํ•ด๊ฒฐ ์ „๋žต์„ ์ ์šฉํ•˜์„ธ์š” โ€” ๋ชจ๋“  ์˜ค๋ฅ˜์— ๋งŒ๋Šฅ ํ•ด๊ฒฐ์ฑ…์€ ์—†์–ด์š”!
โšก 11. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์—์„œ์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™”

๋ฐ์ดํ„ฐ๊ฐ€ ์ˆ˜๋งŒ ํ–‰์ด ๋„˜์–ด๊ฐ€๋ฉด ๊ฒ€์ฆ ์ˆ˜์‹์ด ์—„์ฒญ ๋А๋ ค์งˆ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋•Œ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•๋“ค์ด์—์š”!

๐Ÿš€ VBA ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ฝ”๋“œ
Sub ์ตœ์ ํ™”๋œ_๋Œ€์šฉ๋Ÿ‰_๊ฒ€์ฆ() ' ์„ฑ๋Šฅ ์ตœ์ ํ™” ์„ค์ • (๊ฒ€์ฆ ์‹œ์ž‘ ์ „) Application.ScreenUpdating = False ' ํ™”๋ฉด ์—…๋ฐ์ดํŠธ ์ค‘์ง€ Application.Calculation = xlCalculationManual ' ์ž๋™ ๊ณ„์‚ฐ ์ค‘์ง€ Application.EnableEvents = False ' ์ด๋ฒคํŠธ ๋น„ํ™œ์„ฑํ™” Application.DisplayStatusBar = True ' ์ƒํƒœ๋ฐ”๋Š” ์œ ์ง€ (์ง„ํ–‰๋ฅ  ํ‘œ์‹œ์šฉ) Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim errorCount As Long Set ws = ThisWorkbook.Sheets("๋ฐ์ดํ„ฐ") lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' ๋ฐฐ์—ด๋กœ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ (์…€ ํ•˜๋‚˜์”ฉ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค 100๋ฐฐ ๋น ๋ฆ„!) Dim dataArray As Variant dataArray = ws.Range("A2:F" & lastRow).Value Dim errorArray() As String ReDim errorArray(1 To lastRow, 1 To 3) errorCount = 0 ' ๋ฐฐ์—ด์—์„œ ๊ฒ€์ฆ (๋ฉ”๋ชจ๋ฆฌ ๋‚ด ์ฒ˜๋ฆฌ) For i = 1 To UBound(dataArray, 1) ' ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ If i Mod 1000 = 0 Then Application.StatusBar = "๊ฒ€์ฆ ์ค‘... " & Format(i/UBound(dataArray,1),"0%") End If ' ๋นˆ ๊ฐ’ ๊ฒ€์‚ฌ If IsEmpty(dataArray(i, 1)) Or dataArray(i, 1) = "" Then errorCount = errorCount + 1 errorArray(errorCount, 1) = "A" & (i + 1) errorArray(errorCount, 2) = "ํ•„์ˆ˜๊ฐ’ ๋ˆ„๋ฝ" errorArray(errorCount, 3) = "" End If ' ์ˆซ์ž ๋ฒ”์œ„ ๊ฒ€์‚ฌ (D์—ด) If Not IsEmpty(dataArray(i, 4)) Then If IsNumeric(dataArray(i, 4)) Then If dataArray(i, 4) < 0 Or dataArray(i, 4) > 1000000 Then errorCount = errorCount + 1 errorArray(errorCount, 1) = "D" & (i + 1) errorArray(errorCount, 2) = "๋ฒ”์œ„ ์ดˆ๊ณผ" errorArray(errorCount, 3) = dataArray(i, 4) End If End If End If Next i ' ์˜ค๋ฅ˜ ๊ฒฐ๊ณผ ํ•œ ๋ฒˆ์— ์‹œํŠธ์— ์“ฐ๊ธฐ (๋ฐฐ์—ด ํ†ต์งธ๋กœ) If errorCount > 0 Then Dim logWs As Worksheet Set logWs = ThisWorkbook.Sheets("์˜ค๋ฅ˜๋กœ๊ทธ") logWs.Range("A2:C" & (errorCount + 1)).Value = _ Application.Index(errorArray, Evaluate("ROW(1:" & errorCount & ")"), Array(1,2,3)) End If ' ์„ฑ๋Šฅ ์ตœ์ ํ™” ์„ค์ • ๋ณต์› Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Application.EnableEvents = True Application.StatusBar = False MsgBox "๊ฒ€์ฆ ์™„๋ฃŒ! ์ด " & errorCount & "๊ฐœ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ (๊ฒ€์‚ฌ ํ–‰: " & lastRow & ")", vbInformation End Sub
๐Ÿ’ก ์„ฑ๋Šฅ ํŒ ํ•ต์‹ฌ ์š”์•ฝ:
1. ๋ฐฐ์—ด ์‚ฌ์šฉ: ์…€์„ ํ•˜๋‚˜์”ฉ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฐฐ์—ด๋กœ ํ•œ ๋ฒˆ์— ์ฝ์œผ๋ฉด 100๋ฐฐ ์ด์ƒ ๋น ๋ฆ„
2. ScreenUpdating = False: ํ™”๋ฉด ๊ฐฑ์‹  ์ค‘์ง€๋กœ ์†๋„ ํ–ฅ์ƒ
3. Calculation = Manual: ์ž๋™ ๊ณ„์‚ฐ ์ค‘์ง€๋กœ ์†๋„ ํ–ฅ์ƒ
4. EnableEvents = False: ์ด๋ฒคํŠธ ๋น„ํ™œ์„ฑํ™”๋กœ ๋ถˆํ•„์š”ํ•œ ํŠธ๋ฆฌ๊ฑฐ ๋ฐฉ์ง€
5. ์ž‘์—… ์™„๋ฃŒ ํ›„ ๋ฐ˜๋“œ์‹œ ์›๋ž˜ ์„ค์ •์œผ๋กœ ๋ณต์›!
๐Ÿ“Š ์ˆ˜์‹ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ
โšก ๋А๋ฆฐ ์ˆ˜์‹ โ†’ ๋น ๋ฅธ ์ˆ˜์‹์œผ๋กœ ๊ต์ฒด

โŒ ๋А๋ฆผ: =VLOOKUP(A1,Sheet2!A:Z,5,0) (์ „์ฒด ์—ด ์ฐธ์กฐ)
โœ… ๋น ๋ฆ„: =VLOOKUP(A1,Sheet2!A1:Z1000,5,0) (๋ฒ”์œ„ ์ œํ•œ)

โŒ ๋А๋ฆผ: =SUMIF(A:A,D1,B:B) (์ „์ฒด ์—ด)
โœ… ๋น ๋ฆ„: =SUMIF($A$1:$A$1000,D1,$B$1:$B$1000) (๋ฒ”์œ„ ์ œํ•œ)

โŒ ๋А๋ฆผ: =INDIRECT("Sheet1!A"&ROW()) (ํœ˜๋ฐœ์„ฑ ํ•จ์ˆ˜)
โœ… ๋น ๋ฆ„: ์ง์ ‘ ์ฐธ์กฐ ๋˜๋Š” INDEX ํ•จ์ˆ˜ ์‚ฌ์šฉ

โš ๏ธ ํœ˜๋ฐœ์„ฑ ํ•จ์ˆ˜ ์ฃผ์˜: NOW(), TODAY(), RAND(), OFFSET(), INDIRECT()๋Š” ๋งค๋ฒˆ ์žฌ๊ณ„์‚ฐ๋˜์–ด ์„ฑ๋Šฅ ์ €ํ•˜ ์œ ๋ฐœ


๐Ÿ“ 12. QA ์‹œ์Šคํ…œ ๋ฌธ์„œํ™” โ€” ์ง€์† ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ๋งŒ๋“ค๊ธฐ

์•„๋ฌด๋ฆฌ ์ข‹์€ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด๋„ ๋ฌธ์„œํ™”๊ฐ€ ์•ˆ ๋˜๋ฉด ๋‚˜์ค‘์— ์•„๋ฌด๋„ ๋ชป ์จ์š” ใ…‹ใ…‹ใ…‹. ํŠนํžˆ ํŒ€์—์„œ ์“ฐ๋Š” ์‹œ์Šคํ…œ์ด๋ผ๋ฉด ๋ฌธ์„œํ™”๋Š” ํ•„์ˆ˜์˜ˆ์š”!

๐Ÿ“‹ QA ์‹œ์Šคํ…œ ๋ฌธ์„œํ™” ํ•„์ˆ˜ ํ•ญ๋ชฉ
๐Ÿ“„ 1. ๊ฒ€์ฆ ๊ทœ์น™ ๋ช…์„ธ์„œ

๊ฐ ์—ด/ํ•„๋“œ๋ณ„๋กœ ์–ด๋–ค ๊ฒ€์ฆ ๊ทœ์น™์ด ์ ์šฉ๋˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ๊ธฐ๋กํ•ด์š”:

โ€ข ํ•„๋“œ๋ช… / ๋ฐ์ดํ„ฐ ํƒ€์ž… / ํ•„์ˆ˜ ์—ฌ๋ถ€
โ€ข ํ—ˆ์šฉ ๋ฒ”์œ„ (์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’)
โ€ข ํ—ˆ์šฉ ํ˜•์‹ (๋‚ ์งœ ํ˜•์‹, ํ…์ŠคํŠธ ํŒจํ„ด ๋“ฑ)
โ€ข ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ (์˜ˆ: "ํ• ์ธ์œจ์€ 0~50% ์‚ฌ์ด")
โ€ข ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• (๋ฌด์‹œ/๊ฒฝ๊ณ /์ฐจ๋‹จ)

๐Ÿ“„ 2. ์˜ค๋ฅ˜ ์ฝ”๋“œ ์ •์˜์„œ

์ž์ฒด์ ์œผ๋กœ ์ •์˜ํ•œ ์˜ค๋ฅ˜ ์ฝ”๋“œ ์ฒด๊ณ„๋ฅผ ๋งŒ๋“ค๋ฉด ๋กœ๊ทธ ๋ถ„์„์ด ์‰ฌ์›Œ์ ธ์š”:

โ€ข E001: ํ•„์ˆ˜๊ฐ’ ๋ˆ„๋ฝ
โ€ข E002: ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ถˆ์ผ์น˜
โ€ข E003: ๋ฒ”์œ„ ์ดˆ๊ณผ
โ€ข E004: ์ค‘๋ณต ๋ฐ์ดํ„ฐ
โ€ข E005: ์ฐธ์กฐ ์˜ค๋ฅ˜
โ€ข W001: ๊ฒฝ๊ณ  - ์ด์ƒ์น˜ ์˜์‹ฌ
โ€ข W002: ๊ฒฝ๊ณ  - ๊ธ‰๊ฒฉํ•œ ๋ณ€ํ™”

๐Ÿ“„ 3. ๋ณ€๊ฒฝ ์ด๋ ฅ ๊ด€๋ฆฌ

QA ์‹œ์Šคํ…œ ์ž์ฒด๋„ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•ด์•ผ ํ•ด์š”:

โ€ข ๋ฒ„์ „ ๋ฒˆํ˜ธ (v1.0, v1.1, v2.0 ๋“ฑ)
โ€ข ๋ณ€๊ฒฝ ๋‚ ์งœ ๋ฐ ๋ณ€๊ฒฝ์ž
โ€ข ๋ณ€๊ฒฝ ๋‚ด์šฉ ์š”์•ฝ
โ€ข ๋ณ€๊ฒฝ ์ด์œ  (๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ ๋ณ€๊ฒฝ, ๋ฒ„๊ทธ ์ˆ˜์ • ๋“ฑ)

๐Ÿ”„ ์ง€์†์  ๊ฐœ์„  ์‚ฌ์ดํด

๐Ÿ” ๊ฒ€์ฆ ์‹คํ–‰ โ†’ ๐Ÿ“‹ ์˜ค๋ฅ˜ ๋ถ„์„ โ†’ ๐Ÿ”ง ๊ทœ์น™ ๊ฐœ์„  โ†’ ๐Ÿ“ ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ โ†’ ๐Ÿ” ์žฌ๊ฒ€์ฆ

์ด ์‚ฌ์ดํด์„ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ QA ์‹œ์Šคํ…œ์ด ์ ์  ๋” ๊ฐ•๋ ฅํ•ด์ ธ์š”!
์ฒ˜์Œ๋ถ€ํ„ฐ ์™„๋ฒฝํ•  ํ•„์š” ์—†์–ด์š”. ๊ณ„์† ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒŒ ํ•ต์‹ฌ์ด์—์š” โœจ


๐ŸŒŸ 13. ์ตœ์‹  ํŠธ๋ Œ๋“œ โ€” AI์™€ ์—‘์…€ QA์˜ ๋งŒ๋‚จ

2024๋…„ ํ˜„์žฌ, ์—‘์…€ QA๋„ AI์˜ ์˜ํ–ฅ์„ ๋ฐ›๊ณ  ์žˆ์–ด์š”! ์ตœ์‹  ํŠธ๋ Œ๋“œ๋ฅผ ์•Œ์•„๋‘๋ฉด ๋ฏธ๋ž˜๋ฅผ ์ค€๋น„ํ•  ์ˆ˜ ์žˆ์–ด์š” ใ…‹ใ…‹ใ…‹.

๐Ÿค– Copilot in Excel (Microsoft 365)

Microsoft 365์— ํƒ‘์žฌ๋œ Copilot AI๋Š” ์—‘์…€ QA์—๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”:

๐Ÿ“Œ ์ž์—ฐ์–ด๋กœ ์˜ค๋ฅ˜ ๋ถ„์„ ์š”์ฒญ: "์ด ๋ฐ์ดํ„ฐ์—์„œ ์ด์ƒํ•œ ๊ฐ’ ์ฐพ์•„์ค˜"
๐Ÿ“Œ ์ˆ˜์‹ ์ž๋™ ์ƒ์„ฑ: "A์—ด์˜ ์ค‘๋ณต๊ฐ’์„ ์ฐพ๋Š” ์ˆ˜์‹ ๋งŒ๋“ค์–ด์ค˜"
๐Ÿ“Œ ๋ฐ์ดํ„ฐ ํŒจํ„ด ๋ถ„์„: "์ด ๋ฐ์ดํ„ฐ์˜ ์ด์ƒ์น˜๋ฅผ ๋ถ„์„ํ•ด์ค˜"
๐Ÿ“Œ VBA ์ฝ”๋“œ ์ƒ์„ฑ: "๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๋งคํฌ๋กœ ์ฝ”๋“œ ์ž‘์„ฑํ•ด์ค˜"

* ํ˜„์žฌ Microsoft 365 Business/Enterprise ๊ตฌ๋…์ž์—๊ฒŒ ์ œ๊ณต ์ค‘

๐Ÿ Python in Excel (Excel 365)

2023๋…„๋ถ€ํ„ฐ Excel์—์„œ Python ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋์–ด์š”! ์ด๊ฑธ ํ™œ์šฉํ•˜๋ฉด ํ›จ์”ฌ ๊ฐ•๋ ฅํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•ด์š”:

=PY("import pandas as pd; df = xl('A1:F100'); df.isnull().sum()")


๐Ÿ“Œ pandas๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ๋ถ„์„
๐Ÿ“Œ scikit-learn์œผ๋กœ ์ด์ƒ์น˜ ์ž๋™ ํƒ์ง€
๐Ÿ“Œ matplotlib์œผ๋กœ ํ’ˆ์งˆ ์‹œ๊ฐํ™” ์ฐจํŠธ ์ƒ์„ฑ

* Excel 365 Insider ์ฑ„๋„์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ์ ์ฐจ ํ™•๋Œ€ ์ค‘
๐Ÿ”— Power Automate ์—ฐ๋™

Microsoft Power Automate์™€ ์—ฐ๋™ํ•˜๋ฉด ์—‘์…€ QA๋ฅผ ์™„์ „ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”:

๐Ÿ“Œ ์Šค์ผ€์ค„ ๊ธฐ๋ฐ˜ ์ž๋™ ๊ฒ€์ฆ: ๋งค์ผ ์˜ค์ „ 9์‹œ์— ์ž๋™์œผ๋กœ QA ์‹คํ–‰
๐Ÿ“Œ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ ์‹œ ์ž๋™ ์•Œ๋ฆผ: Teams/์ด๋ฉ”์ผ๋กœ ์ฆ‰์‹œ ์•Œ๋ฆผ ๋ฐœ์†ก
๐Ÿ“Œ SharePoint ์—ฐ๋™: ํด๋ผ์šฐ๋“œ ์—‘์…€ ํŒŒ์ผ ์ž๋™ ๊ฒ€์ฆ
๐Ÿ“Œ ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ: QA ํ†ต๊ณผ ํ›„ ์ž๋™์œผ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„ ์ง„ํ–‰

๐Ÿ’ก ์žฌ๋Šฅ๋„ท ํ™œ์šฉ ํŒ: Power Automate + Excel ์ž๋™ํ™” ์‹œ์Šคํ…œ ๊ตฌ์ถ•์ด ์–ด๋ ต๋‹ค๋ฉด ์žฌ๋Šฅ๋„ท์—์„œ ๊ด€๋ จ ์ „๋ฌธ๊ฐ€๋ฅผ ์ฐพ์•„๋ณด์„ธ์š”! ์—…๋ฌด ์ž๋™ํ™” ์ „๋ฌธ๊ฐ€๋“ค์ด ๋งž์ถคํ˜• ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค„ ์ˆ˜ ์žˆ์–ด์š”.

๐ŸŽฏ ๋งˆ๋ฌด๋ฆฌ โ€” ์˜ค๋Š˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์—‘์…€ QA

์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋ฉด:

โœ… ์—‘์…€ ์˜ค๋ฅ˜๋Š” 3๊ฐ€์ง€ ๋ ˆ์ด์–ด(์ˆ˜์‹ ์˜ค๋ฅ˜, ๋…ผ๋ฆฌ ์˜ค๋ฅ˜, ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ์˜ค๋ฅ˜)๋กœ ๋ถ„๋ฅ˜๋ผ์š”
โœ… ์ˆ˜์‹ ๊ธฐ๋ฐ˜ ๊ฒ€์ฆ(IFERROR, IS๊ณ„์—ด, COUNTIF)์œผ๋กœ ๊ธฐ๋ณธ ๋ฐฉ์–ด๋ง‰ ๊ตฌ์ถ•
โœ… ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋กœ ์ž…๋ ฅ ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜ ์‚ฌ์ „ ์ฐจ๋‹จ
โœ… VBA ์ž๋™ํ™”๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์ˆœํšŒ ๊ฒ€์ฆ
โœ… ์กฐ๊ฑด๋ถ€ ์„œ์‹์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์ฆ‰์‹œ ํŒŒ์•…
โœ… QA ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐฐํฌ ์ „ ์ตœ์ข… ๊ฒ€ํ† 
โœ… ๋ฌธ์„œํ™”๋กœ ์ง€์† ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ์œ ์ง€

๐Ÿ™‹ ์™€... ์ด๊ฑฐ ๋‹ค ์ ์šฉํ•˜๋ฉด ์ง„์งœ ์˜ค๋ฅ˜ ์—†๋Š” ์—‘์…€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒ ๋‹ค! ๊ณ ๋งˆ์›Œ ใ…‹ใ…‹ใ…‹
ใ…‹ใ…‹ใ…‹ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค ํ•˜๋ ค๊ณ  ํ•˜์ง€ ๋ง๊ณ , ์˜ค๋Š˜ ๋‹น์žฅ IFERROR ํ•˜๋‚˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ด! ์ž‘์€ ๊ฒƒ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์Œ“์•„๊ฐ€๋Š” ๊ฒŒ ํ•ต์‹ฌ์ด์•ผ ๐Ÿ’ช
โš ๏ธ ๋งˆ์ง€๋ง‰ ๋‹น๋ถ€! QA ์‹œ์Šคํ…œ์€ ํ•œ ๋ฒˆ ๋งŒ๋“ค๊ณ  ๋์ด ์•„๋‹ˆ์—์š”. ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ์ด ๋ฐ”๋€Œ๋ฉด ๊ฒ€์ฆ ๊ทœ์น™๋„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๊ณ , ์ƒˆ๋กœ์šด ์˜ค๋ฅ˜ ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋˜๋ฉด ์‹œ์Šคํ…œ์— ๋ฐ˜์˜ํ•ด์•ผ ํ•ด์š”. ์ง€์†์ ์ธ ๊ฐœ์„ ์ด ์ง„์งœ QA์˜ ํ•ต์‹ฌ์ด์—์š”!

๋ฐ์ดํ„ฐ๋Š” ๊ฑฐ์ง“๋งํ•˜์ง€ ์•Š์•„์š”. ํ•˜์ง€๋งŒ ์ž˜๋ชป ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ๊ฑฐ์ง“๋ง์„ ํ•ด์š” ๐Ÿ˜…
์˜ค๋Š˜๋ถ€ํ„ฐ ์—‘์…€ QA ์ž๋™ํ™”๋กœ ๋ฐ์ดํ„ฐ์˜ ์ง„์‹ค์„ ์ง€์ผœ๋‚ด์„ธ์š”! ๐Ÿ›ก๏ธ

๋Œ“๊ธ€ ์ž‘์„ฑ

์ด ๊ธ€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์ƒ๊ฐ์„ ๋“ค๋ ค์ฃผ์„ธ์š”

๋Œ“๊ธ€ 0