「家計簿で血圧等を入力したい」という要望に対応するため、各自が持っている歩数・血圧等をレイアウトを変更し、家計簿に取り込む。
- 血圧や歩数の記録は、各自でスタート時期が異なる(たぶん)ので、データが 1ヶ月分以上ある方を優先する。
- 個人個人でレイアウトが異なるはずなので、統一して家計簿に「新しいシート」を作成する。
- データが少ないとグラフのイメージが固まらない...
- 新しい関数(VLookup)を使うことになる。(たぶん)
- VLOOKUP関数の利用「商品コードから商品名を求めるには」 (ワニchanのぱそこんわーるど:Microsoft Office総合情報&Tips)
§1.対応方法(予定)
- 新しいシートを作成し、下記 §2.の項目を入力する。
- 家計簿の中でグラフを作ることは、家計簿を壊すリスクがあるので行わない。
代わりに、グラフデータを別ブックに書き出す。(ブック名:家計簿77グラフデータ の予定)
§2.入力する項目と並び

- No. ‥‥ 入力不要。収支シートと合わせるための設けた。
- 年月日 ‥‥ 発生日。
- 今は、重複は無いことを前提にしている。
- 血圧値等を複数回入力するのであれば、入力を 年月日時分(例えば、2014/11/1 7:00)にすれば可能だが...
- 歩数
- 体重
- 体温
- 上血圧
- 下血圧
- 脈拍
- 備考
- 項目名は任意。説明の都合を考えると、統一した方がよい。
- 入力し易い順にしておくのがベスト。
- 項目名はマクロの中では使わない。使うのは列番号なので、一度決めたら並びは変えられない。
§3.シート名
“歩数血圧” を予定している。
一度決めたら変更は不可。(マクロの中で使うため)
§4.既存データのつなぎ込み
個々に異なるので、個別対応となる。
作ってあるマクロは下記。但し、ケースバイケースで変える...
≪歩数血圧マクロ.xlsm≫
- Sub a4_日付重複チェック()
- '日付順にならんでいる前提。
- Dim mbTitle As String
- Dim oldDate As Date
- Dim chofukuCtr As Long
- Dim r As Long, lastRow As Long
- mbTitle = "日付重複チェック/" & ThisWorkbook.Name
- lastRow = Cells(Rows.Count, 2).End(xlUp).Row
- chofukuCtr = 0
- For r = 2 To lastRow
- If r = 2 Then
- oldDate = Cells(r, 2)
- Else
- If Cells(r, 2) = oldDate Then
- Range(Cells(r - 1, 2), Cells(r, 2)).Select
- MsgBox "日付が重複しています!", vbExclamation, mbTitle
- chofukuCtr = chofukuCtr + 1
- Else
- oldDate = Cells(r, 2)
- End If
- End If
- Next
- MsgBox chofukuCtr & "件 日付が重複していました。", vbInformation, mbTitle
- End Sub
- Sub a3_空行を削除する()
- Dim mbTitle As String
- Dim isDelete As Boolean
- Dim c As Long, r As Long, lastRow As Long
- Dim deleteCtr As Long
- mbTitle = "空行を削除する/" & ThisWorkbook.Name
- lastRow = Cells(Rows.Count, 2).End(xlUp).Row
- deleteCtr = 0
- For r = lastRow To 2 Step -1
- isDelete = True
- For c = 3 To 9
- If Cells(r, c) <> "" Then isDelete = False: Exit For
- Next
- If isDelete Then
- Rows(r).Select
- MsgBox "削除します!", vbExclamation, mbTitle
- Rows(r).Delete: deleteCtr = deleteCtr + 1
- End If
- Next
- MsgBox deleteCtr & "件 削除しました。", vbInformation, mbTitle
- End Sub
- Sub a2_結合する()
- Dim mbTitle As String
- Dim i As Long, c As Long
- Dim lastRow As Long
- Dim oldDate As Date
- mbTitle = "結合する/" & ThisWorkbook.Name
- lastRow = Cells(Rows.Count, 2).End(xlUp).Row
- For i = 2 To lastRow
- Range("B" & i).Select
- Do 'dummy
- If i = 2 Then oldDate = Cells(i, 2): Exit Do
- If Cells(i, 2) <> Cells(i - 1, 2) Then oldDate = Cells(i, 2): Exit Do
- Union(Rows(i - 1), Rows(i)).Select
- MsgBox "結合します1", vbExclamation, mbTitle
- '歩数〜脈拍
- For c = 3 To 8
- If Cells(i, c) <> "" Then
- If Cells(i - 1, c) = "" Then
- Cells(i - 1, c) = Cells(i, c): Cells(i, c) = ""
- Else
- MsgBox "結合できません!", vbCritical, mbTitle
- Stop
- End If
- End If
- Next
- '備考
- If Cells(i, 9) <> "" Then
- If Cells(i - 1, 9) = "" Then
- Cells(i - 1, 9) = Cells(i, 9): Cells(i, 9) = ""
- Else
- Cells(i - 1, 9) = Cells(i - 1, 9) & "/" & Cells(i, 9): Cells(i, 9) = ""
- End If
- End If
- Exit Do
- Loop
- Next
- End Sub
- Sub a1_並べ替える()
- Dim lastRow As Long
- lastRow = Cells(Rows.Count, 2).End(xlUp).Row
- ActiveWorkbook.Worksheets("歩数血圧録").Sort.SortFields.Clear
- ActiveWorkbook.Worksheets("歩数血圧録").Sort.SortFields.Add Key:=Range("B2:B" & lastRow) _
- , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
- ActiveWorkbook.Worksheets("歩数血圧録").Sort.SortFields.Add Key:=Range("C2:C" & lastRow) _
- , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
- With ActiveWorkbook.Worksheets("歩数血圧録").Sort
- .SetRange Range("A1:I" & lastRow)
- .Header = xlYes
- .MatchCase = False
- .Orientation = xlTopToBottom
- .SortMethod = xlPinYin
- .Apply
- End With
- End Sub