まりふのひと

Excelマクロ「選択したセルの前後の空白を削除する」

Option Explicit

Sub 選択したセルの前後の空白を削除する()
Dim mbTitle As String
Dim c As Range
    
    mbTitle = ActiveWorkbook.Name & "/選択したセルの前後の空白を削除する"
    If Selection.Count = 0 Then
        MsgBox "セルが選択されていません。", vbCritical, mbTitle
        Exit Sub
    End If
    
    For Each c In Selection
        c.Value = Trim(c.Value)
    Next
            
End Sub
  • If Selection.Count = 0 のコードは、無意味のようだ。
     (どこかのセルがアクティブになっているので、Selection.Count がゼロになることはない)


 参照サイト

  • 選択範囲の操作 (Office TANAKA - Excel VBA Tips)
    左上のセルは、選択された範囲の中で1番目のセルなので、Selection(1) となります。
    右下のセルは、選択された範囲の中で最後のセルです。最後とは、この例でいうと 15番目です。選択されているセルが全部で15個だからです。
    したがって、右下のセルは Selection(15) となるのですが、この 15は要するに「選択されているセルの個数」です。つまり Selection.Count ですね。なので、右下のセルは Selection(Selection.Count) で特定できます。
    次に、この選択範囲は「何行×何列」の大きさでしょう。
    これも簡単です。行数は Rows.Count でわかりますし、列数は Columns.Count です。
    5行目というのは「先頭セルの行位置」であり、9行目は「最終セルの行位置」です。
    同じように、3列目は「先頭セルの列位置」で、5列目は「最終セルの列位置」です。
    ここまでわかれば簡単ですね。

    5行目 → Selection(1).Row
    9行目 → Selection(Selection.Count).Row
    3列目 → Selection(1).Column
    5列目 → Selection(Selection.Count).Column


次のような原始的な方法を考えていた...

Sub Sample1()
Dim c As Long, c1 As Long, c2 As Long, r As Long, r1 As Long, r2 As Long
Dim selCount As Long
    
    r1 = Selection(1).Row           '左上セルの行番号
    c1 = Selection(1).Column        '左上セルの列番号
    selCount = Selection.Count             '選択セル数
    r2 = Selection(selCount).Row           '右下セルの行番号
    c2 = Selection(selCount).Column        '右下セルの列番号
    
    For c = c1 To c2
        For r = r1 To r2
            Cells(r, c).Select
                '1秒待つ
            Application.Wait (Now() + TimeValue("0:00:01"))
        Next
    Next
            
End Sub