エクセルでの商品一覧表示方法を知りたい

このQ&Aのポイント
  • エクセル2003でシート1のデータをシート2やシート3に反映させる方法を教えてください。
  • 以前に教えていただいた数式を使用していますが、行数が増えると再計算処理時間が長くなっています。
  • シート2の「A2」に商品コード、「B2」に商品名、「C2」に在庫数を入力し、「A1」に太郎さんや次郎さんを入力すると、シート1のデータを一覧で呼び出せるようにしたいです。
回答を見る
  • ベストアンサー

エクセル2003の質問です

エクセルでの質問です。  シート1にA1商品コード、B1に商品名、C1に在庫数、D1に生産者とした時に     A       B       C       D 1 商品コード 商品名  在庫数 生産者 2 1234   みかん1   3   太郎さん 3  456   みかん2   5   次郎さん 4  234    りんご1   1   太郎さん ・ ・ となっていて、シート2に太郎さんシート3に次郎さんとした時にシート1にランダムにデータを入力 した時、シート2、シート3へ反映させる方法が知りたいです。 シート2、シート3の表はシート1と同じです。 と以前、質問して回答をいただき下記の数式を教えていただきました シート1のE2セルには次の式を入力して下方にドラッグコピーします。 =IF(D2="","",D2&COUNTIF(D$2:D2,D2)) シート2やシート3での作業は次のようにします。 A1セルにシート2では太郎さん、シート3では次郎さんと入力します。後の操作はすべてシート2と同じです。 A2セルには商品コード、B2セルには商品名、C2セルには在庫数と項目名を入力します。 A3セルには次の式を入力してC3セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(COUNTIF(Sheet1!$E:$E,$A$1&ROW(A1))=0,"",INDEX(Sheet1!$A:$C,MATCH($A$1&ROW(A1),Sheet1!$E:$E,0),COLUMN(A1))) このような数式を使い大変便利に使用していたわけですが、行数が1000、2000、3000と増えて行く うちにエクセルの再計算処理時間が増加化の傾向に有ります。 原因としては(多分)思い当たる事として、 1、シート1のデータが3000行になっている 2、シート2、3、4、5、の行数も1000行にしてある 3、登録シートがVBAで作ってある 4、パソコンが7年前に購入した物で古い(これに関しては変更できませんが) ですので今度は、シート2の所を、使い 「A2」には商品コード、「B2」には商品名、「C2」には在庫数として 「A1」に「太郎さん」だったり、「次郎さん」だったりと入力すると、「A3」からシート1のデータ を全て一覧で呼出し出来る様にする事が知りたいです。 なお、この表に関しては、実際に使用する物と項目の名称だけ違うだけで使用してます。 また、コピーしてオートフィルかけたりとかは自分は出来ますが、年配の方が使用するので 出来れば簡単にと思っています。  よろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

まぁ、単純に速さ比べをするなら確かに E1に =IF(A1="","",COUNTIF(Sheet1!D:D,A1)) を記入、 E4に =IF(ROW(A1)>$E$1,"",MATCH($A$1&ROW(A1),Sheet1!E:E,0)) 以下コピー A,B,C4以下は回答1の通り といった具合にすることで、更に速くなります。

tamamike3670
質問者

お礼

回答ありがとうございます        すごく助かりました。

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答:No.1様の方法よりも更に再計算処理に要するコンピュータの負荷を軽減する事が出来る方法です。  Sheet2やSheet3のレイアウトを少々変更しまして、例えばSheet2のA1セルに「生産者名:」、A2セルに「商品種類数:」等と入力して下さい。(このA1セルとA2セルに入力する項目名に関しては、別の適当な名称に変更されても構いません)  次に、Sheet2のB1セルに「太郎さん」等の生産者名を入力して下さい。  次に、Sheet2のB2セルに次の関数を入力して下さい。 =IF($B$1="",0,COUNTIF(Sheet1!$D:$D,$B$1))  次に、Sheet2のA4セルに次の関数を入力して下さい。 =Sheet1!$A$1  次に、Sheet2のB4セルに次の関数を入力して下さい。 =Sheet1!$B$1  次に、Sheet2のC4セルに次の関数を入力して下さい。 =Sheet1!$C$1  次に、Sheet2のA5セルに次の関数を入力して下さい。 =IF(ROWS($5:5)>$B$2,"",INDEX(Sheet1!$A:$C,MATCH($B$1&ROWS($5:5),Sheet1!$E:$E,0),MATCH(A$4,Sheet1!$A$1:$C$1,0)))  次に、Sheet2のA5セルをコピーして、Sheet2のB5~C5の範囲に貼り付けて下さい。  次に、Sheet2のA5~C5の範囲をコピーして、同じ列の6行目以下に貼り付けて下さい。  最後に、Sheet2のコピーシートを生産者の人数分だけ複製して、そのコピーシートのB1セルに入力している生産者名を、各生産者の名前に変更して下さい。  それから余談ですが、この方法でも未だ再計算処理時間が長いようでしたら、計算処理の設定を[自動]ではなく、[手動]にしておきますと、セルに入力しただけでは再計算が行われなくなりますので、1つのセルに入力する度に「再計算が終わるまで次の入力が行えない」という事態を避ける事が出来、入力を速やかに行う事が出来ます。  そして、全ての入力を済ませてから、[F9]キーを押す事で、再計算処理をまとめて行う事が出来る様になります。 【参考URL】  給与計算・事務代行カンパニー JIMCOMPANY【ジムカン】 > Excel教室 > 無料のWEB教室 > 計算方法の自動⇔手動   http://www.jimcom.co.jp/excel/basic_setting/000001.html  又もしも、たった1回の手動計算であっても時間が惜しいという場合には、ワークシート関数ではなく、Sheet1のE列の処理を廃止した上で、VBAを使った方法に変更する事も検討された方が良いかも知れません。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ごめんなさい誤記ました。 シート2のE4に =IF(COUNTIF(Sheet1!E:E,$A$1&ROW(A1)),MATCH($A$1&ROW(A1),Sheet1!E:E,0),"") と記入、以下コピー です。失礼しました。 実際にはこのシート2のE列は,状況に応じてA列でもどこでも好きな場所に配置して構いません。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

たとえば。 シート2のA1に「太郎さん」を記入 シート2のE3に「行位置」と記入 シート2のA3以降に「商品コード」「商品名」「在庫数」を記入 E4に =IF(COUNTIF(Sheet1!E:E,$A$1&ROW(A1)),MATCH(Sheet1!E:E,$A$1&ROW(A1),0),"") と記入、以下コピー A4に =IF($E4="","",INDEX(Sheet1!A:A,$E4)) を記入、右にコピー、下にコピー といった工夫で軽減できます。

関連するQ&A

  • エクセル2003の質問です

    エクセルでの質問です。  シート1にA1商品コード、B1に商品名、C1に在庫数、D1に生産者とした時に     A       B       C       D 1 商品コード 商品名  在庫数 生産者 2 1234   みかん1   3   太郎さん 3  456   みかん2   5   次郎さん 4  234    りんご1   1   太郎さん ・ ・ となっていて、シート2に太郎さんシート3に次郎さんとした時にシート1にランダムにデータを入力 した時、シート2、シート3へ反映させる方法が知りたいです。 シート2、シート3の表はシート1と同じです。

  • エクセル2003の質問です

    エクセルでの質問です。  シート1にA1商品コード、B1に商品名、C1に在庫数、D1に生産者とした時に     A       B       C       D 1 商品コード 商品名  在庫数 生産者 2 1234   みかん1   3   太郎さん 3  456   みかん2   5   次郎さん 4  234    りんご1   1   太郎さん ・ ・ シート2のA1に太郎さんを入力した時に シート2のA1に「太郎さん」を記入 シート2のE3に「行位置」と記入 シート2のA3以降に「商品コード」「商品名」「在庫数」を記入 E4に =IF(COUNTIF(Sheet1!E:E,$A$1&ROW(A1)),MATCH($A$1&ROW(A1),Sheet1!E:E,0),"") と記入、以下コピー A4に =IF($E4="","",INDEX(Sheet1!A:A,$E4)) を記入、右にコピー、下にコピー と教えていただき大変便利に使用していますが、印刷範囲をデータが表示された場所に合わせ自動で 変更設定出来る方法が知りたいです。なおシート2は表になっている為、罫線が先に入れてあります よろしくお願い致します。

  • エクセル2003の質問です

     エクセルでの質問です。  シート1にA1商品コード、B1に商品名、C1に在庫数、D1に生産者とした時に     A       B       C       D 1 商品コード 商品名  在庫数 生産者 2 1234   みかん1   3   太郎さん 3  456   みかん2   5   次郎さん 4  234    りんご1   1   太郎さん 印刷する場合、A1からD4までを印刷範囲設定し印刷しますが、データが増えた時にそれに合わせ 印刷範囲も自動で増えワンタッチ的に印刷する方法が知りたいです。 よろしくお願いします。

  • エクセルについてご質問させていただきます

    現在は、シート1に『商品コード』『商品名』『分類』『在庫』が一覧で存在しており検索機能を使用して商品コードで検索し『在庫』に○を記載しているのが現状です 約500件のデータが存在しており、同一の商品コードは1つしか存在しません そこで、シート2のあるセルに商品コードを入力するとシート1から商品名、分類を引っ張ってきて表示し、正しければ何か1クッション(ボタンを押すなど)すればシート1の該当商品の在庫に○が記載されるようにしたいのです シート2に商品コードを入力して商品名、分類を表示させるのは関数で出来ました =INDEX(商品一覧!A3:C1000,MATCH(B14,商品一覧!A3:A1000,0),3) が、クッション(ボタンを押すなど)すればシート1の在庫に○が記載されるようにする事がどうしても出来ません 何か良い知恵がありましたらご教示をお願いいたします

  • エクセルVBA:表の内容を担当者別に振り分けたい

    よろしくお願いいたします。 VBA初心者です。よろしくご指導をお願いいたします。 安易に教えてgooで質問することにお叱りをいただくこともあり、 VBAの本も数冊買って勉強をはじめ、格闘していますが、手に負えません。どうか助けてください。   A     B   C   D   E    F   g  担当者  日付 商品 規格 数量  単価 備考 1山田太郎  ○  △  ■   ◎  ◇   ▼ 2鈴木次郎  ■  ○  ▼   ■  ○   ○ 3佐藤三郎  △  ■  ○   ◎  ◎   ■ 4山田太郎  ▼  ■  ◎   ■  ○   ▼ 5山田太郎  ◇  ○  ◎   ◇  ◆   ◎ 6鈴木次郎  ◆  ◎  ◇   ◎  ◇   ◇ というような入力シートの表があり、レコードは1000以上、下にたくさん続きます。 ○や▼には実際には数値や商品名、短文などが入ります。 担当者は、50名、そこで「山田太郎」をはじめ、担当者氏名の名前の50のワークシートを作成しています。 そこで、次のようなVBAを書きたいのです。 VBAを実行すると、 シート別に入力表のデータが振り分けられて、 「山田太郎」に  A  B   C   D   E    F   g 1  日付 商品 規格 数量  単価  備考 2  ○  △  ■   ◎  ◇    ▼ 3  ▼  ■  ◎   ■  ○    ▼ 4  ◇  ○  ◎   ◇  ◆    ◎ と入力シートに入力されたデータが50名のシートに振り分けられるものです。 どうか、よろしくご指導お願いいたします。

  • エクセル 条件にあったセル移動

    表題の質問をさせていただきます。 以下の表があります。 A列…商品コード(都度入力) B列…商品名(別シートから個々の名称をVLOOKUPで表示) C列…条件(別シートから「買取」「委託」のどちらかがVLOOKUPで表示) D列…買取在庫数(都度入力) E列…委託在庫数(都度入力) 現在はA列に商品コード入力後にC列の条件(買取か委託)を確認し、D列の買取在庫数かE列の委託在庫数の どちらかに在庫数を入力しています。 セルの移動は矢印キーかマウスを利用しています。 これを、商品コード入力→Enter後に 条件を加味して 買取在庫数か委託在庫数のセルに自動で移動して 在庫数入力→Enter後に 次行の商品コード入力セルに自動で移動するようなことが出来ないかうかがいたいのです。 在庫の条件が無ければ↓のかたの http://okwave.jp/qa3080856.html  やりかたで可能だったのですが、条件が ある場合の回答を見つけることが出来ずに質問させていただきました。 エクセル2003です、よろしくお願いいたします。

  • エクセルの関数で

    いつもお世話になってます。 例えばA列に商品コード、B列に商品名が入力されているシートがあって、あるセル(例えばC1)に商品コードを入力すると特定のセル(例えば(D2)に商品名が転記されるようにするにはD2にはどのような関数を書けばいいのかどなたか教えてください。

  • エクセルVBAで違うブックの指定セルの値をコピーするコード

    同じフォルダ内に次のブックがあります。 ・「日報」フォルダ ・「入力」ブック ・「日報」ブック 「日報」ブックの「入力」シートのセルに入力して、ボタンを押すと 「日報」ブックの指定のセルに順にコピーしていくようにしたいの ですが、コードをお教えいただけないでしょうか? 具体的には次のようになります。 「入力」ブックの「入力」シート→「日報」ブックの「日報」シート A2,C2,D2,E2,F2→→→→→→A5,D5,F5,L5,P5 A3,C3,D3,E3,F3→→→→→→A6,D6,F6,L6,P6 A12,C12,D12,E12→→→→→→A34,J34,E34,E35 A13,C13,D13,E13→→→→→→A36,J36,E36,E37 このように入力されるようにしたいと思います。 実際にはもう少し同じようにコピーするところが あるので、後でセル番地を追加できるようなコード であれば非常にありがたいです。コードを教えて ほしいなんて本当にずうずうしいですが、どうぞ よろしくお願いします。

  • エクセル関数2

    シート(1) A B C D 作業列    コード    顧客名     金額 3        300001     A 10,000 3        300002   B 15,000 3        300003   C 20,000 3        300004   D 25,000 3        300005   E 30,000 4        400001   F 35,000 4        400002   G 40,000  4 400003 H 45,000 4 400004 I 50,000 4 400005 J 55,000         シート(2) A B C D E F 「1」 「2」 「3」 「4」 「5」 「6」 10,000 35,000 15,000 40,000 20,000 45,000 25,000 50,000 30,000 55,000 ※ シート(1)にコード、顧客名、金額を入力すると、シート(2)にあるように該当するコードの先頭行の列に表示するようにしたいと思っています。 シート1で作業列を作りその作業列を基にシート2でVLOOKUP関数を使い‥シート2の10,000のセルの場合、 VLOOKUP(C$2,sheet1!$A$3,$D$12,4,false)として、下にコピーすると同じ金額になってしまいます。 セルが空白にならず、シート1の金額が上から順番にシート2に表記されるようにするにはどうしたらよいでしょうか。マクロはできませんので、関数で詳しく教えて下さい。宜しくお願いします。

  • EXCELの質問です。どなたか教えてください。

    EXCELの質問です。どなたか教えてください。 Sheet1のA1,B1,C1にSheet2のA1,C1,E1と、一つ飛ばしの 値を反映させるにはどうしたらいいですか? Sheet1のセルA1,B1に A1=Sheet2A1,B1=Sheet2C1とし、2つのセルを選択してドラッグしても A1=Sheet2A1,B1=Sheet2C1,C1=Sheet2C1,D1=Sheet2E1,E1=Sheet2E1,F1=Sheet2G1・・・ と反映されてしまいます。 できれば小難しい計算式は使いたくないのですが、なにかいい方法や簡単な 式があったら教えてください。 宜しくお願い致します。

専門家に質問してみよう