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