■
後から考えてみると1年分とかたくさんの表を作るためには、もう一工夫必要。
それで数式を作り直してみます。
1人につき1年分の表を作る場合。
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | H21.7.4 | 1 | 2 | 3 | 4 | 5 | 合計 |
2 | 数式1 | =A2 | =A2+7 | =A2+14 | =A2+21 | 数式2 | =COUNT(B2:F2) |
3 |
A1セルには最初の月の仕事曜日の最初の日を記入します。
数式1と数式2のところには次の式が入ります。
数式1
=DATE(YEAR(A1),MONTH(A1)+1,1)+IF(WEEKDAY(A1)-WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,1))>=0,WEEKDAY(A1)-WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,1)),WEEKDAY(A1)-WEEKDAY(DATE(YEAR(A1),MONTH(A1)+1,1))+7)
数式2
=IF(MONTH(A2)=MONTH(A2+28),A2+28,"")
そうするとこういう表ができます。
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | H21.7.4 | 1 | 2 | 3 | 4 | 5 | 合計 |
2 | 8/1 | 8/1 | 8/8 | 8/15 | 8/22 | 8/29 | 5 |
3 |
(セルの書式設定で適当に日付を設定してください)
ここで仮に第2火曜日が休みならば、C2セルを空白にしA2からG2を選択して下にコピーするとこういう表が簡単にできます。
A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | H21.7.4 | 1 | 2 | 3 | 4 | 5 | 合計 |
2 | 8/1 | 8/1 | 8/15 | 8/22 | 8/29 | 4 | |
3 | 9/5 | 9/5 | 9/19 | 9/26 | 3 | ||
4 | 10/3 | 10/3 | 10/17 | 10/24 | 10/31 | 4 | |
5 | 11/7 | 11/7 | 11/21 | 11/28 | 3 | ||
6 | 12/5 | 12/5 | 12/19 | 12/26 | 3 | ||
7 | 1/2 | 1/2 | 1/16 | 1/23 | 1/30 | 4 | |
8 | 2/6 | 2/6 | 2/20 | 2/27 | 3 | ||
9 | 3/6 | 3/6 | 3/20 | 3/27 | 3 |
回答していて、エクセルで作った表を簡単にはてなの表組記法にできれば楽じゃないかとマクロを作ってみました。
表組みを作りたい範囲を選択して実行すると、はてな記法に変換されてクリップボードにコピーされますので
解答欄に貼り付けるだけで表ができます。
Sub はてなの表組み記法を作るマクロ() Dim str As String Dim r As Range Dim i As Long Dim j As Long Dim CB As New DataObject Set r = Selection For i = 0 To r.Rows.Count If i = 0 Then str = "|*|" Else str = str & vbCr & "|*" & r.Row + i - 1 & "|" End If For j = 1 To r.Columns.Count If i = 0 Then str = str & "*" & Split(Cells(1, r.Column + j - 1).Address, "$")(1) & "|" Else If Cells(r.Row + i - 1, r.Column + j - 1).Text <> "" Then str = str & Cells(r.Row + i - 1, r.Column + j - 1).Text & "|" Else str = str & " |" End If End If Next j Next i CB.SetText str CB.PutInClipboard End Sub
注)Microsoft Forms 2.0 Object Libraryを参照設定してください。
フォームを追加して削除すると勝手に追加されますが。