• 締切済み

Excelで構成表の作成

会社で急遽棚卸表をつくることになり、マクロや関数などほとんど触ったことがなかったので困っています。 どなたか教えてください。 まずシート1には製品リストが表記されています シート1 製品番号 製品名 在庫数 ○○○   ○○    ○○ ×××   ××    ×× △△△   △△    △△ シート3以降にはその製品を作るための材料が展開されています シート3以降のシート名については製品番号になっています シート3~(製品番号) 材料番号 材料名  使用数 ○○○   ○○    ○○ ×××   ××    ×× △△△   △△    △△ 上記の状態からシート1の在庫数に数を入力すると シート3以降の構成表よりその製品に使われる材料の使用数を導き出し その材料が実際に何個あるかをシート2へとまとめたい。 また製品毎に同じ材料を使用している場合については 合算して表記したい。 自分で試してみましたが 締切が押し迫り、どなたかのお力添えをいただきたいです。 プログラムの理解度はVBはないですがPerl、PHPについては触ったことがある程度です。 マクロでもなんでも結構ですのでご教授願います。

みんなの回答

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

 Sheet1に製品番号と在庫数を入力し、各製品番号のシートに材料番号等のデータを入力しておけば、使用されている全ての材料番号が昇順に並べられている一覧表が自動的に作成され(材料番号を網羅したリストを元データとして作成しておく必要が無い)、その横に材料名や総使用数が自動的に表示される方法です。  今仮に、Sheet1において、製品番号が入力されている列がA列であり、在庫数が入力されているセルがC列であるものとします。  同様に、各製品番号のシートにおいて、材料番号が入力されている列がA列であり、使用数が入力されているセルがC列であるものとします。  又、「作業用」というシート名のシートを新たに作成しておき、そのA列~H列を作業列として使用するものとします。  まず、 作業用 というシート名のシートを新たに作成して下さい。  次に、作業用シートのB1セルに次の関数を入力して下さい。 =IF(COUNTIF(Sheet1!$A$1:INDEX(Sheet1!$A:$A,ROW()),INDEX(Sheet1!$A:$A,ROW()))=1,INDEX(Sheet1!$A:$A,ROW()),"")  次に、作業用シートのC1セルに次の関数を入力して下さい。 =IF(ISERROR(1/COUNT(INDIRECT("'"&$B1&"'!C"&MATCH("使用数",INDIRECT("'"&$B1&"'!C:C"),0)&":C"&ROWS(C:C)))),"",MATCH(9E+307,INDIRECT("'"&$B1&"'!C:C"))-MATCH("使用数",INDIRECT("'"&$B1&"'!C:C"),0))  次に、作業用シートのA1セルに次の関数を入力して下さい。 =IF(ISNUMBER($C1),SUM($C$1:INDEX($C:$C,ROW()-1)),"")  次に、作業用シートのA1~C1の範囲をコピーして、同じ列の2行目以下に、(Sheet1のリストの行数を上回るのに十分な行数となるまで)貼り付けて下さい。  次に、作業用シートのH2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>SUM($C:$C),"",IF(ISNUMBER(INDIRECT("'"&VLOOKUP(ROWS($2:2)-1,$A:$B,2)&"'!C"&ROWS($2:2)-LOOKUP(ROWS($2:2)-1,$A:$A)+MATCH("使用数",INDIRECT("'"&VLOOKUP(ROWS($2:2)-1,$A:$B,2)&"'!C:C"),0))),INDIRECT("'"&VLOOKUP(ROWS($2:2)-1,$A:$B,2)&"'!C"&ROWS($2:2)-LOOKUP(ROWS($2:2)-1,$A:$A)+MATCH("使用数",INDIRECT("'"&VLOOKUP(ROWS($2:2)-1,$A:$B,2)&"'!C:C"),0))*SUMIF(Sheet1!$A:$A,VLOOKUP(ROWS($2:2)-1,$A:$B,2),Sheet1!$C:$C),""))  次に、作業用シートのF2セルに次の関数を入力して下さい。 =IF(ISNUMBER($H2),INDIRECT("'"&VLOOKUP(ROWS($2:2)-1,$A:$B,2)&"'!R"&ROWS($2:2)-LOOKUP(ROWS($2:2)-1,$A:$A)+MATCH("使用数",INDIRECT("'"&VLOOKUP(ROWS($2:2)-1,$A:$B,2)&"'!C:C"),0)&"C"&COLUMN(INDIRECT("C3"))+COLUMN()-COLUMN($H$1),FALSE),"")  次に、作業用シートのF2セルをコピーして、作業用シートのG2セルに貼り付けて下さい。  次に、作業用シートのE2セルに次の関数を入力して下さい。 =IF(OR($F2="",COUNTIF($F$1:$F2,$F2)>1),"",COUNTIF($F:$F,">"&$F2))  次に、作業用シートのE2~H2の範囲をコピーして、同じ列の3行目以下に、(全ての製品番号のシートのリストの行数を合計した数を上回るのに十分な行数となるまで)貼り付けて下さい。  次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT(作業用!$E:$E),"",IF(VLOOKUP(LARGE(作業用!$E:$E,ROWS($2:2)),作業用!$E:$G,COLUMNS(作業用!$E:F),FALSE)="","",VLOOKUP(LARGE(作業用!$E:$E,ROWS($2:2)),作業用!$E:$G,COLUMNS(作業用!$E:F),FALSE)))  次に、Sheet2のA2セルをコピーして、Sheet2のB2セルに貼り付けて下さい。  次に、Sheet2のC2セルに次の関数を入力して下さい。 =IF(OR(INDEX($A:$A,ROW())="",COUNT(Sheet1!$C:$C)=0),"",SUMIF(作業用!$F:$F,$A2,作業用!$H:$H))  次に、Sheet2のA2~C1の範囲をコピーして、同じ列の2行目以下に、(全種類の材料番号を表示するのに十分な行数となるまで)貼り付けて下さい。  以上です。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

Sheet1でA2セル以降に記載されている製品番号=シートからA:C列をSheet2にコピーし、使用数をSheet1の在庫数倍するマクロを作ってみました。 材料名などがかぶる場合は、マクロの結果をさらにピボッドテーブルなどで処理してください。 サンプルですので、該当シートが無い場合等のエラー処理は一切含めておりません。悪しからず。 Sub Sample()   Dim nRow, nMax, sShtName, i   nRow = 2 'sheet2の2行目から貼り付け      For i = 2 To Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row     sShtName = Sheets(1).Cells(i, 1)          '対象シートの行数を確認     nMax = Sheets(sShtName).Range("C1").End(xlDown).Row          'Sheet2に貼り付け     Sheets(sShtName).Range("A2:C" & nMax).Copy Sheets(2).Range("A" & nRow)          '貼り付けた部品数を在庫数倍する     Sheets(1).Cells(i, 3).Copy     Sheets(2).Range("A" & nRow & ":C" & nRow + nMax - 2).PasteSpecial Operation:=xlMultiply          'Sheet2の貼り付け行変更     nRow = nRow + nMax - 1        Next i End Sub

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

初心者が取り組まれるにしては内容が複雑ですが次のようにしてはどうでしょう。 一度こちらの提案する方法で試験してもてください。 シート1ではA1セルに製品番号、B1セルに製品名、C1セルに在庫数とそれぞれ項目名が有り下方にそれぞれのデータが入力されるとします。 そこでD列を作業列としてD2セルには次の式を入力して下方にドラッグコピーします。 =IF(AND(A2<>"",C2<>""),IF(COUNTIF(Sheet2!G$2:XX$2,A2),A2,"シート2の2行目に記載がありません"),"") シート2での操作が済んでいない状況ではシート2の2行目に記載が有りませんなどの表示がされるでしょう。 シート2はお求めの表になりますが作業列を作って対応します。 以下にはシート2での作業を示します。 G1セルにはSheet3、H1セルにはSheet4、I1セルにはSheet5・・・と右側の列に製品番号と同じ数のシート名を入力します。 G2セルにはシート3に含まれる製品番号を入力します。同様に各シートに対応した製品番号を右横の列に入力します。 E4セルには材料番号、F4セルには材料名、G4セルには使用数、H4セルにも使用数、…右横のセルに1行目のセルにシート名が有るところまで使用数の文字列を入力します。 E5セルから下方には使われるすべての材料番号を入力します。F5セルから下方には材料名を入力します。 その上でG5セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR(G$1="",$E5=""),"",IF(COUNTIF(Sheet1!$D:$D,G$2)=0,"",IFERROR(INDEX(INDIRECT(G$1&"!A:C"),MATCH($E5,INDIRECT(G$1&"!A:A"),0),3)*INDEX(Sheet1!$C:$C,MATCH(G$2,Sheet1!$D:$D,0)),""))) それぞれのシートに記載された製品番号における材料の使用数にシート1で入力した在庫数を掛けた形で表示されます。 E4セルからF列のデータの最後までを範囲としてコピーし、A4セルに貼り付けます。その後にC4セルには使用数の項目名を入力します。C5セルには次の式を入力して下方にドラッグコピーします。 =IF(SUM(G5:XX5)=0,"",SUM(G5:XX5)) お求めの表はA,B,C列に表示されることになります。表が使用数が空白の行も含まれていますので別のシートに空白の行を除いた形の表を作成する場合には作業列としてD5セルに次の式を入力して下方にドラッグコピーします。 =IF(C5="","",MAX(D$4:D4)+1) 目障りでしたらD列を選択してからフォントの色を白に設定してもよいでしょう。 次にシート3以降のシートについてはA列に材料番号、B列に材料名、C列に使用数をそれぞれのシート名と製品番号に対応して入力します。 以上の操作でお望みの表がシート2に表示されますが全く別のシートに空白セルのない状態でまとめて表示させるのでしたら 例えばA1セルからC1セルまでにシート2のA4セルからC4セルの項目名をコピーして貼り付けます。 その後にA2セルには次の式を入力してC2セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>MAX(Sheet2!$D$5:$D$1000),"",INDEX(Sheet2!$A$5:$C$1000,MATCH(ROW(A1),Sheet2!$D$5;$D$1000,0),COLUMN(A1)))

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

>シート1の在庫数に数を入力すると >シート3以降の構成表よりその製品に使われる材料の使用数を導き出し >その材料が実際に何個あるかをシート2へとまとめたい 無理なんじゃ? 製品在庫数ってことは既に材料は使用済みと言う事になりますが 使用済みの材料数だけでは現状の材料在庫は求めることはできません ※製品在庫0の時点(もしくは全開棚卸時点)での材料在庫数が必要 上記在庫数が判ったとして、製品は在庫するだけで出荷はしないのでしょうか? 出荷済み製品があった場合、その製品作成に使用された材料も材料在庫から差し引く必要があります それらの条件が全て揃わない限り、計算上の在庫数と棚卸在庫数が一致することはないでしょう まずは生産・在庫管理の基礎の勉強が必要と思われます

関連するQ&A

  • エクセルでの在庫表作成

    エクセル関数を教えてください。 初心者が製品在庫表を作成しております。 ケースの入り数が50入り、100入りと製品ごとにまちまちです。 入り数×ケース単位で入庫-ケース単位出庫=在庫残数が数量で表示したい。 製品100入り×100ケース-20ケースで出た残りの数を8000と表示させたい。 また製品のシートを1日から31日までの串刺し演算のようなもので1日目の残数が2日目~31日までの全シートを作成。これに残数表示させたいと思っております。 たとえば8日目のシートで入庫20と記入して、在庫残数10000の表示させ、以降31日目まで。 シートにコピー貼り付け方なども教えていただければ幸いです。よろしくお願いいたします。   ちなみにPCは、XPです。  haykunenn    

  • 賞味の管理表について

    私は会社で材料を調達する事務係をしています。 材料の管理を昨年からすることになりました。 現在、材料の管理はロットNo.と賞味期限と在庫数をエクセルで簡単な表で管理しており、現場が持ち出す時(週1ペース)は、在庫数を現場が入力しています。月末の棚卸も現場が入力します。 表は 材料名  ロットNo.  賞味期限  在庫    ロットNo. 賞味期限 在庫 みかん  123     2008/3/1   10      124   2008/3/20   15  バナナ  111    2008/4/10   20 という表で、材料毎に表が下へ延びます。同じ材料でロットNo.が違う場合は横に延びます。 この表を現場が入力しているのですが、種類が多くなったので表が縦長くなってしまい、入力間違いなどのトラブルがあったりします。 私も気をつけて見てはいるのですが・・・ ソフトを導入せずに管理するとなれば、エクセルが一番無難でしょうか・・・?マクロは出来ませんが、詳しい人がいますのでマクロでも大丈夫ですが、どういう表が適しているか第三者の意見を聞いてみたいです。

  • エクセル 商品棚卸の照合表を作りたいのですが・・・

    エクセルで商品棚卸の照合表を作ろうとしているのですが上手くいきません。 VLOOKUP関数を使って、在庫帳と棚卸票の照合をしようしたのですが、棚卸票にあるのに在庫帳にない商品が相当数ある為、在庫帳を基準にした照合表ではデータの拾い漏れが発生してしまいます。 2つの表のデータ(商品名)をダブらせずに一つの表に転記したいのですが・・・。 どうかアドバイスをお願い致します。

  • EXCELのマクロについて

    マクロについて質問させてください。 商品コード、商品名、ケース入数、ロケーション、WMS在庫数、実在庫数、在庫差異 の順でAからHまでデータがあります。 商品コード毎で1行ずつで全部で6000行程あります。 実在庫数と在庫差異以外は既にデータが入力されており棚卸を実施した後に実在庫数へ入力、関数を入れて在庫に差異があれば表示されるというようなものです。 但し、かなりのデータ量で1人での入力は時間が掛かりますので4名で入力業務を行うことになりました。 元のファイルをコピーし4名で入力し始めたのは良いのですが、入力し穴だらけになったらファイルを元のファイルに合算する方法がわかりません。 手作業では骨の折れる作業ですし、正確性に欠けます。 そこでマクロを使ってそれぞれの入力したファイルから元のファイルにデータが自動で移行するようにしたいのです。 以前、マクロを少しかじりましたが私の知識では作ることが出来ませんでした。 どなたかお力添え頂けると助かります。 宜しくお願い致します。

  • エクセルで在庫表を作成したい

    エクセルで在庫管理表と、出荷伝票を作りたいのですが添付画像のように 在庫管理表シートに出荷依頼のあった商品に出荷数量を入力したら、その商品名やコード、出荷数を別シートの出荷伝票にのセルに自動で入力されるようにしたいのですが、可能ですか? お知恵のある方ご伝授ください。

  • 在庫表の管理をエクセルで行うに当たって、教えてください。

    エクセルのシート2に在庫表があります。 在庫表には、仕入日、仕入先、整理番号、メーカー、商品分類、モデル名、車体番号、仕入金額、が 右並びに書いてあります。 整理番号は、データを入れる時に、4桁の数値で各車に、つけます。(整理番号で管理している) メーカー数は、10件のメーカー数があります。 商品分類はA-1,A-2,B-1,B-2,C-1.,C-2,C-3の7項目があります。 シート1を新規に仕入れた商品のデータインプット用とし、これに、インプットすると、 シート2の在庫表が、メーカー別、商品分類別になっているため、(別の言い方:メーカー:10×分類:7で70の在庫グループがある) その(在庫グループ)の最終行に、自動的に転記されるようにしたいのです。(別の言い方:整理番号が昇順) 同様に、売上た商品も、シート1で、売上日、売上先、整理番号、メーカー、商品分類、モデル名、車体番号、売上金額、をインプットすると、自動的に在庫表から削除されて、その行が詰まるようにしたいのです。 よろしくお願いします。

  • Excelで、表を作成したいのですが…

    データの整理を、各フォルダに 個人・団体名と、会員番号をつけて登録月日の順で表を作っていました しかし、先日 HDが壊れたため Excelのシートが消えてしまいました データの入ったドライブは無事だったので、  [フォルダ名をコピー]⇒[セルに貼付け] を繰り返せば同じシートが作成できます この作業を簡単なマクロで自動化する方法はないでしょうか 約1000件分なので時間を掛ければ何とかなるとは思いますが、他にも消失したデータがあり困っています どうか、よろしくお願いします//

  • マクロについて

    初めて質問させていただきます。 最近会社で、エクセルのマクロを使って作ってほしいと言われました。 が、マクロを使用したことがありません。 そこで、下記内容で作りたいのですが、よろしくお願いします。 1.シート1に製品名を入力すると、シート2にある製品データから、入力した製品名を検索し、   その仕様・型式・在庫数・価格等をシート1に表示する。 2.また、1.でシート1に表示した、製品名・仕様・型式・在庫数・価格等を改訂し、登録ボタン等   を押すことで、シート2の内容も改訂される。 マクロは「マクロの記録」を使用したことは何度かある程度です。 宜しくお願いします。

  • ExcelのVBAマクロ作成で他のExcelから条件つきでデータを取り込みたい

    毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイル(貼付け先ファイル)の一つのシートに縦一列にして取り込みたいのですがどうすればよいのでしょう? 具体的には… ・在庫データは年ごとにファイルが分かれている(ファイル名「在庫2003年.xls」など) ・在庫データファイルは月ごとにシートが分かれている(シート名「2003年04月」など) ・シートの中のA列に「日付」(上記のシートなら2003/4/1から2003/4/30まで)、D列に「製品A在庫数」、F列に「製品B在庫数」が入力されており他の列にも様々なデータが入力されている。 ・貼付け先ファイルはA列に日付(2000/1/1~2006/12/10)が入力されている。 この状況で、例えば2003年4月と指定してマクロを実行すると、指定の在庫データファイルのシートから「製品A在庫数」と「製品B在庫数」を貼り付け先ファイルの、日付に対応したB列、C列の部分に入力してくれるようにしたいのですが、VBAの記述の仕方がわかりません。どうすればよいのでしょう? お願いします!

  • エクセルシート間の照合で別の表を作成するには

    エクセルシート間の表を照合して、別のシートに反映させ表を完成させたいと思っています。 倉庫1 と倉庫2 の在庫照合なのですが、品番の記載形式が違います。  どちらもシステムの都合で、変更ができず困っています。 シート1(倉庫1)  A   B    C  品番  色番  在庫数    100   C   2 101   B   8 103   Y   3 シート2(倉庫2)  A     B  品番   在庫数 103Y   0 100C   3 101B   5 シート1 とシート2 の表をシート3へ  A     B      C          品番   在庫数(倉庫1) 在庫数(倉庫2)   100C   2       3 101B   8       5 103Y   3       0 また、結果から、条件付き書式を設定したいと思っていますが。。 たとえば、Cの値が0で、Bの値が5以下の時、行を黄色にする、とかです。 シート1と、シート2の数字が毎日変わります。 今までは品数が少なかったので、それほど支障は無かったのですが、 今後品数が増えることになり、アナログな確認では かなり大変な作業になるのが予想されます・・。 どなたかアドバイスをいただけないでしょうか。 どうぞ宜しくお願いいたします。