• ベストアンサー

エクセルの関数の質問

一つの表には全商品の入出庫の表を作って、別に商品別の在庫表を作って 入出庫表に数量を入力すると在庫表に自動的に入力されるようにするには どういう関数を使えばいいでしょうか。 質問がわかりにくかったらすいません。お願いします<(_ _)> 例) 入出庫表              商品別表 9/10 コーヒー  10        コーヒー  紅茶    カプチーノ 9/10 紅茶    20        9/10 10  9/10 20  9/10 10 9/10 カプチーノ 10        9/11 -1  9/11 -2 9/11 コーヒー  -1 9/11 紅茶    -2

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

商品が3種の場合の例です。関数で計算してみました。 A1:入出庫表 A2:9/10 B2:コーヒー C2:10  以下、A~C列は個々のデータです。 K1:商品別表  K2:コーヒー  M2:紅茶  O2:カプチーノ これは表題です。 途中に補助の算式を書きます。 E2:=COUNTIF($B$2:$B2,K$2) 以下、行方向下にコピー。 E列をG列、I列にコピーします。各商品別の累計個数を計算しています。 K3:=IF(ISERROR(INDEX($A:$A,MATCH(ROW()-2,E:E,0))),"",INDEX($A:$A,MATCH(ROW()-2,E:E,0))) L3:=IF(ISERROR(INDEX($C:$C,MATCH(ROW()-2,E:E,0))),"",INDEX($C:$C,MATCH(ROW()-2,E:E,0))) 以下、行方向下にコピーします。コーヒーの一覧を作っています。 出力行がどこで終わるか分からないので、ISERRORでエラー判定をしているため式が長くなりました。 K列を、M、O列にコピーします。 L列を、N、P列にコピーします。 以上商品が3種類の場合の例です。 関数を使用するには、事前に式を登録しておく必要があります。ご参考に。

chiharuhotei
質問者

お礼

こういうのが欲しかったんです(^O^)ありがとうございました<(_ _)>

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

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

他のご解答を見るて(1)VBA可(2)長くてもがありなら エクセルVBAらしい解答を上げます。他のご解答はVB的。 マクロの記録を大幅に手を加えています。 (シートにボタンを1 つ作り、それをクリックすると、瞬時に結果がシート2に出来ます。本件はボタンを作っていませんし、その説明をしていません。) Sub Macro1() '-----行数変動に対処 d = Worksheets("sheet1").Range("a1").CurrentRegion.Rows.Count s = "a1:c" & d '-----copy Worksheets("sheet1").Range(s).Copy Worksheets("sheet2").Activate Worksheets("sheet2").Range("a1").Select Worksheets("Sheet2").Paste '-----sort Application.CutCopyMode = False Worksheets("Sheet2").Range(s).Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("A2") _ , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _ False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin '----subtotal Worksheets("Sheet2").Range(s).Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(3), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True End Sub シート画面で(1)ALT+F11キー(2)ALT+I (3)ALT+Mのコード画面に上記をコピーして、F5 で実行してください。 (注意:OKWEBで強制改行される個所があり、復元しないと動かないことがあります。)

chiharuhotei
質問者

お礼

すいません。皆さんにこんなに詳しく答えて貰うなんて思いませんでした。 ありがとうございました<(_ _)>

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.5

●なぜ関数で解決するのが難しいか説明したくて下記記します。少し長く表現が微妙になりますがよろしく。 ●エクセルでビジネスの問題に使うとき (1)操作で解決(簡単処理)四則演算+Sum程度を使う (2)操作で解決(並び替え・フィルタ・ピボット・集計等の   表を結果表で置きかえるものを使う) (3)関数を利用する(Sum関数以外) (4)関数を利用する(DataBase関数、Vlooku   pなど) (5)VBA・SQLなどを使うが考えられます。 ●関数の限界は (A)関数はあるセルに関数を入れることによって、他のセルに値や関数や他のセルのコピーをセットできない。  受け手の側のセルに関数をセットしないとならない。  それで検索の結果条件該当分など、いくら受けるべきか数が 不定の場合は困ってしまう。(本質問にも該当) (B)行、列、シートを増やしたり、削除したり出来ない。 (C)DataBase関数も計数の合計しか出さず、条件に   合うレコードや項目(セル)を一括して採って指定個所   にセットしてくれない。 (D)関数は1セルに2つ以上セットできない。 (E)あることをしたいとき、関数式は結構複雑になってしま   い、他人や素人による可読性はそんなに良くない。    他のOKWEBの解答も結構判らないこともありません   か。 ●さて本件では  (1)ソート(キーは商品+日付)すると、一番問題解決題に近づくが、別シートに手操作でコピーするとかは好みじゃないですね。それと別範囲にコピーしないと、元データが崩れる(変わる)ので、都合が悪い。ソート結果を別範囲や別シートに出してくれれば良いが、出来ない。操作の(アドバンス・)フィルタはできるが、別シートに結果を持って行くことが出来ない。 コピーはコピー元が変動するので手作業が必要で、関数では難しい。 (2)データ-集計もこれに近いです。 (2)それと操作によると、一日分とかを入力し終わってからまとめて1回操作をやることになるが、これでは好みではない。(入力操作中は結果に反映してない)。 (3)関数は元になるデータが変わる(入る)と、即座に結果 も変わるのでそういう点では良い。 (4)本質問では、商品別在庫表のコーヒーの欄は日々在庫が変わっても固定したいのでしょうが、それはVBAで無いと 難しい。 ●操作では(1)コピー->(2)ソート->(3)データ-集計(集計行を挿入にチェック)が一番近い。 しかし関数では難しい。 ●本件は(1)アクセスで処理する(2)アクセスVBAで処理する(3)エクセルVBAで処理する。に適した課題でしょう。後任者への引継ぎに心配はあるものの、その方向に進むべきでは。

chiharuhotei
質問者

お礼

要するにアクセスでつくるか、エクセルVBで作ったほうが良いということですね。 エクセルのVBは、私使ったことないんでわからないんです。 アクセスは少しわかりますが他の方がわかりません。 小企業なので次に使う方が必ずしもアクセスが出来るとは思いませんので後で修正できなくなっても困ります。 現に前の会社ではそうだったのでたまに電話があります。 もうそんなことはしたくありませんので。。。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

はじめまして。 ピポットテーブルを使う方法もありますが、データーを入力するだけで自動的にあなたのやりたいことを実現する方法をご紹介いたします。以下の方法で操作してみて下さい。 1.新規ブックを開き、A1に日付・B1に商品名・C1に個数と入力する。2.VBEの画面を開き、Sheet1モジュールに下記のコードをコピー・ペーストする。 3.データーを入力してみる。C列がフォーカスを失うと自動的に商品別表ができるように作ってあります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRow As Long Dim myRange As Range Dim myCell As String Dim myCell1 As String Dim myCell2 As String If Target.Row = 1 Then Exit Sub myRow = Target.Row myCell = Cells(1, Columns.Count).Address If Range("C" & myRow).Address = Target.Address Then If Worksheets.Count = 1 Then Worksheets.Add after:=Worksheets(Worksheets.Count) Worksheets(2).Range("A1:B1").MergeCells = True Worksheets(2).Range("A1").Value = Target.Offset(0, -1).Value Worksheets(2).Range("A2").Value = "日付" Worksheets(2).Range("A3").Value = Target.Offset(0, -2).Value Worksheets(2).Range("B2").Value = "個数" Worksheets(2).Range("B3").Value = Target.Value Else Set myRange = Worksheets(2).Range("A1:" & myCell).Find(Target.Offset(0, -1).Value, lookat:=xlWhole) If myRange Is Nothing Then myCell1 = Worksheets(2).Range(myCell).End(xlToLeft).Offset(0, 1).Address myCell2 = Worksheets(2).Range(myCell).End(xlToLeft).Offset(0, 2).Address Worksheets(2).Range(myCell1 & ":" & myCell2).MergeCells = True Worksheets(2).Range(myCell1).Value = Target.Offset(0, -1).Value Worksheets(2).Range(myCell1).Offset(1, 0).Value = "日付" Worksheets(2).Range(myCell1).Offset(2, 0).Value = Target.Offset(0, -2).Value Worksheets(2).Range(myCell2).Offset(1, 0).Value = "個数" Worksheets(2).Range(myCell2).Offset(2, 0).Value = Target.Value Else Worksheets(2).Cells(Rows.Count, myRange.Column).End(xlUp).Offset(1, 0).Value = Target.Offset(0, -2).Value Worksheets(2).Cells(Rows.Count, myRange.Column).End(xlUp).Offset(0, 1).Value = Target.Value End If End If Worksheets(1).Activate Range(Target.Address).Offset(1, -2).Select End If End Sub   もし何かありましたら、またお知らせ下さい。私でよろしければ、あなた様のやりたいことが実現するまでお手伝いさせていただきたいと思います。

chiharuhotei
質問者

お礼

すごいですね。驚きましたこんな丁寧な回答が戻ってくるとは思いませんでした。 でも、私がVBがわからないんで、やめておきます。 質問されても私が答えられません。すいません、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • goo_noc
  • ベストアンサー率0% (0/7)
回答No.2

入出庫表から、コーヒーと書かれた数量の合計値を出すのであれば、 SUMIF(範囲, 検索条件, 合計範囲)関数でできますが、 商品表のように表示するであれば、マクロが必要になります。 どちらにします?

chiharuhotei
質問者

お礼

やっぱり表にするにはマクロが必要なんですかね。。。 どうにかして関数にしたいんです。 マクロを使うと私がいない時何かあったら困るんです。 関数だったら少しはわかる人がいるからどうにか出来ないかな?と思ってます。

全文を見る
すると、全ての回答が全文表示されます。
  • oraho
  • ベストアンサー率43% (7/16)
回答No.1

EXCELならピボットテーブルを使用すれば簡単に作成できます。 1.まず、入出庫表を作成します。(日付/品名/数量) 2.データ(D)のピボットテーブル(P)を選択 3.入出庫表の全体を選択 4.行のフィールドには品名、日付の順で入れ、データアイテムに数量を指定します。 関数を使用すると、品名・日付ごとにVLOOKを使用しなければいけないのでかなり大変です。

chiharuhotei
質問者

お礼

ピボットテーブルまだ使ったことないんですけど今からやってみます。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル関数を向教えてください!!!

    (1)売上表があります。 ちがうシートに(2)在庫表があります。 (2)在庫シート D列商品コード L列入出庫数 の表があります。 (1)売上シートのE列に商品番号を入力すると入力に応じて (2)在庫シート のL列入出庫数を減らすようにしたいです。 どのようにしたらできるのでしょうか?? 関数は無知で見よう見まねでやっています。 詳しい方、教えてください。よろしくお願いいたします。

  • エクセル2000で・・

    品番 品名  単価  在庫数 1  リンゴ  120  1000 2  ミカン  100  1000 3  バナナ  80  1000 という表があるとします。 次に別シートに 品番 品名  単価  売れた数 2  ミカン  100  10 と、売れた分量を示す表があります。 そしてもう一つ別シートに 品番 品名  単価  在庫数 1  リンゴ  120  1000 2  ミカン  100  990 3  バナナ  80  1000 というシートがあり、一つ目のシートから二つ目のシートで売れた分の数を引いた数量を表す表があります。 二つ目の表を入力した際に、自動的に三つ目の表の在庫数が表示されるような関数はありますでしょうか?

  • エクセルの関数を教えてください!!!

    エクセルの関数の質問です。 売上表を作りたいのですが たとえば「250円」の商品が何個売れたか入力する際 1のセルに「2個」と入力すると 2のセルに「500円」と自動的に反映される 関数を教えて頂きたいです。 また売上表を作るのに参考になる テンプレートやページなどありましたら 合わせて教えて頂きたいです。 宜しくお願い致します。

  • エクセル関数について質問です!!

    エクセル関数に関する質問です。商品入荷情報を一目で分かりやすい表を2タイプ作成したいと考えております。1つ目は縦列に商品、横列に行動、交わったところが実行日。例えばA商品を発注した日が2月1日とすると、(縦列)A商品と(横列)発注の交わったところに実行日2/1を入力するもの。そして2つ目はカレンダー形式で、何日に何(商品)がどうした(実行)が分かるもの。ここまでは通常の表を作成するだけですが、問題は1つ目の表で日付を入力し、自動的に連動して2つ目の表の2月1日のところに『発注』と入れれるように出来ればと考えています。こんなわがままな関数はあるでしょうか?ご存知な方教えてください!!!

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

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

  • VB6+ADO(EXCEL)についてお教えください。Excelが更新されません。

    お知恵をお貸しください。 VB6 SP5 WIN XP SP2 ADO 2.8 Library Excel 2003 SP2 現在、以上の環境で開発を行っております。 対象Excelのシート1の名前をある機械の「部品入出庫管理」とし、シート2の名前を「部品表」としています。 「部品表」にある[在庫数]フィールドは 「部品入出庫管理」にある[入庫]フィールド、あるいは[出庫]フィールドに値が入力されれば計算される仕組みになっております。 [入庫]フィールドに値Xが入力されれば、「部品表」の[在庫数]フィールドはXプラスされ、 [出庫]フィールドに値yが入力されれば、「部品表」の[在庫数]フィールドはyマイナスされます。 アプリケーションの流れは、 (1)「部品表」の[部品番号]フィールドを検索 (2)入・出庫の数量を入力 (3)「部品入出庫管理」の[入庫]、あるいは[出庫]フィールドにADO接続で数量が入力される (4)この数量を「部品表」の[在庫数]フィールドがExcel内で自動的に計算して値を更新しておく です。 しかし、 (4)の動作ができていません。Excelのアプリケーションそのものを開くと、更新されているのですが・・・ .addnewと.updateを使っております。 何か他の命令なりがあるのでしょうか? ちょっと解りづらいかもしれませんが、お知恵をお貸しください。 大変恐縮ですが宜しくお願い申し上げます。

  • エクセルの関数を教えて下さい

    こんにちは。 在庫表と発注表を作成していてこまっています。 おおざっぱにお客さんから、1か月120000ヶ位と注文が来て、その月の出荷日数が23日とします。仕入れ先への注文は24ヶの倍数でしか頼めません。そして、在庫として2日分(24の倍数)の数量を導きだしたいのですが、どの様な関数になるんでしょうか?バカでわかりません。下記計算で10416ヶを2日分の在庫として確保する様に設定したいのですが、どの様な関数になるのでしょうか?どなたかご教授お願い申し上げます。 120000÷23=5,217.3913(小数点 切捨) 5217×2=10434 10434÷24=434.75 434×24=10416

  • 毎月月末時点の数を求める関数

    1,在庫表で毎月末の在庫数量を関数で自動的に表示させる計算式が知りたいです。 2,毎月末ごとの数を抽出した後、別ファイルで月末在庫一覧表を作成し自動集計させることは可能でしょうか。 在庫表のフォームの項目は 出荷日、納品日、納品先、入り目、出荷個数、出荷数量(入り目×出荷個数)、出荷後残数量と横並びで、入荷数量から順に出荷数量が減算される計算式を入れています。 このような在庫表で品目ごとに10数個のファイルで管理しています。 注文を受けた順に上から下へ入力していて、出荷日、納品日は順不同、月末の日付で出荷があるとも限りません。 全く出荷のない月もあります。 よろしくお願いします。

  • エクセルの関数について教えてください!

    どなたかエクセルの関数について教えてください。 職場で使う在庫管理表、納入表、使用表などの書式をエクセルで作りました。 納入表のファイルから、在庫管理票ファイルへデータを反映させたいのですが・・ ファイルからファイルへの反映は可能なのでしょうか?? 可能であればその関数と入力方法を教えて頂きたいです。 あと、在庫管理表に使用者、使用日欄があるのですが、そこに入力された場合、 担当者ごとに何をいつ使ったのか使用表に反映させたいのですが・・ その関数も教えて頂きたいです。 パソコンの用語などがわからず・・うまく伝わっているかわかりませんが よろしくお願いします。

  • エクセルの関数について

    一つのセルに二つの計算式を入れる場合には、どうすればよいでしょうか。エクセルで商品の在庫管理表を作成したく、入荷を記入する列と、出荷を記入する列、在庫数の列を設け、在庫数の列に、入出荷の自動計算が入るようにしたいと思っております。IF関数を使ってみたのですが、うまくできず、どなかた教えていただけますようお願いいたします。

このQ&Aのポイント
  • プラスチックのメガネフレームにある眉間部分のバリをキレイに取り除く方法を教えてください。
  • メガネフレームのバリ取りにはどのような方法があるのでしょうか?
  • バリがあるメガネフレームをキレイに取り除くためのヒントをお教えください。
回答を見る

専門家に質問してみよう