今日は 骨シンチ 検査の日。4月14日の定期検査で PSA の漸増が続いているので‥‥ 転移の有無を調べるため CT検査(4月15日に済み)と骨シンチ を撮ることになったもの。
注射から検査まで 2時間あるので、
- 病院の廊下の椅子でコーヒー片手に
- 1FのJA売店も、手前にあった休憩室? も無くなっていたので...
- 日経パソコン 2022.4.25号(右図)を読んでいて‥‥
- 「面倒な作業は VBA身にマクロで解決!
-セル範囲の各データを一括処理する-」 の中に、「For Each ~」の行で「SpecialCells」メソッドを使用し、定数(非数式)の数値のセルだけを繰り返しの対象としている。「xlCellTypeConstants」を第1引数、「xlNumbers」を第2引数に指定した。
とあり、 - 💡閃いたッ! 「血圧グラフ」のグラフデータの手修正がマクロ化出来そう‥‥
- 「面倒な作業は VBA身にマクロで解決!
血圧の記録
R2年1月下旬、血圧が高いので町内の医院を訊ねたら、「朝晩の血圧を付けなさい」と言われ、持田製薬の血圧管理手帳をもらい、血圧計を買って付け出した。
- 起床時と就床前に、
- 各2回測り、
- 平均値と ME差 を「グラフにするとわかりやすい」と...
Excel で処理
Excel しかない‥‥ と、まずは記録表のとおりに入力出来るようにした。
グラフデータ
入力データの右側に平均値、ME差を計算するための列を作った。
- シリアル月日:=A8
- グラフの横軸。グラフ表の塊にするためで、今となっては、それ以外の目的はない。
- 朝上血圧:=AVERAGE(C8:D8)
- 朝下血圧:=AVERAGE(E8:F8)
- 夜上血圧:=AVERAGE(M8:N8)
- 夜下血圧:=AVERAGE(O8:P8)
- ME差:=V8-X8
以下は、基準線を引くためのデータ
- 上目標:=$F$2(現在は 135)
- 下目標:=$G$2(現在は 85)
- 縦軸値:=IF(MOD(MONTH(U8),2)=0,-70,-70)
- 以前は「月の変わり目」が判るように凹凸の線にしていた‥‥
が、いまはグラフの書式設定で対応した(下図)ので、-70 で事足りている。
- 以前は「月の変わり目」が判るように凹凸の線にしていた‥‥
グラフデータの問題点
起床時と就床前の血圧を測っていれば問題ないが、片一方あるいは両方忘れることは度々ある...
Dr.は「傾向を見るので、毎日測らなくてもよい」と言うが、Excel では測らないとグラフ上は 0(ゼロ)になってしまうので、そうはいかない...
- 12/24 は就床前(夜)を忘れた例
- 12/25 は両方忘れた例
- 12/26 は起床時(朝)を忘れた例
このままグラフを描くと 0(ゼロ)値となってしまうので、
- シートの保護を解除し、
- #DIV/0! のセルをクリア(Delete)
- シートの保護
を行っている...
完成したマクロ(VBA)
日経パソコンの記事と[マクロの記録]を参考に、試行錯誤‥‥ した...
01. Public Sub エラーのセルをクリアする()
02. Const colL As Long = 12 '夜時刻
03. Const colV As Long = 22 '朝上血圧
04. Const colZ As Long = 26 'ME差
05. Dim mbTitle As String
06. Dim rng As Range
07. Dim lastRow As Long
08.
09. mbTitle = "エラーのセルをクリアする/" & ThisWorkbook.Name
10. 'シート保護を無視するコマンド
11. ThisWorkbook.Worksheets("データ").Protect UserInterfaceOnly:=True
12. '最終の夜の測定時刻(L列)の行をセットする。
13. lastRow = Cells(Rows.Count, colL).End(xlUp).Row
14. '頭(6行目)から選択し、
15. Range(Cells(6, colV), Cells(lastRow, colZ)).Select
16. '#Errorのセルをクリアする=式を消去する。
17. For Each rng In Selection
18. If IsError(rng.Value) Then rng.ClearContents
19. Next rng
20. '選択を解除する。
21. Cells(lastRow, colL).Select
22.
23. End Sub
上記で完成した‥‥ と思ったが、グラフを見ると ME差 が何かおかしい...
原因は‥‥
- マクロの実行前
- 朝上血圧または夜上血圧のどちらか あるいは両方が #DIV/0! であると、
- ME差も #DIV/0! となる。
- マクロの実行後
- 朝上血圧または夜上血圧のどちらか あるいは両方がクリアされる(セルの値は ”” になる)ので、
- ME差は正常に計算される。ME差は #DIV/0! でないのでクリアされない。
そこで
- まず、ME差が #DIV/0! のセルをクリア後、
- 血圧値が #DIV/0! のセルをクリアする。
ように変更したら、上手く処理されたぁ~~~