こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

子部品の実際の使用数量を求める方法

お世話になります.

Excel 上に,添付資料のような多段階の部品表が用意されています.
各列に,
[階層の深さ][部品番号][使用数量][単位]
が記入されています.
各行に入力されている[使用数量]は,親部品に対する使用数量です.
ここで,各子部品の実際の使用数量を知るためには,親部品の使用数量と各子部品の使用数量とを掛け合わせて求めることになるのですが,それを自動処理する方法が思い付かず,お知恵を拝借いたしたく.
よろしくお願いします.

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2008-12-25 23:48:28

QNo.4583394

すぐに回答ほしいです

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

こんな具合でしょう
Sub m()
  Dim r As Range, n As Integer, m As Integer
  ' 表の左肩がA1セル以外の場合は Range("A1")を変更してください
  ' データ範囲の取得
  Set r = Range("A1").CurrentRegion
  ' 1番目の個数の転記
  r.Cells(2, r.Columns.Count).Offset(0, 1) = r.Cells(2, 3)
  For n = 3 To r.Rows.Count
    For m = n - 1 To 2 Step -1
      If r.Cells(m, 1) = r.Cells(n, 1) - 1 Then
        ' 親部品が見つかった
        ' 親部品の個数と自身の個数の乗算
   r.Cells(n, 5) = r.Cells(n, 3) * r.Cells(m, 4)
        Exit For
      End If
    Next
  Next
End Sub

数式でやるなら配列数式になるでしょう
階層1の行には =C2
階層2以上行には
=C3*INDEX($D$1:D2,MAX(ROW($D$2:D2)*($A$2:A2=A3-1)))
と入力して SHIFT + CTRL + ENTER
この数式をコピーして 次の行から最終行までを選択して貼り付け
といった具合でしょう

投稿日時 - 2008-12-27 02:00:30

お礼

redfox63 さん,おはようございます.
どうもありがとうございました.
最初,うまく動いていないようでしたが,
> r.Cells(n, 5) = r.Cells(n, 3) * r.Cells(m, 4)
を,
r.Cells(n, 5) = r.Cells(n, 3) * r.Cells(m, 3)
としたところ,乗算の結果も正しくなりました.

For ... Next 文で, Step 値を負の値にすることで,こんなに便利になるとは驚きました.

さらに VBA ではなく配列数式を使った解決法までご指南いただきまして,どうもありがとうございました.

おかげさまで私もようやく一年を締めくくれそうです.
皆さん,よいお年をお迎え下さい.

投稿日時 - 2008-12-28 07:57:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

「実際の使用数」を求める定義が今一つ不明な感じです。

親-子の関係はどのように決まっていて、そこからどの値を基に計算されるのか。。。?

投稿日時 - 2008-12-26 06:11:33

補足

言葉足らずで申し訳ないです.
親-子の関係について:
ある子部品から見て上の行に自分よりも小さい数字の階層番号を持つ部品が見つかったら,それが自分の親,という法則で,階層番号[1]が出てきたらそれより小さい値はないので終了,ということです.

値(実際の使用数)は,自分自身の使用数量と,自分の親,さらにその親...の使用数量を掛け合わせた結果得られた値です.

投稿日時 - 2008-12-26 13:42:17

あなたにオススメの質問