お知恵をお貸しください。
複数シート 「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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
Excelのシートを、まとめて表示...
-
VBAでシートコピー後、シート名...
-
特定のシートの削除を禁止した...
-
エクセルでファイルを開いたと...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
EXCEL:同じセルへどんどん足し...
-
エクセルのシート名をリスト化...
-
Excel、同じフォルダ内のExcel...
-
シートの保護のあとセルの列、...
-
excelでシート毎の最終更新日を...
-
エクセル 計算式も入っていない...
-
エクセル計算式解説
-
MIDで指定するセル番号を、別の...
-
エクセルで前のシートを連続参...
-
エクセルで前シートを参照して...
-
VBA 2つのシートを左から2番...
-
エクセルで毎回1枚目のシートを...
-
エクセルでファイル保存時に複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
Excelで金銭出納帳。繰越残高を...
-
Excelで同じシートのコピーを一...
-
Excelのシートを、まとめて表示...
-
エクセルでファイルを開いたと...
-
Accessのスプレッドシートエク...
-
前の(左隣の)シートを連続参...
-
VBAでシートコピー後、シート名...
-
EXCEL:同じセルへどんどん足し...
-
EXCELで同一フォーマットのシー...
-
シートの保護のあとセルの列、...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルで複数設定したハイパーリンク先...
-
複数シートの特定の位置に連番...
-
エクセルでファイル保存時に複...
-
特定のシートの削除を禁止した...
-
エクセルで前シートを参照して...
-
Excel、同じフォルダ内のExcel...
おすすめ情報