製造業です。大きなアッセンブリの設計データから使われている部品の親子関係レベルと員数を出力できるのですが1つ上の親が1つの場合の個数しか子の個数がでてきません。
例えば一番上のレベル1を組み立てるために
1.1は1つ
1.1.1は2つ、
まではいいのですが1.1.1.1は1.1.1が2個必要なら以下すべて2倍の個数になってほしいのですが1.1.1が1個の場合の個数しか出力されません。
さらにその下1.1.1.2を構成する1.1.1.2.1と1.1.1.2.2は1.1.1.2の必要数4を×した数になります。孫に行くほどその親、その親の個数がかかってくるのです
下のリストの「必要数」が導き出したい数値です
レベル | 員数 | 必要数 |
---|---|---|
1 | 1 | 1 |
1.1 | 1 | 1 |
1.1.1 | 2 | 2 |
1.1.1.1 | 1 | 2 |
1.1.1.2 | 2 | 4 |
1.1.1.2.1 | 3 | 12 |
1.1.1.2.2 | 4 | 16 |
1.1.1.3 | 1 | 2 |
1.1.1.3.1 | 2 | 4 |
1.1.1.3.1.1 | 2 | 8 |
1.1.1.3.1.2 | 2 | 8 |
1.1.1.3.1.2.1 | 3 | 24 |
1.1.1.3.1.2.2 | 2 | 16 |
1.1.1.4 | 2 | 4 |
思い描く仕組みとしては一列目の”.”の数を数えて上下を比べ、増えるか減るかした場合直近の上方の”.”が-1個したの時の必要数を×(かける)、さらにその下のセルの”.”の数が変わらなかったら同じ親の必要数を×(かける)し続ける…
Sub innzuu()
Dim LstRow1 As Long Dim i As Long, k As Long, m As Long, n As Long, o As Long Dim Lv As Variant Dim Lv2 As Variant Dim Lv3 As Variant LstRow1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To LstRow1 Step 1 'Lv変換 Lv = Split(Sheet1.Cells(i, 1), ".") '.をいくつか数えて Lv2 = Split(Sheet1.Cells(i + 1, 1), ".") Lv3 = Split(Sheet1.Cells(i + 2, 1), ".") k = UBound(Lv) '数値化してkに代入 m = UBound(Lv2) n = UBound(Lv3) o = Cells(i + 1, 2).Value If k < m Then Do While m = n Cells(i + 1, 3).Value = Cells(i, 1).Value * o Loop End If Next i
End Sub
こんなかんじで、ちんぷんかんぷんしながらただ今検討中です。
初心者の自分ではかなり時間を要するのが目にみえているので同時にテラテイルに質問しておこうということで投稿いたしました。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
hatena19様
エラーが出てしまうところを抜粋してみました。尚、2.9の下が2.1となってしまっていますがこれは2.10の0が消えてしまったためで、できればこのケースは処理せず対応したいです。()内の数が求めたい結果です。
あと、余談ですがこちらは実際は791行で試したのですが最後の6行が空欄になっていました…がこれはまた別の話ですかね。ここまでデータを書き込むのは大変なので(汗)
レベル | 員数 | 必要数 |
---|---|---|
1 | 1 | 1 |
1.1 | 1 | 1 |
2 | 1 | 1 |
2.1 | 1 | 3 |
2.1.1 | 1 | 1(3) |
2.1.2 | 1 | 1(3) |
2.1.3 | 3 | 3(9) |
2.2 | 1 | 1 |
2.3 | 1 | 1 |
2.4 | 2 | 2 |
2.5 | 1 | 1 |
2.6 | 1 | 1 |
2.7 | 1 | 1 |
2.8 | 1 | 1 |
2.9 | 3 | 3 |
2.1 | 3 | 4(3) |
2.11 | 4 | 2(4) |
2.12 | 2 | 2 |
3 | 2 | 8(2) |
3.1 | 1 | 2 |
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/20 13:22
2022/06/21 00:17
2022/06/21 03:33
2022/06/21 04:28
2022/06/21 04:43
2022/06/21 05:52