VBA100本ノック 4本目:セルの消去
こちらで公開されている、100本ノックに挑戦。
www.excel-ubara.com
素晴らしい教材を公開いただき、ありがとうございます。
上記リンク先から、問題文を転載。
3本目では1行目とA列以外の値を消去したが、今回はそれに加えて計算式が
セットされたセルも、消去対象から除外されている。
手動でやるなら、選択オプションで数値のみを指定した場合の範囲に限り、
消去すればよい。
そこで今回は、前回の解答を再利用するとしよう。
Sub VBA_100Knock_004() ' 表全体を変数に格納。 Dim TableRange As Range Set TableRange = Range("A1").CurrentRegion ' 表の領域をオフセットさせたうえで、一行一列ずつ ' 縮めることで指定領域を得る。 Dim TargetRange As Range Set TargetRange = TableRange _ .Resize(TableRange.Rows.Count - 1, _ TableRange.Columns.Count - 1) _ .Offset(1, 1) ' 指定領域の数値のみ消去。 On Error Resume Next TargetRange.SpecialCells(xlCellTypeConstants, _ xlNumbers) = vbNullString End Sub
RangeオブジェクトのSpecialCellsメソッドは、空白セルを一括で選ぶ場合などに
とても使い出があるのでお勧め。
また、第二引数のxlNumbersは「数値」を表している。省略した場合、下表の
全てを指定したことになる。
定数 | 値 | 意味 |
---|---|---|
xlNumbers | 1 | 数値 |
xlTextValues | 2 | 文字 |
xlLogical | 4 | 論理値 |
xlErrors | 16 | エラー値 |
ご存じの方も多いと思うが念のため補足すると、第二引数は2のべき乗と
なっている。
※オブジェクトブラウザで確認した限り、値「8」はこの場合存在しない
ようです。
従って、有効/無効を1/0でスイッチの如く与えた場合、例えば
数値「1」と理論値「4」とエラー値「16」を有効にすると、このように
表される。
以上のことから、マクロでは次のような表記が可能となる。
' 以下は全て同じ意味。 ' ① 定数の足し算で指定。 TargetRange.SpecialCells(xlCellTypeConstants, _ xlNumbers + xlLogical + xlErrors) = vbNullString ' ② 値の足し算で指定。 TargetRange.SpecialCells(xlCellTypeConstants, _ 1 + 4 + 16) = vbNullString ' ③ 値の合計で指定。 TargetRange.SpecialCells(xlCellTypeConstants, 21) = vbNullString
※2進数の「10101」は、10進数で「21」。
※他の組合せでは合計値が21にならないため、定数の足し算が可能。
※「マクロの記録」でコードを取得した場合は、③の表記となる。
解答を実行した結果がこちら。
※冒頭リンク先の解答例および解説も、ぜひご一読ください。
参考まで。