• ベストアンサー

条件に合うデータを別のブックに書き出したい

お世話になります。 エクセル2003で、数量を入力した「行」だけを別のブックに書き出したいのですが、機能や関数を教えてください。 (表1)    A     B     C    D 1 商品名  単価  数量  合計 2  い    100   4    400 3  ろ    500   2    1,000 4  は    200 5  に    150 6  ほ    330 7  へ    230   5    1,150     ・     ・    ・    ・     ・     ・    ・    ・ 17  た    180   2    360 と、17行、4列の表があります。この「数量」が入力された行だけ、 (表2)   A    B    C   D 1 数量 単価 合計 商品名 2  4   100  400   い 3  2   500  1,000  ろ 4  5   230  1,150  へ 5  2   180  360   た (表2)のように書き出したいのです。 (表1)から抽出される行数は、必ず4行以下です。 (表1)に数量を入力すると、(表2)が自動的に変わるのが好ましいです。 マクロやVBAは苦手なのでエクセルの機能や関数で教えていただければ幸いに存じます。 情報が足りなければ補足します。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 別ブックに表示したいということですね? 一例ですが・・・ まず元データの必要列(今回は4列だけ)を 範囲指定 → コピー 別ブックのSheet1に 「形式を選択して貼り付け」 「リンク貼り付け」にチェックを入れてOKとします。 これで別ブックにリンク貼り付けできますが、空白セルが「0」と表示されると思うので ツール → オプション → 表示タブ で「ゼロ値」のチェックを外しておきます。 そして、↓の画像の左側がSheet1で、作業列として、A列を挿入し A2セルに =IF(D2<>0,ROW(A1),"") としてすぃ~~!と下にオートフィルでコピーします (数式が1000行まで対応していますので、1000行目くらいまでコピーしても構いません) 次にSheet2の A2セルに =IF(D2="","",INDEX(Sheet1!$D$2:$D$1000,MATCH(D2,Sheet1!$B$2:$B$1000,0))) B2セルに =IF(D2="","",INDEX(Sheet1!$C$2:$C$1000,MATCH(D2,Sheet1!$B$2:$B$1000,0))) C2セルに =IF(D2="","",A2*B2) D2セルに =IF(COUNT(Sheet1!$A$2:$A$1000)>=ROW(A1),INDEX(Sheet1!$B$2:$B$1000,SMALL(Sheet1!$A$2:$A$1000,ROW(A1))),"") という数式を入れ、 A2~D2セルを範囲指定した後に、D2セルのフィルハンドルで 下へコピーすると画像のような感じになります。 以上、参考になれば幸いですが、 他に良い方法があれば読み流してくださいね。 どうも長々と失礼しました。m(__)m

pigpig2
質問者

お礼

お礼が遅くなり申し訳ありません。 やりたいことがバッチリできました! わかりやすい説明をありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

一種の抜き出し問題なので、imogasi方式で出来ると思う。 Googelで「imogasi方式」で照会してもらうと、たくさんの例が出る。 連番を振る関数は=IF(C2<>"",MAX($F$1:F1)+1,"")と簡単(F列に連番を出す場合の例)。 この1,2,3・・を他ブックのシートの行番号に関連付けて、データを引っ張ってくる。 同一ブック第2シートに書き出しの例がほとんどだが、 http://www.excel-jiten.net/formula/ref_other_books.html の最後の「他ブック参照」の式を参考に式を作ってもらえば出来ると思う。 ーーー エクセルは、抜き出しは、フィルタで検索することを基本にすえていると思う。 フィルタで検索し、結果をコピーして、他ブックに貼り付ける操作をして、マクロの記録をとるのが、対策ではないかと思う。 苦手といっても、マクロの記録は、とりあえずは質問者は、何もすることは無く、食わず嫌いだと思う。 修正の必要か初が出てきた時には、その場合はVBAの知識が要る ーーー VBAを勉強すれば、数量列を見て、空白で無い行を他ブックに書き出す(これを全行に渉って行う)という簡単なプログラムになる。 ーー MSクエリなどSQLまで動員する方法もあるが、そこまで行かなくてもとおもう。

pigpig2
質問者

お礼

ご回答ありがとうございます。 回答者様の言うとおり。。。食わず嫌いです。 マクロもVBAも勉強したいと思います。ありがとうございました。

回答No.1

別のブックなので外部データの取り込みでSQLを使うのがベターだと思います。最小1分単位で更新可能です。 といっても、敷居が高いので数式案 E1セル 1 E2セル =IF(C2="",E1,SUM(E1,1)) 下へオートフィル A12セル =MAX(E1:E10) A13セル =IF($A$12>ROW(A1),ROW(A1),"") 下へオートフィル B13~E13セルを選択して =IF($A13="","",INDEX($A$2:$D$10,MATCH($A13,$E$1:$E$9),{3,2,4,1})) [Ctrl]+[Shft] +[Enter] で確定する B16:E16まで下へオートフィル A12:E16セルを別のブックへ切り取って貼り付け ROW関数の中身はROW(A1)としてください 参考まで

pigpig2
質問者

お礼

ご回答ありがとうございます。 ROW関数は知りませんでした。早速試してみます。 ありがとうございました。

関連するQ&A