各月の売上明細のデータを、別のエクセルブックに集約するマクロの「修正」について教えてください。
(マクロやVBAは今月始めたばかりでまだわからないことだらけでご迷惑をおかけします。)
現状(下記、「売上明細統合マクロ」ご参照)、各月の売上明細のデータのエクセルブックにあるシート「すべて」を順番に統合するマクロになってしまっていますが、実は各月の売上明細シート以外にも「グラフ」や「注意事項」等、今回の統合作業には「不要なシート」があります。これを無視して「各月の売上明細シートのみ」集約するように修正したいです。
*当方Windows10、Excel2016使用です。
*集約元である「各月の売上明細のエクセルブック」には、グラフや注意事項のシートの他、1月・2月・4月…と各月の売上明細のシートがあります。売上明細のシートの中身は今回関係ないと思いますが、一応、「販売日・商品名・売上額」が販売日ごとに載っているとします。
*集約先である「年間の売上明細のエクセルブック」のシートはひとつだけで「年間の売上明細シート」です。年間の販売日・商品名・売上額が販売日ごとに集約したいです。
*数字のみ合算するマクロの話ではないです。必要なシートの情報を転記・集約したいです。
【別のエクセルブック(毎月の売上明細、各月のシートがある)の情報を、別のエクセルブック(年間の売上明細)にまとめるマクロ】
Sub 売上明細統合マクロ()
Dim dWS As Worksheet
Dim fileFll As String
Dim sh
Set dWS = ThisWorkbook.Worksheets(1)
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "毎月の売上明細シートがあるBookを選択してください"
.InitialFileName = CreateObject("WScript.Shell").SpecialFolders("desktop")
.Filters.Add "*", "*.xls*"
If .Show = 0 Then
MsgBox "キャンセルされました": Exit Sub
Else
fileFll = .SelectedItems(1)
End If
End With
dWS.UsedRange.Offset(1, 0).Clear
With Workbooks.Open(fileFll)
'毎月の売上明細シートがあれば、年間の売上明細シートの末尾にコピー
For Each sh In .Worksheets
If sh.Name <> "AllData" Then
sh.UsedRange.Offset(1).Copy _
Destination:=dWS.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Next sh
.Close
End With
'年間の売上明細シートをA列で並べ替え
dWS.UsedRange.Sort Key1:=Range("A1"), Header:=xlYes
End Sub
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
シート名を指定してコピーとマージをしてはいかがでしょう。
あるいは1シートずつ「これマージする?」と対話形式で指定する。
特定のシートを認識する方法でやり方が変わるという事です。
そんなわけで、”特定のシート”を認識する方法を工夫しましょう。
特定のセルに共通の文字が入力されているとか、シート名に規則性があるとか、そういったところから自動で選別することができます。
規則性も無くルールが複雑な選別するのであれば、1シートずつ選択するのが無難かもしれません。
このような手順で対策を考えることで、次にどうすれば良いのかに繋がります。
一つずつステップを進めていきましょう。
No.2
- 回答日時:
こんばんは、
https://oshiete.goo.ne.jp/qa/11731726.html で回答した者です。
先にも記しましたが、シート構成、シート名は貴方にしか分かりません。
要件定義が前回も今回もしっかりされていませんよ。
本題
>勉強しようと思います。との事なので、
除外するシートが対象のシートより少ないようなら、
If sh.Name <> "AllData" Then をヒントに or でつなげれば良いでしょう。
先のご質問の内容で想像すると Like "*月" で良いかもです。
この辺りは、ご自身で調べてみましょう。
No.3
- 回答日時:
こんにちは
既に他の方の回答にもありますが、ご提示のコードで対象とするシートを判別しているのは
If sh.Name <> "AllData" Then
の部分です。
上記の例では、「AllData」というシート名以外のシートが全て集約の対象となります。
ですので、この部分を質問者様が集約したいシートだけ合致するような判定条件に変えれば、ご質問の内容は実現できるでしょう。
>シート構成、シート定義は質問文に記載しているのでそちらをご確認ください。
不要な情報も多く、私には「集約したいシート」の特定方法を読み取れませんでした。(種々の可能性の排除ができないので)
雰囲気的には、既回答にもある通り「Like "*月"」でも良さそうに思えますが、実体がどうなっているのか不明なので、これで行けるのどうかはわかりかねます。
For Each sh In .Worksheets
If sh.Name = Like "*月" Then
sh.UsedRange.Offset(1).Copy _
Destination:=dWS.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
End If
Next sh
おっしゃるように
”AllData”をLike"*月"に変えるとコンパイルエラーとなってしまいます。
できれば、集約不要な各シート名の頭に■を入れることで除外したいです。(特に■にこだわりがある訳ではないです。集約不要なシートの集約を除外したいだけです。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) 複数のブックをひとつのブック(複数のシートにまとめる)場合にシートとの順番について 5 2022/12/28 20:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでブック内の倍率がバ...
-
EXCELで複数のシートを一度に「...
-
特定のシートのみ再計算させな...
-
エクセルで複数のシートに画像...
-
エクセル シート同士の引き算
-
SUMIF関数【複数のシート...
-
エクセルのシー名を二段表示に...
-
EXCELの「シートの見出し」のフ...
-
エクセル シートのグループ化...
-
アクセスからエクセルのシート...
-
エクセルの2つのシートを並び...
-
エクセルでシート数が分からな...
-
複数シートの選択解除の方法
-
Excelでの複数シートにまたがる...
-
ワークシートそのものの色を変...
-
DATE関数 4月31日などのあ...
-
エクセルでリンク貼り付けした...
-
エクセルのシートが消えた
-
Accessのテーブルを既存のExcel...
-
エクセル、別のシートの表をポ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報
If sh.Name Like "*" & FIND_STR & "*" Thenにしたところ「月」のあるシートの集約はなんとかできました。
冒頭でConst FIND_STR = "月"と定義済。
なんらかの印(例えば■とか)があるシート以外を集約するというのが希望する処理なんですが、なかなか修正できないのですが、、、修正しているところです。
話が変わってきてしまいましたので、いったん当質問をしめさせていただき、改めて質問いたします。ご回答ありがとうございました。