본문 바로가기
#4 VBA/#4.2 코딩문법

문자형(String)과 문자열 연결(&)

by 이세계의엑셀 2025. 8. 6.
반응형

본 글은 엑셀 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+) : 범위 결합

문자열 연결 성능 최적화

  1. 대용량 반복 결합StringBuilder 개념의 Join 함수 활용이 효율적이다.
  2. 배열로 수집 후 Join(myArr, vbCrLf) 방식이 & 반복보다 빠르다.
  3. 필요 시 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 함수로 결합 후 한 번에 기록하거나 FileSystemObjectCreateTextFile 메서드와 .Write를 이용하여 스트림 방식으로 출력한다.

반응형