お示しの予約状況の表ですが右横方向に8月からの日付が、縦方向には予約日が入力されお互いの日の交わる位置に予約の件数を入力する表となっています。非常に見づらく利用しにくい表となっています。
エクセルの特徴を活かすには入力された日付の順にデータが下方に並んでいくようにすることでしょう。入力の実績を時系列で分かるようにしておくことでしょう。
マクロによる入力ではしばしば時系列などで記録に残るといったことはなくなりますね。出来るだけ関数などを使って対応することでしょう。例えば次のようにすることでしょう。
入力の基礎データをシート1に入力し、シート2ではお求めのようなデータを見やすい形で表示するようにします。
例えばシート1ではつぎのようにします。
A1セルに日付、B1セルに曜日、C1セルに予約者名、D1セルに予約日、E1セルに当日獲得数、F1セルに前日までの獲得総数、G1セルに当日までの獲得総数、H1セルは空のままでI1セルには作業列とそれぞれ項目名を入力します。
A列からB列を除いたE列までについては2行目以降にデータを入力していきます。
B2セルには次の式を入力して下方にドラッグコピーします。
=IF(A2="","",TEXT(A2,"aaa"))
F2セルには次の式を入力して下方にドラッグコピーします。
=IF(D2="","",SUMIF(D$1:D1,D2,E$1:E1))
G2セルには次の式を入力して下方にドラッグコピーします。
=IF(D2="","",E2+F2)
I2セルには次の式を入力して下方にドラッグコピーします。
=IF(D2="","",D2&"/"&COUNTIF(D$2:D2,D2))
以上でシート1での作業は終わります。
シート2ではA1セルに予約状況の文字を、A2セルには日付、B2セルには曜日、C2セルには総獲得数、D2セルには予約の状況とそれぞれ項目名を入力します。
A3セルから下方には例えば8月1日からの日付を入力します。
B3セルには次の式を入力して下方にドラッグコピーします。
=IF(A3="","",TEXT(A3,"aaa"))
C3セルには次の式を入力して下方にドラッグコピーします。
=IF(SUMIF(Sheet1!D:D,A3,Sheet1!E:E)=0,"",SUMIF(Sheet1!D:D,A3,Sheet1!E:E))
D3セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。
=IF(C3="","",IF(COUNTIF(Sheet1!$I:$I,$A3&"/"&COLUMN(A1))=0,"",TEXT(INDEX(Sheet1!$A:$A,MATCH($A3&"/"&COLUMN(A1),Sheet1!$I:$I,0)),"m月d日")&"/"&INDEX(Sheet1!$E:$E,MATCH($A3&"/"&COLUMN(A1),Sheet1!$I:$I,0))))
D列には例えば6月3日に8月4日5件の申し込みが有った場合にはA列の8月4日の行の位置に6月3日/5のように表示されます。後日6月6日に3件の申し込みが有った場合にはE列の同じ行に6月6日/3のように表示されます。
お示しの表のような場合には離れたセルにそれらが表示されることになってしかも上の日付と、左端の日付を見なければわからないということになりますね。
以上のような表になりますが関数での表示では一度式を入力してあれば後は自動的に表示されますのでデータ入力操作ボタンなどをクリックすることも必要なくどなたでも対応できることになりますね。
長々と説明しましたが一度是非試してみてください。参考になりましたら幸いです。
お礼
tom04様、回答ありがとうございます。 お礼が遅くなり申し訳ありません。 私がこんな感じでできないかな~と思っていたのが正にこちらです。 受付日は基本当日なんですが、ごく稀に遡る事があるため(入力忘れです・・・)直接日付を入力する事があります。 ですので、ワークシートを開くと、セルB1に=TODAY()関数を入力するようなマクロを組んでみます。 tom04さんのコードはこれから1行ずつ解読し勉強してみます。 ありがとうございました。
補足
少しアレンジしまして下記のコードでうまく起動できました。 コマンドボタンだとマウスに持ち替えないといけないので、Worksheet_changeをつかってB3のセルに入力後、Enterを押すと起動し、B1に戻り=TODAY()を入れるといった風にしました。 ありがとうございました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$3" Then Dim i As Long Dim j As Long If Range("b2") = "" Then MsgBox "予約日が未入力です" Range("b2").Select Exit Sub ElseIf Range("b3") = "" Then MsgBox "件数が未入力です" Range("b3").Select Exit Sub End If i = WorksheetFunction.Match(Range("B1"), Range("A:A"), False) j = WorksheetFunction.Match(Range("B2"), Range("6:6"), False) Cells(i, j).Select Selection = Range("b3") Range("b1").Select Range("b1").Value = "=today()" End If End Sub