
同じ配列のシートが日別で並んでいますがシートが日ごとに追加されますので何か良い指定方法はありませんでしょうか。
現在の記述は下記のとおりで都度シート名を指定しなければなりません。
Sub kusizashi()
Worksheets("累計").Range("B3").Consolidate Sources:= _
Array("時間別項目別20210301!R3C2:R11C8", "時間別項目別20210302!R3C2:R11C8"), Function:=xlSum
End Sub
ご教示いただければ幸いです。

No.8ベストアンサー
- 回答日時:
日付から該当シートを求めるコード。
ただし実行日のデータを含めるのか否かが重要なキーになりますね。
コメント文にしているので、適宜どちらか一方を選んでください。
Sub megu_2()
Dim ws As Worksheet
Dim sumst As String, v()
Dim i As Integer
sumst = "!R3C2:R11C15"
i = 0
For Each ws In Worksheets
If ws.Name Like "時間別項目別*" Then
'If Replace(ws.Name, "時間別項目別", "") <= Format(Date, "yyyymmdd") Then '今日までの日付
If Replace(ws.Name, "時間別項目別", "") < Format(Date, "yyyymmdd") Then '前日までの日付
ReDim Preserve v(i)
v(i) = ws.Name & sumst
i = i + 1
End If
End If
Next
Worksheets("累計").Range("B3").Consolidate Sources:=v, Function:=xlSum
End Sub
抜けている日付は無視しますので。(シートが存在しないのでしょうし)
No.7
- 回答日時:
No.6です。
>Next以下でエラーが出てしまいました。
エラー内容を教えてほしいのですが、ここでエラーとなるのは配列の内容に問題があると推測されます。
ReDim wsn(1 To sc - 3)
への修正は実施しましたか?
また、投稿されたコードがコピペだとすると
Worksheets("累計").Range("B3").Consolidate Sources:= _
Array(wsn()), Function:=xlSum Array(wsn())をwsnと省略可
「Array(wsn())をwsnと省略可」の前に「'」が無いのが気になります。
No.6
- 回答日時:
単純にAndで繋ぐだけです。
さらに増えた場合もAndで繋いでいけばOKです。
If (Worksheets(i).Name <> "累計") And (Worksheets(i).Name <> "Sheet1") And (Worksheets(i).Name <> "時間別項目別一覧表") Then
※「sheet1」なのか「Sheet1」なのが大文字・小文字に注意。実際のシート名に合わせること
さらに、ReDim wsn(1 To sc - 1)を
ReDim wsn(1 To sc - 3)
に修正します。
ここでは、配列の大きさを定義していますが、存在するシート数から集計で省くシート数をマイナスしています。従って-1ではなく-3にするということです。
No.5
- 回答日時:
No.3さんの回答で解決済みかもしれませんが、
>集計シートは当初左にありましたが、短日のデータ「Sheet1」をコピーし
>て右へ名前を付けて(時間別項目別+日付)保存の際、おかしな動きになっ
>てしまい右へ移動しました。
ということなので、累計シートの位置にかかわらず、集計できるよう配慮しました。実行速度はNo.3さんのFor each文を使用した方が速いと思います。
Sub kusizashi()
Dim sc As Integer
Dim i As Integer
Dim n As Integer
Dim wsn() As Variant 'ワークシート・セル範囲を格納する動的配列を指定
sc = Worksheets.Count
ReDim wsn(1 To sc - 1) '配列を再定義
n = 0
For i = 1 To sc
If Worksheets(i).Name <> "累計" Then 'シート名「累計」以外のシート名だったら
n = n + 1
wsn(n) = Worksheets(i).Name & "!R3C2:R11C8" 'シート名と集計セル範囲を配列に格納
End If
Next
Worksheets("累計").Range("B3").Consolidate Sources:= _
Array(wsn()), Function:=xlSum '格納された配列に基づき各シート範囲を累計シートに集計 Array(wsn())をwsnと省略可
End Sub
No.3
- 回答日時:
例えばctrlキーを押しながらマウスでシートタブをクリックするか、連続するなら片端になるしとタブをクリックし次にshiftキーを押しながらもう片端のシートタブをクリックするとその間のシートは選択状態になります。
その状態のままで実行させる方法なら、
Sub megu()
Dim ws As Worksheet
Dim sumst As String, v()
Dim i As Integer
sumst = "!R3C2:R11C15" '
ReDim v(ActiveWindow.SelectedSheets.Count - 1)
i = 0
For Each ws In ActiveWindow.SelectedSheets
v(i) = ws.Name & sumst
i = i + 1
Next
Worksheets("累計").Range("B3").Consolidate Sources:=v, Function:=xlSum
End Sub
これで如何でしょうか?
使い勝手がって言うなら他を検討してみますが。
⇒日付が全てあるならシートインデックスで求めてしまう方法もありそうなのですが平日限定ですよね?シートの存在は。
No.2
- 回答日時:
No.1です。
追加される日付と言う考えは置いておいて、追加されたシートのインデックスで選ぶと言う方法もあるかもですが、ようは毎月1日から追加されていったシート分を加算させると言う事でしょうか?
画像では5日のようですが『1日~5日までの串刺し』と言う事ですか?
⇒集計シートが一番右ってのは日にちがたつと扱いにくくないでしょうか?
No.1
- 回答日時:
曖昧検索なのですか?
ある期間のシートを指定したいのなら条件を与え全てのシート名を調べて、該当したシート名を配列に入れていき、それを与えれば良いのでは?
ただ何をもって条件とするのかが不明ですけど
串刺しなのでセル範囲は同じなのですよね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Excelのマクロコードについて教えてください 1 2022/03/27 12:02
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームに入力したデ...
-
XL:BeforeDoubleClickが動かない
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
実行時エラー'1004': WorkSheet...
-
特定の文字を含むシートだけマ...
-
VBA 存在しないシートを選...
-
Excel VBA で自然対数の関数Ln...
-
Access エクセルシート名変更
-
Excel チェックボックスにチェ...
-
VBAで指定シート以外の選択
-
【VBA】全ての複数シートから指...
-
VBA 検索して一致したセル...
-
エクセルVBA 別シートからのコ...
-
【エクセルVBA】「Protect User...
-
ブック名、シート名を他のモジ...
-
VBA ThisWorkbookはSheet*で記...
-
userFormに貼り付けたLabelを変...
-
マクロを使って、シート印刷完...
-
Excel VBA リンク先をシート...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報
お考えいただきありがとうございます。
月次単位のBookでセル範囲の同じシートが毎月1日からの平日で追加されていきます。
シート名が「時間別項目別+日付」となっていますので、日付の部分を曖昧でも範囲指定できるようなことができないか考えていました。
よろしくお願いいたします。
お考えいただきありがとうございます。
月次単位のBookでセル範囲の同じシートが毎月1日からの平日分追加されていきます。
シート名が「時間別項目別+日付」となっていますので、日付の部分を曖昧でも範囲指定できるようなことができないか考えていました。
集計シートは当初左にありましたが、短日のデータ「Sheet1」をコピーして右へ名前を付けて(時間別項目別+日付)保存の際、おかしな動きになってしまい右へ移動しました。確かに月末にはだいぶ右になりますが今のところ、おかしな動きの改善策が見当たらずやむなしとしています。
よろしくお願いいたします。
予め、まだ発生していない日付のシート名(時間別項目別20210308!R3C2:R11C15)を指定しておけば!と下記の記述をしてみましたが「統合元ファイル時間別項目別20210308を開くことができません」とメッセージが出ます。
Array("時間別項目別20210301!R3C2:R11C15", "時間別項目別20210302!R3C2:R11C15", "時間別項目別20210303!R3C2:R11C15", "時間別項目別20210304!R3C2:R11C15", "時間別項目別20210305!R3C2:R11C15", "時間別項目別20210308!R3C2:R11C15"), Function:=xlSum
このメッセージが出ないようにすることは可能でしょうか?
goo maniaさんの記述でシート名「累計」‘意外のシート名だったらとありますが、省きたいシートが他に「sheet1」「時間別項目別一覧表」の3シートあります。
if文をどのように記載したら省けるかご教示いただけませんでしょうか。
よろしくお願いいたします。
最初の記述ですと上手く行くのですが、追加でご教示いただいたif文に修正するとNext以下でエラーが出てしまいました?お手数ですが修正点をご教示いただけると助かります。
If (Worksheets(i).Name <> "累計") And(Worksheets(i).Name <> "Sheet1") And (Worksheets(i).Name <> “時間別項目別一覧”) Then
n = n + 1
wsn(n) = Worksheets(i).Name & "!R3C2:R11C8"
End If
Next
Worksheets("累計").Range("B3").Consolidate Sources:= _
Array(wsn()), Function:=xlSum Array(wsn())をwsnと省略可
End Sub