- ベストアンサー
エクセルのアイディアをください。
エクセルで、 sheet2,3,4,5・・・・・・に入れたデータを sheet1に一覧表にして反映させたいと思っています。 ひとつのシートに1つずつのデータしかいれなければ sheet1の一覧表はきれいに出来上がるのですが、(=Sheet2!A2の様にして)1つのシートに1つのデータを入れたり、2つのデータを入れる場合(シートによってデータの数が違う場合)どうしたらいいのかわかりません。 わかりにくいので例を・・・・・・・。 ex. sheet2にりんご1個の仕入れデータを入力。 sheet3に桃2個と、バナナ1本のデータを入力 sheet4にオレンジ1個、苺3粒、キウイ1個・・ ・ ・ ・ この様なデータをsheet1で一覧表の様にしたいのですが、どのようにしたらいいのかわかりません。 アドバイス下さい。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 #3の疑問はありますが、独断で推定しました。 回答時点では見とおしが立たなかったので、関数では不可能と書きましたが、何とかひねりだしました。しかし今までの回答の中で、難問の1つと思いました。理解していただけるかどうか、質問者の場合に合わせて、式をチューニングしてもらえるかどうか。 (データ例) (Sheet2)A1:A5 23 12 34 55 12 (Sheet3)A1:A7 bb 2 3 4 aa 4 5 (Sheet4)A1:A s d fg rr (Sheet5)A1 xxx (関数式1)Sheet1の目立たない列に (今回は例ですので目立つC列にします) C1に1をいれます。 C2に=C1+COUNTA(INDIRECT("Sheet"&ROW(A2)&"!$A$1:$A$30")) をいれて、シート数だけ式を下方向に複写します。 (結果) 1 6 13 17 18 となります。データ行数のSheet2からの累積行数+1です。 (関数式2)Sheet1のA1に関数式 =INDEX(INDIRECT("sheet"&MATCH(ROW(),$C$1:$C$5,1)+1&"!$a$1:$A$30"),ROW()-INDIRECT("c"&MATCH(ROW(),$C$1:$C$5,1))+1,1) をいれて、下方向にC列の最下行(シート数+1の行)の 数字-1(この場合18-1=17)まで複写します。 (結果)A1:A17 23 12 34 55 12 bb 2 3 4 aa 4 (以下略) Sheet2以下の列数が2列以上である時は、 邪魔にならないように、C列をZ列とか右の方に設定し、 関数式2の最後の,1の部分を2(B列)、3(C列)、・・・ に修正してください。上例はA列用で1になってます。 また$A$30を$B$30や$c$30に修正必要です。 各シートは30行までとなってます。各シートの最下行数が30行を越える場合は修正が必要です。 $A$30の30の部分です。 シート数が増える場合は$c$5を、5枚の場合は$C$6とか修正必要です。 またA列の式複写を下に引っ張りすぎる(むしろシートのデータ行数が今後増えることを考えて、余分行に式を設定しておかないといけないのですが)と、#REFが出ます。この防止策(=IFを使う)が必要ですが、長くなるので略。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17070)
>2つのデータを入れる場合 Sheet2に2つのデータをいれるとは、データを入れた行が2行になると言うことですか? そしてそのデータ数従って行数は可変だということですね。 Sheetをまたがる処理なので、VBAでやらないと出来ないと思いますが宜しいですか。 VBAを習い始めなら、上記「可変」であるところの、そのシートの最下行ないし行数を捉えることが判り難いかもしれません。 これが出きれば、シート1にコピーしてくればよい。 あと索引しやすいようにソートする。
お礼
回答ありがとうございました! VBAというものの存在を初めてしりました・・・・・・。本屋で初心者のテキスト買ったので勉強してみます! ありがとうございました!
- deecyan
- ベストアンサー率38% (89/233)
こんばんは sheet1が必ず一番左に有るとして マクロを組むと こうなるかなぁ ツール -> マクロ -> VisualBasicEditor 挿入->標準モジュール として 下記をコピーペースト Sub aaa() For ii = 2 To Worksheets.Count Worksheets(ii).Activate Rows(Worksheets(ii).UsedRange.Row & ":" & _ Worksheets(ii).UsedRange.Row + Worksheets(ii).UsedRange.Rows.Count - 1).Select Selection.Copy Worksheets(1).Activate Rows(Worksheets(1).UsedRange.Rows.Count + 1).Select Selection.Insert Shift:=xlDown Next End Sub ツール -> マクロ -> マクロで aaaを選んで実行です
お礼
ご回答ありがとうございます! 難しいですね・・・・・・・。 マクロの勉強をすることにしました。 エクセルの関数だけじゃやっぱ限界があるんですかね。また困った際は、よろしくお願いします!
マクロを組みます。 sheet2で発生するであろう最大行分をsheet1の先頭行に貼り付けます。 shhet3で発生するであろう災害行分をsheet1の続きに貼り付けます。以下同様。 そのあと、sheet1をソートさせます。 これで、sheet1には、sheet2以降の行が連続で集まります。 という動作を一度行いますが、その時マクロの開始を行い、マクロを生成させます。それで、マクロが作成できます。解り辛ければ、質問を・・・
お礼
回答ありがとうございました! マクロですか・・・・・・・・・。 マクロの勉強してから挑戦してみます。 ありがとうございました!
お礼
引き続きありがとうございました! 関数試してみたのですが、 シートを100~200くらい使ってるせいか データが重くなりすぎて、失敗しました・・・・・・。VBAの勉強します。 また壁にぶつかると思いますが、よろしくお願いいたします。