【Excel VBA】指定したシートの範囲のセルの先頭および末尾のスペースを削除するクラスのコード♪

スポンサードリンク


ポイント

  • セルの先頭および末尾のスペース削除は、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

おわりに

次のページが参考になりました!ありがとう存じます。

以上です。

コメントを残す