お知恵をお貸しください。
複数シート 「a」「b」「c」があります。
下のようにそれぞれに表があり、プルダウンで「○」を付けられるようにしています。
<aシート>
A B C D E
1 注文 品目 数量 備考
2 もも 4
3 ○ くり 10 燻蒸済
4 ○ うめ 8
<bシート>
A B C D E
1 注文 品目 数量 備考
2 ○ あじ 1 至急
3 さば 12
4 たこ 9
それを「集計」シートに集計したいと思っています。
A B C D E
1 注文 品目 数量 備考
2 ○ くり 10 燻蒸済
3 ○ うめ 8
4 ○ あじ 1 至急
○がつく数は日によって違います。
一応自前で考えたのは
a~cシートのE列を作業列とし、
aシートは
E2=if(A2="○",ROW(),"")
bシートは
E2=if(A2="○",100+ROW(),"")
cシートは
E2=if(A2="○",200+ROW(),"")
として、数字を昇順に入れました。
そのうえで、集計シートに
a2=IFERROR(INDEX(a!A:A,SMALL(a!$A:$A,ROW(a1))),"") と入力し、それぞれのセルにコピーしました。
ここで行き詰りました。
このままでは、aシートしか参照しません。
b~cシートも参照するにはどうすればよいでしょうか。
違う方法があればそれでも構いません。
どうぞよろしくお願いします。
No.3ベストアンサー
- 回答日時:
koron02さんが考えた数式を見るとa、b、cの各シートの最大行数を100行程度と想定しているように見えます。
もし、それで良いのであれば、各シートに作業列を作るのではなく、いっそのこと、作業シートを作ってしまった方が楽ではないでしょうか。具体的には、作業シートの1~100行にaシートからリンク貼り付け、101~200行にbシートからリンク貼り付けといった具合です。集計シートから作業シートを参照すれば、koron02さんが考えた数式の応用で対応可能だと思います。
お礼が遅くなり大変申し訳ありませんでした。
おっしゃるとおり、100行以下ですので、作業シートを作ってやってみたところ、空白行が発生せず、うまくいきました。
関数の式も比較的シンプルなりました。
感謝いたします。
No.2
- 回答日時:
vbaでやってみました。
以下のマクロを標準モジュールへ登録し、実行してください。
---------------------------------------------
Option Explicit
Dim sh1 As Worksheet '集計シート
Dim rowsh1 As Long '集計シートの行
'各シートを集計シートにまとめる
Public Sub Macro1()
Dim sheets As Variant
Dim i As Long
Dim rowMax As Long
Dim row As Long
sheets = Array("a", "b", "c")
Set sh1 = Worksheets("集計")
rowMax = sh1.Cells(Rows.Count, 2).End(xlUp).row '最終行番号取得
rowsh1 = 2
'各シート分繰り返し
For i = 0 To UBound(sheets)
'1シートの集計
Shukei (sheets(i))
Next
'以前の行を削除
For row = rowsh1 To rowMax
sh1.Range(Cells(row, 1), Cells(row, 4)).Value = ""
Next
MsgBox ("コピー完了")
End Sub
'1シート単位の処理
Public Sub Shukei(ByVal sheet As String)
Dim row As Long
Dim rowMax As Long
Dim shw As Worksheet
Set shw = Worksheets(sheet)
rowMax = shw.Cells(Rows.Count, 2).End(xlUp).row '最終行番号取得
'2行から最終行まで繰り返し
For row = 2 To rowMax
If shw.Cells(row, 1).Value = "○" Then
'A列が○なら、A~D列を集計シートへコピー
sh1.Cells(rowsh1, 1).Value = shw.Cells(row, 1).Value
sh1.Cells(rowsh1, 2).Value = shw.Cells(row, 2).Value
sh1.Cells(rowsh1, 3).Value = shw.Cells(row, 3).Value
sh1.Cells(rowsh1, 4).Value = shw.Cells(row, 4).Value
rowsh1 = rowsh1 + 1
End If
Next
End Sub
-------------------------------------------------------
Macro1を実行してください。
シート:a,b,cから注文が○のものをシート:集計にまとめます。
シート名は必ず"集計","a","b","c"としてください。そのシートがないとエラーになります。
お礼が遅くなり大変申し訳ありませんでした。
マクロは使う相手によって無効としていたり、使わないようにしているので難しいです。
しかし、たしかにこちらの方がスマートですね。
ありがとうございました。
No.1
- 回答日時:
こんばんは!
VBAの方が簡単にできそうですが、せっかく関数での方法をお考えのようですので・・・
まず、各シートの作業列(E列)の数式はすべて
=If(A2="○",ROW(),"")
のようにしておきます。
シート毎に100をプラスしてしまうとMATCH関数を使用しなくてはならなくなり、
数式がやたらと長くなってしまうため。
そうした上での一例です。
「集約」SheetのA2セルに
=IFERROR(IF(COUNT(a!$E:$E)>=ROW(A1),INDEX(a!A:A,SMALL(a!$E:$E,ROW(A1))),IF(COUNT(a!$E:$E,b!$E:$E)>=ROW(A1),INDEX(b!A:A,SMALL(b!$E:$E,ROW(A1)-COUNT(a!$E:$E))),INDEX('c'!A:A,SMALL('c'!$E:$E,ROW(A1)-COUNT(a!$E:$E,b!$E:$E))))),"")
という数式を入れフィルハンドルで列・行方向にコピーしてみてください。
※ 空白セルが返る場合、「0」が表示されてしまいます。
数式で空白セルを表示しない方法もありますが、この処理まで数式でやってしまうと
もっと長い数式になってしまいますので
Excelのオプションから「ゼロ値のセルにゼロを表示する」のチェックを外す方法が良いと思います。
※ 数量で「0」が存在するときは、その「0」も表示されませんので
やはりダラダラと数式で処理するしかないと思います。
以上のコトを考慮すると
やはりVBAが手っ取り早そうです。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式 個人シートを参照して集計シートに色付けしたい 1 2023/06/22 00:39
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) IFERROR、SMALL関数について 2 2022/08/22 23:40
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Excel(エクセル) シート参照を含む数式を連続コピー 3 2022/12/10 11:42
- Excel(エクセル) エクセルの数式について ブック内の別シートの値の含まれたセルの個数を集計したい 全シート一覧のシート 1 2022/07/21 19:28
- Excel(エクセル) Excel、同じフォルダ内のExcelファイルの特定シートのみを1つのファイルに集約したい 8 2022/09/07 15:12
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スプレッドシートの関数VLOOKUP...
-
Excelで同じシートのコピーを一...
-
EXCEL:同じセルへどんどん足し...
-
エクセルでファイルを開いたと...
-
前の(左隣の)シートを連続参...
-
エクセルの複数シートの保護を...
-
シートの保護のあとセルの列、...
-
VBA セルの値と同じ名前のシー...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
エクセルで前のシートを連続参...
-
EXCELで1ヶ月分の連続した日付...
-
EXCELで同一フォーマットのシー...
-
エクセルでファイル保存時に複...
-
複数シートの特定の位置に連番...
-
エクセルのシート名をリスト化...
-
シート番号からシート名を取得する
-
複数のピボットを同じフィルタ...
-
シートを任意の日付で自動で作...
-
エクセルで前シートを参照して...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルでファイルを開いたと...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルVBAでパスの¥マークに...
-
EXCEL:同じセルへどんどん足し...
-
シートの保護のあとセルの列、...
-
別シート参照のセルをシート毎...
-
エクセルで前のシートを連続参...
-
前の(左隣の)シートを連続参...
-
EXCELで同一フォーマットのシー...
-
VBAでシートコピー後、シート名...
-
Excel 連番を入力する方法
-
エクセル 計算式も入っていない...
-
エクセルで前シートを参照して...
-
エクセルでシート名を自動入力...
-
Accessのスプレッドシートエク...
-
複数シートの特定の位置に連番...
-
エクセルのシート名をリスト化...
おすすめ情報