エクセル2013を使用しています。
Xさんは商品Aを1個、商品Cを2個
Yさんは商品Bを2個、商品Cを1個
商品A 商品B 商品C 合計金額
X 1 0 2 ?
Y 0 2 1 ?
Xさんの合計金額セル(E2)に
=IF(ISNUMBER(B2),B2*100,"0")+IF(ISNUMBER(C2),C2*150,"0")+IF(ISNUMBER(D2),D2*200,"0")
としたのですが、単価が変わるたびにすべての数字を変更しなければいけません。
そこで「商品マスタ」みたいなシートを用意しました。
商品名 単価
商品A 100
商品B 150
商品C 200
この時の合計金額を計算する関数って有るのでしょうか?
商品マスタから取ってくるのは「VLOOKUP」で、IF関数と複合となるとは思うのですが・・・
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんばんは!
今回の質問の場合は3つだけの条件なので関数でやってみました。
↓の画像のような配置だとするとE2セルに
=VLOOKUP(B$1,G:H,2,0)*B2+VLOOKUP(C$1,G:H,2,0)*C2+VLOOKUP(D$1,G:H,2,0)*D2
という数式を入れフィルハンドルで下へコピーしています。
※ 今後商品数がもっと増える場合、関数でやると
商品数だけVLOOKUP関数の足し算になりダラダラと長い数式になってしまいますので、
別案として「ユーザー定義関数」(この質問に関する関数)を作ってみてはどうでしょうか?
Alt+F11キー → メニュー → 挿入 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面をとじて)
通常のワークシート関数のような使い方をします。
Function goukei(myRng As Range, myArea As Range) 'この行から//
Dim c As Range, r As Range, myVal As Variant
For Each c In myRng
Set r = myArea.Find(what:=Cells(1, c.Column), LookIn:=xlValues, lookat:=xlWhole)
If Not r Is Nothing Then
myVal = myVal + c * r.Offset(, 1)
End If
Next c
goukei = myVal
End Function 'この行まで//
以上の下準備ができた状態で
E2セルを選択 → 数式バーの左の「fx」をクリック → 「関数の分類」の右側▼をクリック → 「ユーザー定義」を選択
先ほどのユーザー定義関数が選択されているはずですので「OK」
「Myrng」の窓で画像配置だとB2~D2を選択
「myArea」の窓でG・H列を選択(列すべてを選択しても構いません)
これで数式バーの表示が
=goukei(B2:D2,G:H)
となり、結果が表示されているはずです。
あとはフィルハンドルで下へコピーしてみてください。
※ 商品名は必ず1行目にある!という前提のコードです。
これで商品数が極端に増えても同じ数式で対応できるはずです。m(_ _)m
アドバイスありがとうございます。
思い通りのことが出来ました。\(^o^)/
VBAは少しかじったのですが、ユーザー定義関数は未知の部分でした。
まだまだ勉強不足ですね(^^;)
ありがとうございましたm(__)m
No.3
- 回答日時:
私ならば、
商品A 商品B 商品C 合計金額
単価 100 150 200
X 1 0 2 100 0 400 500
Y 0 2 1 0 300 200 500
のように、単価の行、小計の列を追加して合計金額を求めます。
小計と合計の項の式は、
=B$2*B3 =C$2*C3 =D$2*D3 =SUM(E3:G3)
=B$2*B4 =C$2*C4 =D$2*D4 =SUM(E4:G4)
となります。
単価が変わった場合、追加した単価の行の値を変えるだけで再計算してくれます。
参考まで。
アドバイスありがとうございます。
一覧の表として見た時に小計がうるさくなりそうで他の方法を考えていました。(^^;)
ありがとうございましたm(__)m
No.2
- 回答日時:
No.1です。
前回のVBAのコードの操作で一部説明が抜けていました。
>Alt+F11キー → メニュー → 挿入 → VBE画面のカーソルが・・・
は
>Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが・・・
です。
どうも失礼しました。m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの質問です。 F列からL...
-
作成した数式を値として表示し...
-
エクセルの文字が途中から消える
-
条件付き書式設定で罫線を引き...
-
Excel関数について教えてくださ...
-
Excelの警告について
-
Excel関数について教えてくださ...
-
ワークシートに出現したこの画...
-
エクセルのセル内に分数などの...
-
タイムスタンプとテキストから...
-
EXCELの散布図で日付が1900年に...
-
エクセルでファイルの最終更新...
-
シートの情報を別のシートへま...
-
マクロの処理が遅くなった
-
エクセルの数式バーのフォント...
-
エクセルの「条件付き書式」を...
-
エクセル日付 文字列の関数がエ...
-
Excelでの文字色
-
Excelの数字の前に入っている空...
-
Excelについて教えてください。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
Excelで数値を時間数に変換する...
-
エクセルの数式バーのフォント...
-
エクセルで数字の組み合わせを...
-
エクセルを使用して、円周率を...
-
Excelで特定の文字列が含まれて...
-
Excel 対象のセルに入力が無い...
-
任意の値が存在する行に名前を...
-
エクセルでファイルの最終更新...
-
index関数の説明をお願いします。
-
条件付き書式でやりたいのですが
-
重複しない値を取り出したい
-
【ExcelVBA】UTF-8(BOM無)でC...
-
【マクロ】マクロが割当てされ...
-
エクセル IF計算式?でしょうか?
-
エクセルで曜日を入れたい
-
表中の指定した条件の文字列を...
-
【Excel】版が同じ事を示す番号...
-
EXCELの散布図で日付が1900年に...
-
Excelについて。Excelに縦1列に...
おすすめ情報