いきさつ
前立腺がんと診断されて9年になるが、今、困っているのが頻尿。Dr.に窮状を訴えているが、「今の薬に変わるものはない」と言われ、「20時半に寝るのは早い」とも‥‥
後者の意味がよく解らなかったので「ならば実績を採ってみよう」と、付け始めたのが 頻尿記録.xlsm。
データの入力
- 就床 年月日:床に就いた年月日
- 就床 時刻:床に就いた時刻
- 起床時刻 1~10:トイレに起きた時刻
- S列~AK列:グラフを作るためのデータで全て計算式
例えば- S4(時刻):=B4
- グラフデータが離れた列にあるとグラフを作り難いため...
- W4(起床年月日):=TEXT(A4,"ge.mm/dd")
- グラフの横軸が「数値」だと上手く作図出来なかったため、文字列に変換
- S4(就床時刻):=B4
- AB(間隔1):=IF(C4<>"",IF(C4>B4,C4-B4,$A4+1+C4-($A4+B4)),"")
- C4>B4 ならば C4-B4、逆ならば 翌日のC4から当日のB4との差
- AK(間隔10):=IF(L4<>"",IF(L4>K4,L4-K4,$A4+1+L4-($A4+K4)),"")
- S4(時刻):=B4
- X4(離床回数):=COUNT(AB4:AK4)
- Y4(平均時間):=AVERAGE(AB4:AK4)
- Z4(最長時間):=MAX(AB4:AK4)
- AA4(延べ時間):=X4*Y4
回数・時間(平均と最長)の折れ線グラフ
データ入力上の問題点
一朝一夕で Excelシートの配列が上述のようになった訳ではないが、データを入力する A列~L列 は当初より変わっていない。
今、作っているグラフは問題はどういうグラフを作るか‥‥ で、後述の 就床時刻と夜中に起きた回数 の散布図を作るにあたってはグラフデータをかなり変更した。問題は、
- データは毎日追加するので、
- その都度、グラフデータの範囲(グラフのデザイン タブ ⇒ データの選択)を変えねばならない。
- その時、グラフデータの作り方によっては「データ範囲が複雑すぎる」ため、簡単には変更できない‥‥ ことがある... そこで、
- 予めグラフの右端(データの最下位)のデータを入力しておき、グラフを作成する。
- データを追加する時は、最下位の上に行挿入し、入力する。
これにより、グラフデータの範囲が自動的に拡がり、グラフデータの範囲の変更が不要になる...
行を挿入した時、直上の書式や数式をコピーしておかないと面倒なことになる。
今はVBAで何とか対応しているが、もっと上手い方法がないか‥‥ チャットGPTに尋ねた。
チャットGPT
1回目 | |
---|---|
User | エクセルVBAで1行挿入し直上のセルの書式をコピーするには |
ChatGPT | エクセルVBAで1行を挿入して、直上のセルの書式をコピーするには、以下のようなコードを使用します。 Sub InsertRowAndCopyFormat() Dim currentRow As Integer currentRow = ActiveCell.Row ' 行を挿入 Rows(currentRow).Insert Shift:=xlDown ' 直上の行の書式をコピー Rows(currentRow - 1).Copy Rows(currentRow).PasteSpecial Paste:=xlPasteFormats ' コピー元の行を削除 (必要であればコメントアウトを解除して使用してください) ' Rows(currentRow - 1).Delete End Sub このマクロは、アクティブなセルの行の直上に新しい行を挿入し、直上の行の書式をコピーして新しい行に貼り付けます。最後の行は、元の行を削除するかどうかを選択するためのオプションです。この行をコメントアウトすると、元の行は削除されませんが、必要に応じて挿入してください。 このマクロを実行するには、エクセルのVBAエディタを開き、適切なモジュールにコードを貼り付け、実行したいマクロを呼び出す方法(例:ボタンに割り当てる、キーボードショートカットを設定するなど)を設定します。 |
2回目 | |
User | エクセルVBAで数式バーにカーソルを移すことは出来ますか? |
ChatGPT | エクセルVBAを使用して数式バーに直接カーソルを移動することはできません。数式バーはExcelのユーザーインターフェースの一部であり、VBAでは直接操作することができない要素です。 ただし、VBAを使用して特定のセルの内容を数式バーに表示させることは可能です。以下のようなコードを使用して、指定したセルの内容を数式バーに表示させることができます。 エクセルVBAで1行を挿入して、直上のセルの書式をコピーするには、以下のようなコードを使用します。 Sub MoveCursorToFormulaBar() Dim rng As Range Set rng = Range("A1") ' 数式バーに表示したいセルを指定します rng.Select ' セルを選択することで数式バーに内容が表示されます End Sub 上記の例では、セル"A1"の内容を数式バーに表示させるように指定しています。セルの範囲を変更することで、他のセルの内容を数式バーに表示させることもできます。 ただし、数式バーにフォーカスを直接移動させることはできないため、ユーザーが手動で数式バーにカーソルを移動する必要があります。 |
3回目 | |
User | 有り難うございました。 |
ChatGPT | どういたしまして!お役に立てて嬉しいです。もしさらなる質問があれば、いつでもお知らせください。お手伝いできることがあれば喜んでお手伝いいたします。素晴らしい日をお過ごしください! |
自分が組んだVBAでは For~Next で回しているが、これなら2行で済む。
今は特に問題が無いので、変える予定はないが、今後の参考にしたい...
就床時刻と夜中に起きた回数の散布図
- 回数・時間(平均と最長)の折れ線グラフ から判るように 5月8日を機に頻尿回数が下がっているので、グラフを分けた。
- 5月3日に血尿があり、その後排尿痛が無くなったことから「膀胱炎」が峠を越した‥自己判断‥と思われる。
- そこで、それ以前は ✕ とし、以降は ○ とした。
- 昨日のデータが判るように ○ の中に● を入れた。
- 就床時刻と頻尿回数の間に関係があるのか‥‥ を見るために2次式の回帰曲線を入れてみたが、相関係数 0.2 以下では何とも言えないが...
水を飲んでから尿になるまでの時間はどれくらい?
www.alpina-water.co.jp
水分補給後1時間では、補給した水分の16%ほどが尿となります。そして2時間で60%、3時間で80%、最終的に6時間ほどたつと、補給した水分のほとんどが尿となります。
今日の結論
- 夕食が終わる時刻は19時半とすれば‥‥
- 夕食時までに摂った水分の80%が尿になる時刻は 22時半‥‥
- 実績から、21時半以降に寝ると、夜間起きる回数は、ほゞ4回以下となる。
と言うことで、Dr. の言う「20時半に寝るのは早い」は当たっているかも...
今後は、食後3時間以降に寝ることにし、夜間起きる回数を 1~2回減らしたい。