VBA:指定範囲で「数式が壊されていないか」をチェックできるマクロ
通信簿を点検していると、評価や評定の数式を無視して手入力している場合があります。
これをチェックするには、エクセルの数式メニュータブの「数式の表示」でできますが、ずらっと数式が表示されるので、ちょっとダサいような気がします。
こんな処理もマクロでできます。
青ボタンを押して実行すると、
数式ではないセルが赤く塗りつぶされ、メッセージが表示されます。
判定は、セル内容の「左端が=ではないセル」で行います。
サンプルシートは例によって、最後に置いています。よかったらご覧になってみてください。案外、探しても無かったんですよ。ここまでチェックできるシート。
でも、このサイトを参考にさせていただきました。結構、学校現場でも使えそうな実用的なコードが多かったです。
--------------------------------------------
で、今回備忘録したいのは、
配列も、セルに書いた値で指定できるというところです。
学校現場で、VBAのコードを書き換えながら使える人は、今の職場では
いません。できるだけ、使用する人に優しい設計にしたいなと思い、校務用システムの開発に取り組んでいます。
【書いたコード】
Sub 配列をセルの値で指定し赤塗りとメッセージで表示()
Dim col As Range 'セル範囲
Dim adrs As Variant 'セル位置
Dim msg As Variant '出力メッセージ
On Error Resume Next
'★1行目を指定範囲から外す
If Range(Range("C1")).row = 1 Or Range(Range("E1")).row = 1 Then
Exit Sub
End If
'★まず赤塗りをクリア
For Each col In ActiveSheet.UsedRange
If col.Interior.ColorIndex = 3 Then
col.Interior.ColorIndex = 0 '白
Else
End If
Next
Dim rng1, rng2 As String
Dim rng As Variant
Dim r As Range 'セル範囲
rng1 = Range("C1").Value '範囲スタート
rng2 = Range("E1").Value '範囲ゴール
rng = Range(rng1, rng2).Address
'入力セル範囲をループ
For Each r In Range(rng)
r.Interior.ColorIndex = 3 '赤塗り
adrs = r.Address(False, False) '絶対参照$を省略
msg = msg & adrs & "," '改行での表示形式
Next
'メッセージボックスに出力
Call MsgBox("設定範囲で" & vbCr & "以下のセルが配列です。" & vbCr & "↓表示無しなら配列はありません。" & vbCr & msg)
On Error GoTo 0
End Sub
-----------------------------------------
ポイントは、セル値はStringで指定し、それを組み合わせたrngはVariantで指定します。そして、rngを配列に入れるときには、Range(rng)とし、rをRangeとして取り出すことです。
この手法を使って、「数式が壊されていないか」チェックするマクロも、
実行範囲をセルの値で指定できるようにしてみました。
実際に使ってるんですが、チェックが結構楽になりました。
マクロは嘘つかない。
↓サンプルブックです。(備忘録)
では、また(^^)/