엑셀 VBA 만들어보기(feat.ChatGPT)

Sun, 01 Sep 2024 10:06:50 GMT

안녕하세요. 🥳 망분리세상에 길을 찾는 ruta 입니다.

엑셀을 사용하다 보면 본래 사용하는 함수외 대응해야 할 케이스들이 존재합니다.

이러한 케이스를 접하다 보면 이리저리 방법을 모색하다 결국 하나하나 노가다를 하는 저를 발견하게 됩니다.😂

어떻게 하면 노가다를 하지 않을까 생각해보다 제 유료 동료(?) ChatGPT에게 물어보기로 했습니다.

# Step1. ChatGPT에게 질문하기💁🏼

```
Prompt :
나는 엑셀2016을 사용중이야

아래 내용에 대해 좋은 솔루션을 제공해 주세요.

1. A1:E1 셀들에 각각 데이터들이 존재해
2. 각 셀들을 병합 하려고 해. 병합하는 셀들 사이에 , 가 있어야 해
```

제 업무환경은 엑셀 2016 버젼을 쓰고 있습니다.

해당 사례는 이리저리 방법을 찾다가 한땀한땀 노가다하여 진행했던 사례를 요청하였습니다. ( 아래 예시 참조 )

> **사례 예시**

1. A1:E1까지 각각의 데이터 존재

| A1 | B1 | C1 | D1 | E1 |
| --- | --- | --- | --- | --- |
| 기린 | 사슴 | 토끼 | 사자 | 호랑이 |

1. 각 셀들을 병합 하려고 해. 병합하는 셀들 사이에 , 가 있어야 해

** → 기린,사슴,토끼,사자,호랑이**

해당 질문에 대해서 ChatGPT는 아래와 같은 답변을 제공해 주었습니다.

### **ChatGPT의 답변 확인해보기**

[참고 : ](https://chatgpt.com/share/b30b977b-50b7-459e-8da0-2ae1cfabe1ab)[https://chatgpt.com/share/ac53d035-b049-4576-aee7-878df20a536d](https://chatgpt.com/share/ac53d035-b049-4576-aee7-878df20a536d)[ ](https://chatgpt.com/share/b30b977b-50b7-459e-8da0-2ae1cfabe1ab)

[https://chatgpt.com/share/ac53d035-b049-4576-aee7-878df20a536d](https://chatgpt.com/share/ac53d035-b049-4576-aee7-878df20a536d)

![Image](https://upload.cafenono.com/image/slashpagePost/20240905/120533_DiyNQdNbhnnLB9Lg6g?q=80&s=1280x180&t=outside&f=webp)

저의 질문에 ChatGPT에게 단순 노가다 하는 방법을 조리있게 설명해 매우 실망하였습니다. 🤬

또한 사내의 엑셀버젼은 2016이기 때문에 TextJoin과 같은 엑셀상위 버젼의 함수 사용이 불가능한 상황입니다.

이때 **더 똑똑한 방법이 없는지** 물어 보았고 엑셀 VBA를 추천해주었습니다.

ChatGPT가 추천한 엑셀 VBA가 무엇일까요?

> **엑셀 VBA란?**

엑셀에서 **반복적이거나 복잡한 작업을 자동화할 수 있는 매크로 및 프로그래밍 도구**입니다. 엑셀 내부에서 사용할 수 있는 비주얼 베이직 언어로, 사용자 지정 기능을 만들거나 데이터를 효율적으로 처리하는 데 활용됩니다. 특히 시간 절약과 업무 효율성을 크게 높일 수 있는 기능입니다.

굉장히 우리의 시간을 아껴줄 수 있는 자동화 방식이군요.

지체할 시간이 없습니다. 당장 엑셀 VBA를 활용 해봅시다.

# Step2. ChatGPT 답변대로 해보기⌨️

> 우리가 해야할일

1. ChatGPT가 알려준 엑셀 VBA 환경 구성해보기

2. VBA 프로그래밍 스크립트 PC에 이식 및 실행

### 1. ChatGPT가 알려준 엑셀 VBA 환경 구성해보기

### **ChatGPT가 가이드 대로 따라해보기**

1. **엑셀창을 키고 키보드의 ****"ALT + F11"****를 누르게 되면 아래 캡쳐 화면처럼 보이게 됩니다.**

![Image](https://upload.cafenono.com/image/slashpagePost/20240906/081121_0WfL8OI8NmP3sOOhP0?q=80&s=1280x180&t=outside&f=webp)

---

1. **우측 상단 ****"삽입 → 모듈"**** 버튼을 누릅니다.**

![Image](https://upload.cafenono.com/image/slashpagePost/20240906/081357_AL34MpFLZXEWMe87dE?q=80&s=1280x180&t=outside&f=webp)

---

1. **좌측 프로젝트 바에 ****모듈****이라는 폴더가 생기면 구성 완료!**

![Image](https://upload.cafenono.com/image/slashpagePost/20240906/081844_TdDdcz17N3F48SThnv?q=80&s=1280x180&t=outside&f=webp)

---

### 2. VBA 프로그래밍 스크립트 PC에 이식 및 실행

### **ChatGPT가 가이드 대로 따라해보기**

1. **ChatGPT가 작성해준 VBA 스크립트를 확인 및 복사 합니다.**

```
Sub MergeCellsWithComma()
Dim rng As Range
Dim cell As Range
Dim mergedText As String

' 병합하려는 범위 설정 (A1:E1)
Set rng = Range("A1:E1")

' 병합될 텍스트를 초기화
mergedText = ""

' 각 셀을 순회하면서 값을 쉼표로 연결
For Each cell In rng
If mergedText = "" Then
mergedText = cell.Value
Else
mergedText = mergedText & "," & cell.Value
End If
Next cell

' 병합된 값을 A1에 넣고, 다른 셀은 비웁니다.
rng.ClearContents
Range("A1").Value = mergedText
End Sub

```

---

1. **ChatGPT가 작성한 내용을 Module1에 붙여넣기 합니다. ( 아래 캡쳐 참고 )**

![Image](https://upload.cafenono.com/image/slashpagePost/20240906/083114_55zYrkGyXJVRVSK8Iv?q=80&s=1280x180&t=outside&f=webp)

---

1. **작업하던 창을 우측 상단의 최소화 버튼을 눌러 숨깁니다.**

![Image](https://upload.cafenono.com/image/slashpagePost/20240906/084005_G5EJbb0cuikBunB2Ob?q=80&s=1280x180&t=outside&f=webp)

---

1. **"ALT + F8"**** 버튼을 눌러 아래와 같이 매크로 창을 생성합니다. 생성된 창에 ****MergeCellsWithComma ****항목이 생성되었는지 확인합니다. **

2. **항목이 확인되었으면 우측 ****"실행버튼"****을 클릭합니다.**

![Image](https://upload.cafenono.com/image/slashpagePost/20240906/084452_O3XrektYU172grJQ0o?q=80&s=1280x180&t=outside&f=webp)

---

1. **실행 버튼 클릭 이후 원하는 결과물이 나왔는지 확인 합니다.**

![Image](https://upload.cafenono.com/image/slashpagePost/20240906/084708_QrMID90k57KIuaC0lw?q=80&s=1280x180&t=outside&f=webp)

---

ChatGPT가 알려준 방식대로 진행하였더니 매우 효과적으로 데이터를 처리할 수 있었습니다. 🤩

진행하다 보니 **동적으로 다른 데이터 셀에 내가 원하는 구분자를 넣을 수 있는 좋은 방법**은 없을까 고민 하였고 지체없이 ChatGPT에게 질문하였습니다.

### **ChatGPT의 답변 확인해보기**

![Image](https://upload.cafenono.com/image/slashpagePost/20240905/122659_Ar4xVKnvmpfhjLpaU9?q=80&s=1280x180&t=outside&f=webp)

ChatGPT는 저에게 **"사용자 정의 함수" **라는 방식을 추천하였습니다.

> **사용자 정의 함수(UDF, User Defined Function)란?**

엑셀에서 사용자 정의 함수(UDF, User Defined Function)는 **엑셀에 기본적으로 내장되어 있지 않은 함수를 사용자가 직접 정의하여 사용할 수 있도록 하는 기능**입니다. 주로 복잡한 계산이나 반복적인 작업을 자동화할 때 사용되며, VBA(Visual Basic for Applications)라는 언어를 사용해 작성합니다.

이제 ChatGPT가 알려준 방법대로 따라 해보겠습니다.

### ChatGPT가 가이드 대로 따라해보기

1. ChatGPT가 제공해준 스크립트를 확인 합니다.

```
Function MergeCellsWithComma(rng As Range, Optional delimiter As String = ",") As String
Dim cell As Range
Dim mergedText As String

' 병합할 텍스트 초기화
mergedText = ""

' 각 셀을 순회하면서 값을 delimiter로 연결
For Each cell In rng
If mergedText = "" Then
mergedText = cell.Value
Else
mergedText = mergedText & delimiter & cell.Value
End If
Next cell

' 병합된 텍스트를 반환
MergeCellsWithComma = mergedText
End Function

```

---

1. Module1의 스크립트 입력부에 ChatGPT가 작성해준 코드를 넣습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20240907/114010_zGpw7TRBXSxJ8q8Fjz?q=80&s=1280x180&t=outside&f=webp)

---

1. 코드를 작성 후 엑셀창으로 돌아옵니다. 저는 A2셀에서 사용자정의함수를 썻고

ChatGPT가 작성한 이름으로 함수를 호출하였습니다.

**=MergeCellsWithComma(A1:E1)**

![Image](https://upload.cafenono.com/image/slashpagePost/20240907/114523_C8htu4UgksR0ZvTZnD?q=80&s=1280x180&t=outside&f=webp)

---

1. A2셀에 사용자가 원하는 답변이 나왔는지 확인합니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20240907/114756_uMqmx3Y8VQh8Uz6Ie7?q=80&s=1280x180&t=outside&f=webp)

---

5. , 외에 다른 구분자를 넣고 싶으면 아래 항목을 변경하면 됩니다.

저는 / 구분자를 넣어 보았습니다.

![Image](https://upload.cafenono.com/image/slashpagePost/20240907/115319_KTVBVxcgrudo05oOyI?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20240907/115355_Vp2abgG67w8Zl09c93?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20240907/115326_iyVYgLuIvS6FTrVa1U?q=80&s=1280x180&t=outside&f=webp)

---

### 해당 작업을 마치며..

각 회사마다 엑셀환경이 제각각 다르고 최신 엑셀에서 제공하지 않는 함수들에 대한 니즈가 있을 것이라 생각해 작업해 보았습니다.

제 작업은 단순히 단어마다 구분자를 넣었지만 엑셀을 많이 사용하시는 분들에 따라 매번 노가다 하던 작업들을 자동화 시키는데 엑셀 VBA가 매우 큰 활용을 하실 것이라 판단 됩니다.

앞으로도 폐쇄망에서도 사용할 수 있는 자동화 방법들이 있다면 많이 공유하겠습니다.

이상 ruta 였습니다!!!

![Image](https://upload.cafenono.com/image/slashpagePost/20240907/120608_5xS0O6ecGmQ0fJbR2m?q=80&s=1280x180&t=outside&f=webp)