#EXCEL VBA 文字列の連結について
EXCEL VBAでよく問題になるのが文字列の結合です。
少量なら問題ないですが、CSVなどを出力するプログラムなどで大量の文字を結合するようになると処理が極端に遅くなります。
#文字列結合の高速化
文字列結合の高速化方法についての詳細は他のブログなどでも紹介されているので、ここでは細かいことは省きます。
要はメモリをあらかじめ確保しておき、Midステートメントを使用し、確保したメモリに文字を埋め込むという作業をしています。
EXCEL VBAで大量の文字を扱うときは下記のStringBuilderクラスをインポートして使用して下さい。
StringBuilder.cls
Option Explicit
Private m_len As Long '実際の文字列の長さ
Private m_bufLen As Long 'バッファーの長さ
Private m_buffer As String 'バッファー
Private m_bufPos As Long 'バッファーの書き込み位置
Public Function ToString() As String
ToString = Left$(m_buffer, m_bufPos)
End Function
Private Sub Class_Initialize()
m_len = 0
m_bufLen = 0
m_bufPos = 0
End Sub
Public Sub AppendLine(app As String)
Append app & vbCrLf
End Sub
Public Sub Append(app As String)
Dim appLen As Long
Dim appBufLen As Long
appLen = Len(app)
'-- バッファ管理
If (m_bufLen < m_bufPos + appLen) Then
appBufLen = (appLen \ 4096) * 4096 + 4096
m_bufLen = m_bufLen + appBufLen
m_buffer = m_buffer & String(appBufLen, Chr(0))
End If
'-- 文字列挿入
Mid$(m_buffer, m_bufPos + 1, appLen) = app
m_bufPos = m_bufPos + appLen
End Sub