
シートをコピー追加し、日報の累計をしていきたいです。
やりたいことは以下の通りです。
1.原紙からシートをコピー追加。「E4」へ追加した日付入力。
2.シートの名前を日付の数字のみに変更(24)
「合計/日」の「作業時間」には自動的に計算式が入力されています。
3.追加したシートの「累計」に前日の「累計」と「合計/日」を足したい。
検索して1~31日すべてをコピー追加累計などはあるのですが
締めが20締めで開始が21日からです。
稼働日が毎日ではないので数字は飛ぶ時もあります(土日祝など)
検索したものを編集すればいいのですが知識もなく困っています。
よろしくお願いします。

A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
あれ?
串刺し計算で「本日までの累計」を求める方法も記述したのですが…難しかったですか。
CELL関数とかINDIRECT関数なんて滅多に使わない関数を使ったのが悪かったかな。
申し訳ありませんでした。
自分としてはかなり噛み砕いて説明したつもりだったのですが、マクロで処理しようということであれば、自分はここで退散させていただきます。
(マクロでの処理はそれこそ定石なものから凝ったものまで様々ですから)
毎日現場の人が1シートづつ追加していってるので
追加していってなおかつ累計も自動にできればいいと思ったのです。
根本的なとこで躓いてしまって初心者の私には難しかったです。
すいません。自己流でとりあえずしてきたので基礎的なことが抜けてることに
気づきました。もう少し基礎的なところから勉強していきたいと思います。
ありがとうございました。
No.2
- 回答日時:
この手のものは「串刺し計算」で良いはずなんだ。
まず日付ごとに、
21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
という順番でシートを並べる必要があります。
そして、21日のシートや20日のシートが存在しないこともあるようですので、
別途
「開始」「終了」
というシートを作成します。
開始シートは21日のシートの左に配置し、終了シートは20日のシートの右に配置します。
開始,21,22,23,24,25,26,27,28,29,30,31,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,終了
あとは、
=SUM(開始:終了!A1)
の数式で
開始シートから、終了シートに挟まれたシートのA1セルの合計を求めることができます。
・・・本骨頂・・・
質問では、シートの日付までのデータを欲しているようですので、
この「終了」シートに当たる部分をその日のシート名に変えてしまえばいいことになります。
CELL関数を使ってシート名を取得しましょう。
=CELL("filename")
で保存されているファイルのパスとファイル名とシート名を取得できます。
Dドライブの「data」フォルダ中の「Documents」フォルダに「ファイル.xlsx」という名前で保存された、「20」というシートなら、
D:\data\Documents\[ファイル.xlsx]20
と値が返ってきます。
FIND関数やSEARCH関数で ”]” の文字が左から何文字目かを確認して、MID関数などでシート名だけを抜き取りましょう。
=FIND("]",CELL("filename"))
でファイル名の右側にある "]" の位置が分かりますので、
=MID(CELL("filename"),FIND("]",CELL("filename"))+1,2)
こんなのでOK。
あとはこれをINDIRECT関数で範囲名にしてやれば良いだけです。
INDIRECT("開始:" & MID(CELL("filename"),FIND("]",CELL("filename"))+1,2) & "!A1")
こんな感じになりますので、あとはSUM関数に範囲として渡せば終わり。
=SUM(INDIRECT("開始:" & MID(CELL("filename"),FIND("]",CELL("filename"))+1,2) & "!A1"))
お疲れさまでした。
あとはこれを応用してください。
・・・注意・・・
その日の合計と、その日までの累計を別々に求めることになります。
そのほうが良いと思うんですけどね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル/列追加時、合計行の計算式 7 2023/03/15 11:14
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) エクセルの日報作成について 3 2023/07/05 12:49
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
- Excel(エクセル) Excel シート複数 金額日計表と日付 簡単にシートコピーしたら前日の残高と日付を変更させたい 1 2022/07/15 22:10
- Excel(エクセル) セルに特定の色が出た時だけ、式を発動させたい 4 2022/06/17 10:32
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルの複数シートの保護を...
-
前の(左隣の)シートを連続参...
-
特定のシートの削除を禁止した...
-
別シート参照のセルをシート毎...
-
エクセルで前シートを参照して...
-
Excelで金銭出納帳。繰越残高を...
-
エクセル 計算式も入っていない...
-
エクセルでファイルを開いたと...
-
EXCEL:同じセルへどんどん足し...
-
VBAで条件によりフォントサイズ...
-
エクセルVBAでパスの¥マークに...
-
シート番号からシート名を取得する
-
EXCELで1ヶ月分の連続した日付...
-
VBAでシートコピー後、シート名...
-
EXCELで同一フォーマットのシー...
-
Accessのスプレッドシートエク...
-
Excel、同じフォルダ内のExcel...
-
シート名が変わっても計算したい
-
エクセルで前のシートを連続参...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定のセルだけ結果がおかしい...
-
エクセルの複数シートの保護を...
-
前の(左隣の)シートを連続参...
-
別シート参照のセルをシート毎...
-
エクセルで前シートを参照して...
-
Excel、同じフォルダ内のExcel...
-
特定のシートの削除を禁止した...
-
EXCEL:同じセルへどんどん足し...
-
エクセル 計算式も入っていない...
-
Excelで金銭出納帳。繰越残高を...
-
複数シートの特定の位置に連番...
-
エクセルでファイルを開いたと...
-
シートの保護のあとセルの列、...
-
Accessのスプレッドシートエク...
-
VBAで条件によりフォントサイズ...
-
VBAでシートコピー後、シート名...
-
エクセルで前のシートを連続参...
-
エクセルVBAでパスの¥マークに...
-
EXCELで同一フォーマットのシー...
-
Excelで同じシートのコピーを一...
おすすめ情報
ほんとに簡単な式で「E7」~「E13」には「終了時間」-「開始時間」の
式が入っているのでそれをSUMで足しています。
=SUM(E7:E13)
になります。
やはり一気に作るやり方しかないのでしょうか。
串刺しも考えましたがあれはまとめてですよね?
今日の合計と今日までの累計をみたいのです。
現在は21~30(31)が一気に作成されます。
シート名表示、累計などしたいことは完璧なのですが1日、1日追加したいのです。
現在は次の補足のコードです。
Sub 新規作成()
Dim x1stDay As Date, xEndDay As Date, xDay As Date
Dim sh0 As Worksheet, sh As Worksheet
Const xFormula As String = "=@@!J7+I7"
x1stDay = InputBox("日報", "最初の日付を指定", Date) '最初のシートの日付を指定
xEndDay = CDate(Format(DateAdd("m", 1, x1stDay), "yyyy/mm/") & "01") - 1
Application.ScreenUpdating = False
Set sh0 = Worksheets("原紙")
For xDay = x1stDay To xEndDay
つづく
つづき
↓
If sh Is Nothing Then
sh0.Copy
Else
sh0.Copy after:=sh
End If
With ActiveSheet
.Name = Format(xDay, "dd") 'コピーしたシートの名前を変える
.Range("E4") = xDay
If Not sh Is Nothing Then
.Range("J7").Formula = Replace(xFormula, "@@", sh.Name)
End If
End With
Set sh = ActiveSheet
Next xDay
Application.ScreenUpdating = True
End Sub