반응형
본 글은 엑셀 VBA에서 String
데이터형과 문자열 연결 연산자 &
의 올바른 활용 방법을 정리하여, 실무자가 다양한 데이터 가공 업무를 신속히 처리하도록 돕는 것을 목적으로 한다.
문자형(String) 데이터형 기본 개념
- 문자형(String)은 문자, 숫자, 기호를 포함한 텍스트 데이터를 저장하는 데이터형이다.
- 영문·한글 모두 지원하며, 내부적으로 Unicode(UTF-16)로 관리한다.
- VBA에서 기본 길이 제한은 0~2,147,483,647(≈2 GB) 문자이며, 동적 길이이므로 가변 할당된다.
데이터형 | 저장 크기 | 저장 내용 | 예시 |
---|---|---|---|
String (변동) | 2 바이트 × 문자수 | 텍스트, 숫자, 특수문자 | "Excel 2025" |
Integer | 2 바이트 | 정수(-32,768~32,767) | 2025 |
Long | 4 바이트 | 정수(-2,147,483,648~2,147,483,647) | 123456 |
Double | 8 바이트 | 배정밀도 실수 | 3.141592 |
String 변수 선언 및 초기화
Option Explicit '변수 선언 강제
Sub DeclareString()
Dim sEmployee As String '빈 문자열 ""
Dim sProject As String: sProject = "Chemboss 블로그"
Dim sMultiLine As String
sMultiLine = "첫째 줄" & vbCrLf & _
"둘째 줄" '줄바꿈 상수
End Sub
문자열 연결 연산자 &
사용법
문자열을 결합할 때는 & 연산자를 사용한다. &
는 피연산자를 모두 문자열로 형변환하고 결합하므로 데이터형 오류를 방지한다.
구문 | 동작 | 예시 결과 |
---|---|---|
s1 & s2 |
두 문자열 단순 결합 | "ABC" & "123" → "ABC123" |
s & vbCrLf & t |
줄바꿈 포함 결합 | 다중 행 문자열 |
CStr(n) & "건" |
숫자 → 문자열 후 결합 | 5 → "5건" |
+
연산자와 &
의 차이
요점: 문자열 결합은
&
사용을 원칙으로 한다. +
는 숫자형 값을 만나면 산술 연산으로 해석되어 예기치 않은 결과가 발생한다.Sub ComparePlusAndAmpersand()
Dim a As String, b As String
a = "3": b = "5"
Debug.Print a + b '결과: 8 (숫자 계산)
Debug.Print a & b '결과: 35 (문자열 연결)
End Sub
구분 | + | & |
---|---|---|
우선순위 | 산술 > 문자 | 항상 문자 |
형변환 | 자동 숫자 변환 시도 | 자동 문자 변환 |
권장 용도 | 숫자 덧셈 | 문자열 연결 |
오류 위험 | Type Mismatch 위험 | 낮음 |
실무 활용: Excel 셀 데이터 결합
1. VBA 루프에서 동적 빌드
Sub BuildCSV()
Dim i As Long, sLine As String, sCSV As String
For i = 1 To 100
sLine = Cells(i, "A").Value & "," & Cells(i, "B").Value
sCSV = sCSV & sLine & vbCrLf
Next i
Debug.Print sCSV
End Sub
2. 워크시트 함수 활용
=A2 & " " & B2
: 두 셀 연결=TEXTJOIN(", ",TRUE,A2:D2)
(Excel 2016+) : 범위 결합
문자열 연결 성능 최적화
- 대용량 반복 결합은
StringBuilder
개념의Join
함수 활용이 효율적이다. - 배열로 수집 후
Join(myArr, vbCrLf)
방식이&
반복보다 빠르다. - 필요 시
Application.ScreenUpdating = False
로 화면 갱신을 끈다.
문자열 관련 주요 함수 한눈에 보기
함수 | 역할 | 예시 |
---|---|---|
Len |
문자열 길이 반환 | Len("ABC") → 3 |
Left , Right |
좌·우측 부분 문자열 추출 | Left("Chemboss",4) → "Chem" |
Mid |
중간 부분 추출 | Mid("Excel",2,2) → "xc" |
Instr |
부분 문자열 위치 | Instr("ABCDEF","CD") → 3 |
Replace |
문자열 치환 | Replace("2024-12-31","-",".") → "2024.12.31" |
Format |
숫자·날짜 서식화 | Format(Now,"yyyy-mm-dd") |
Join |
배열 → 문자열 결합 | Join(Array("A","B"),",") → "A,B" |
오류 처리 및 예외 상황
- Null 값이 포함되면 결과가 Null이 된다.
Nz
또는IIf(IsNull(x),"",x)
로 방어한다. - 길이 > 2 GB 초과 시
Overflow
가 발생한다. 데이터 분할이 필요하다. - 다국어 혼합 문자열에서 코드 페이지 문제가 있으면
StrConv
함수로 변환한다.
반응형
FAQ
Q. 문자열 결합 시, 셀 서식이 숫자·날짜인 경우 결과가 이상해진다?
A. 셀 값을 직접 가져오면 내부 값(Serial) 그대로 연결될 수 있다. Format
함수로 원하는 서식으로 변환한 뒤 결합해야 정확하다.
Q. String
대신 Variant
를 쓰면 어떤가?
A. Variant
는 다형성을 제공하나, 메모리 오버헤드가 크다. 문자열 전용 변수에는 String
사용을 권장한다.
Q. 대용량 텍스트 파일을 만들 때 성능이 낮다?
A. &
반복으로 인한 메모리 재할당이 병목이 된다. Join
함수로 결합 후 한 번에 기록하거나 FileSystemObject
의 CreateTextFile
메서드와 .Write
를 이용하여 스트림 방식으로 출력한다.
반응형
'#4 VBA > #4.2 코딩문법' 카테고리의 다른 글
데이터형(Integer, Long, Double 등) 구분 (3) | 2025.08.05 |
---|---|
상수(Constant) 선언 방법 (0) | 2025.08.04 |
전역 변수와 지역 변수 차이 (7) | 2025.07.31 |
Option Explicit와 변수 선언 강제 (4) | 2025.07.30 |
변수의 범위(Public, Private) (0) | 2025.07.29 |