まりふのひと

夜間起きる回数低減にチャットGPTが貢献したかも...

いきさつ

 前立腺がんと診断されて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)),"")
  • X4(離床回数):=COUNT(AB4:AK4)
  • Y4(平均時間):=AVERAGE(AB4:AK4)
  • Z4(最長時間):=MAX(AB4:AK4)
  • AA4(延べ時間):=X4*Y4

回数・時間(平均と最長)の折れ線グラフ


データ入力上の問題点

 一朝一夕で Excelシートの配列が上述のようになった訳ではないが、データを入力する A列~L列 は当初より変わっていない。
今、作っているグラフは問題はどういうグラフを作るか‥‥ で、後述の 就床時刻と夜中に起きた回数 の散布図を作るにあたってはグラフデータをかなり変更した。問題は、

  • データは毎日追加するので、
  • その都度、グラフデータの範囲(グラフのデザイン タブ ⇒ データの選択)を変えねばならない。
  • その時、グラフデータの作り方によっては「データ範囲が複雑すぎる」ため、簡単には変更できない‥‥ ことがある... そこで、
  1. 予めグラフの右端(データの最下位)のデータを入力しておき、グラフを作成する。
  2. データを追加する時は、最下位の上に行挿入し、入力する。

これにより、グラフデータの範囲が自動的に拡がり、グラフデータの範囲の変更が不要になる...
 行を挿入した時、直上の書式や数式をコピーしておかないと面倒なことになる。
今は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回減らしたい。