
いつもお世話になっております。
件名を間違えて記載していたので、再度質問させていただきます。
-----------------------------------------------
関数や空白がいくつもある複数のシートを一枚にまとめたいので
アドバイスを頂けたらと思います。
仮に図のようなシートが店舗毎に複数枚あったとして、
シート名は【小樽店3月分】【青森支店4月分】など、最後に必ず【○○店××分】とあります。
シートは120枚ぐらいあり、今後も増える予定です。
データは実際には1500行前後あり、P列まであります
そこでC列が空白のものを非表示にし、それを【一覧(Worksheets(200)】シートにまとめたいと思います。
最初は表に空白と関数があるため、下記のように組んでいたのですが
Macro まとめ ()
application run.コピー&値として貼り付け
application run.C列が空白の場合行ごと削除
application run.一覧にまとめる
行数が多いせいか、【コピー&値として貼り付け】の際に時間がかかり、
過去の質問(https://oshiete.goo.ne.jp/qa/7038820.html)を参考にし、
以下のように作りなおしました。
Sub 一覧表示() 'この行から
Dim i, j, k As Long
i = Worksheets(200).Cells(Rows.Count, 1).End(xlUp).Row
If i > 2 Then
Range(Worksheets(200).Cells(3, 1), Worksheets(200).Cells(i, 7)).ClearContents
End If
Application.ScreenUpdating = False
For k = 1 To 120 'Sheet1~Sheet120まで
For i = 3 To Worksheets(k).Cells(Rows.Count, 1).End(xlUp).Row '3行目~最終行まで
For j = 1 To 7 'A列~G列まで
If Worksheets(k).Cells(i, 7) <> "" Then
Worksheets(200).Cells(Rows.Count, j).End(xlUp).Offset(1) = _
Worksheets(k).Cells(i, j)
End If
Next j
Next i
Next k
Application.ScreenUpdating = True
End Sub 'この行まで
しかしこれだとC列以外の空白が詰めて貼り付けされてしまうため、データの内容が狂ってしまいました。
そこで、他の回答を参考に下記を作りましたが、今度は【Selection.AutoFilter】の段階でエラーにり、
またシートが120もあるので全部書くのは難しいかと思い、諦めてしまいました。
'貼り付け
Sheets("小樽店3月分").Select
Range("A4:G1000").Select
Selection.AutoFilter
ActiveSheet.ListObjects("小樽店3月分").Range.AutoFilter Field:=3, Criteria1:="<>"
Selection.Copy
Sheets("一覧").Select
Range("A3").Select
ActiveSheet.Paste
Sheets("青森支店4月分").Select
Range("A4:G1000").Select
Selection.AutoFilter
ActiveSheet.ListObjects("青森支店4月分").Range.AutoFilter Field:=3, Criteria1:="<>"
Selection.Copy
Sheets("一覧").Select
ActiveCell.End(xlDown)).OFFSET(1,-3).Select
ActiveSheet.Paste
他に何か良い手立てはないでしょうか。
どうぞよろしくお願いします。

No.3ベストアンサー
- 回答日時:
こんにちは
他の方も質問なさっていますが、いろいろわからないところがあるので、勝手に決め打ちしてみました。
・コードだとタイトル行は2行に見えるけれど、図では1行っぽいので1行に固定
・A列で最終行を判定しているようですが、図ではA列にも値のない行が存在するようなので(最終行はとれない)、効率が悪いけれど、usedRangeで対象範囲を決めています。
・コピーは「値のみペースト」で行います。(関数式があるのかないのか不明なので)
・C列が空白の行はコピーしない。(関数の計算結果が空白の場合を含む)
(1セルずつチェックしていますが、C列に関数式がなければもっと簡単になります)
・C列の値がエラー値の場合は、コピーの対象とする
※ コピー対象はG列まででも良さそうな感じですが、とりあえず行全体をコピーするようにしてあります。
※ 上述のように、usedRangeを用いていますので、少々効率が悪いです。
※ 処理方法としては、元のシート内の行を一旦全部集計シートにコピーしてから、不要な行(C列が空白)を削除するという手順にしています。
Constで設定している、「集計用シート名」、「空白チェック対象列番号」、「処理対象シートの最大数」などを設定し直してください。
(最初は2シートくらいで試してみて、それから増やすのが吉でしょう)
Sub Sample()
Dim dstS As Worksheet
Dim dstR As Range, tmp As Range, delR As Range
Dim shtN As Long, pointer As Long
Dim rw As Long, r As Long
Const dstSheet = "Sheet15" '←集計用シートのシート名
Const cClmn = 3 '空白をチェックする列番号
Const shtMax = 2 '処理の対象とするシートの最大番号
Set dstS = Worksheets(dstSheet)
dstS.UsedRange.Offset(1).EntireRow.Delete
For shtN = 1 To shtMax
pointer = dstS.UsedRange.Rows.Count + 1
rw = Worksheets(shtN).UsedRange.Rows.Count
If rw > 1 Then
Worksheets(shtN).Range("A2").Resize(rw - 1).EntireRow.Copy
dstS.Cells(pointer, 1).PasteSpecial Paste:=xlPasteValues
Set delR = Nothing
For r = pointer To pointer + rw - 1
Set tmp = dstS.Cells(r, cClmn)
If Not IsError(tmp.Value) Then
If tmp.Value = "" Then
If delR Is Nothing Then Set delR = tmp Else Set delR = Union(delR, tmp)
End If
End If
Next r
If Not (delR Is Nothing) Then delR.EntireRow.Delete
End If
Next shtN
End Sub
私の拙い質問に丁寧に答えていただき、ありがとうございました!
皆様にベストアンサーを差し上げたいのですが
fujillinさんのコードを少し変更して処理が出来たのでfujillinさんをベストアンサーにしたいと思います。
ありがとうございました!
No.4
- 回答日時:
今コードを書いて示せないのですが、つぎの方法でどうでしょう。
条件:
Sheets(1)~Sheets(200)があるWorkbookに存在する。
Sheets(200)はまとめ表に使って、使い捨てにする(以前のデータは書き換えられて構わない)
Sheets(1 )~Sheets(120)は、同じフォーマットで作られている。
Sheets(200)に転記するのは、Sheets(1)~Sheets(120)の3行目~データのある最終行までで、C列が空白ではない行の(A列~G列)であり、H列を含め右側の列データは転記しない。
Sheets(200)に転記するにあたって、データは空白行を置かず、行を詰めてよい。またSheets(1)~Sheets(120)の順になっていれば、どのSheetsからの転記であるか区分などを表記追加する必要はない。
やり方:
Sheets(200)の3行目以下をすべてクリアする。
次をSheets(1)~Sheets(120)までForループで繰り返す。
Sheets(200)の最終行+1を獲得
Sheets(i)の最終行のRowを獲得
Sheets(i)の最終行Rowが2以下の場合は、次のSheetに進む
Sheets(i)のRange(A3~G最終行)をSheets(200)の最終行+1のAセル位置に一気に一括コピーする(やり方、コードがわからなかったら、調べてください)
NextでForを回す。
☆ ここまでで、Sheets(1)~Sheets(120)の必要データはすべてSheets(200)に転記されます。C列データ空白の行も転記されます。1つ1つのセルを転記するより速いです、コードも簡単です。1行づつ転記するより速いです。
この先もコードを書いてマクロ実行の中でいいのですが、手動でやってみます。
Sheets(200)のH列より右は空白のはずです。
Sheets(200).H3のセルに =(C3>"")*1 と数式を入れて、H3セルの右下角をダッブルクリックして最終行まで数式をコピーさせます。0か1かが表示されます。H3のセルを選択し、Ctrl+Shift+左、Ctrl+Shift+ 下で、全データ領域を選択した状態で、並べ替えを(H列優先・降順)で実行します。
これで、C列が空白の行は下方に移動します。
上には、必要な全データが希望の順で並んでいます。
H列や、C列が空白の行を削除するのは簡単だと思います。

No.2
- 回答日時:
No1です。
>そこでC列が空白のものを非表示にし、それを【一覧(Worksheets(200)】シートにまとめたいと思います。
これを見落としていました。
結局、あなたがコピーしたい行とは、
「C列が空白でない行」ということでしょうか?
その行のA列~I列をコピーしたいということでしょうか?

No.1
- 回答日時:
補足要求です。
1.コピー対象となる行は、どのような行なのですか。
①G列が空白でない行
これがあなたの提示したマクロの内容から読み取れる行です。
②A列~G列の何れかが空白でない行(A列~G列が全て空白ならコピーしない、以外はコピー)
これがあなたの提示したマクロを拡大解釈して想定した行です。
③A列~I列の何れかが空白でない行(A列~I列が全て空白ならコピーしない、以外はコピー)
これがあなたが提示した画像から読み取れる行です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Word2016でExcelデータを差込し...
-
【Excel VBA】CSV取込時、数字...
-
Excel 表の必要箇所だけを抜き...
-
excelの列がいっぱいになり列を...
-
EXCEL2007で2つのシートのどっ...
-
EXCELで2つのシートから一致し...
-
EXCELの列の幅
-
エクセルで前年同日・前月同日...
-
エクセルでページ毎の計をつけ...
-
マクロ実行時のエラーの原因を...
-
SUMPRODUCT関数で複数条件適用...
-
ピボットテーブル作成後、重複...
-
エクセルで電話番号にハイフン...
-
Excelで奇数行を削除
-
EXCELで不良率を出そうと思って...
-
エクセル関数式のセル列を一定...
-
セル入力文字が、「右のセルに...
-
エクセル、ページをまたがった...
-
パワポの複数ページにまたがる...
-
Excelのセル内の文字の頭に半角...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Word2016でExcelデータを差込し...
-
【Excel VBA】CSV取込時、数字...
-
エクセルで前年同日・前月同日...
-
Excel 表の必要箇所だけを抜き...
-
EXCELの列の幅
-
EXCELで2つのシートから一致し...
-
EXCEL2007で2つのシートのどっ...
-
エクセルで電話番号にハイフン...
-
excelの列がいっぱいになり列を...
-
エクセルでページ毎の計をつけ...
-
EXCELで不良率を出そうと思って...
-
Excelで奇数行を削除
-
エクセル:最新データ12件で...
-
エクセルVBAで複数列データを1...
-
マクロ VBA 他のブックのデータ...
-
ドロップダウンリスト
-
SUMPRODUCT関数で複数条件適用...
-
ピボットテーブル作成後、重複...
-
エクセルで縦線のいっぱい入っ...
-
ExcelのIF関数について
おすすめ情報