ポイント
- セルの先頭および末尾のスペース削除は、Trim 関数を使う。
- クラスは、シートへの反映は行わない。トリム済みの 2 次元 Variant 配列を返すのみとした。
- シートへの反映は、呼び出し元で行う。
エクセル例
- 新規 Microsoft Excel ワークシート.xlsx
- Sheet1
| No | 氏 | 名 |
|---|---|---|
| 1 | 山田 | 太郎 |
| 2 | 山田 | 花子 |
VBA コード
''' <summary>
''' 指定したブックのシートの範囲セルの先頭および末尾のスペースを削除するクラスです。
''' </summary>
Option Explicit
' 対象範囲 Range.Value の 2 次元配列
Private mvntValues As Variant
''' <summary>
''' 初期化処理を実行します。
''' </summary>
''' <param name="strBook">対象ブック名</param>
''' <param name="strSheet">対象シート名</param>
''' <param name="strRange">対象範囲名</param>
Public Sub Init( _
ByVal strBook As String, _
ByVal strSheet As String, _
ByVal strRange As String)
' 変数をセット
mvntValues = Workbooks(strBook).Sheets(strSheet).range(strRange)
End Sub
''' <summary>
''' 指定範囲セルの先頭および末尾のスペースを削除します。
''' </summary>
''' <returns>トリム済み値を格納した 2 次元配列</returns>
Public Function TrimmedValues() As Variant
' Range.Value 配列のコピーを用意し、元の配列はそのままの形で残す。
Dim vntCopied As Variant: vntCopied = mvntValues
Dim i As Long
Dim j As Long
For i = LBound(mvntValues, 1) To UBound(mvntValues, 1)
For j = LBound(mvntValues, 2) To UBound(mvntValues, 2)
' セルの先頭および末尾のスペースを削除
vntCopied(i, j) = Trim(mvntValues(i, j))
Next j
Next i
TrimmedValues = vntCopied
End Function
続いて、クラスを使うサンプルコードです。
- トリム対象エクセルは、VBA のエクセルファイルと同じフォルダに置いてあるとする。
- 今回の例ではトリム対象エクセルファイルに VBA を記述している。つまりコードで自分自身のファイル名を指定している。
ThisWorkbook.Pathで自分のファイルがあるフォルダのパスを取得Application.PathSeparatorでフォルダの区切りである ¥ を取得
Option Explicit
Public Sub TrimAllCells()
' トリム対象定義
Dim book As String: book = "新規 Micrsoft Excel ワークシート.xlsx"
Dim sheet As String: sheet = "Sheet1"
Dim range As String: range = "A1:C3"
' 操作可能にするためにエクセルファイルを開く。
Call Workbooks.Open(ThisWorkbook.Path & Application.PathSeparator & book)
' トリマー生成
Dim trimmer As CellTrimmer: Set trimmer = New CellTrimmer
Call trimmer.Init(book, sheet, range)
' トリム実行
Workbooks(book).Sheets(sheet).range(range) = trimmer.TrimmedValues
End Sub
おわりに
次のページが参考になりました!ありがとう存じます。
以上です。
