質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

上下セルをくらべテキストに含まれる"."の数の増減で処理を分岐する

kumiko
kumiko

総合スコア42

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

2回答

0評価

0クリップ

257閲覧

投稿2022/06/20 02:42

編集2022/06/21 14:52

製造業です。大きなアッセンブリの設計データから使われている部品の親子関係レベルと員数を出力できるのですが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を×した数になります。孫に行くほどその親、その親の個数がかかってくるのです

下のリストの「必要数」が導き出したい数値です

レベル員数必要数
111
1.111
1.1.122
1.1.1.112
1.1.1.224
1.1.1.2.1312
1.1.1.2.2416
1.1.1.312
1.1.1.3.124
1.1.1.3.1.128
1.1.1.3.1.228
1.1.1.3.1.2.1324
1.1.1.3.1.2.2216
1.1.1.424

思い描く仕組みとしては一列目の”.”の数を数えて上下を比べ、増えるか減るかした場合直近の上方の”.”が-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行が空欄になっていました…がこれはまた別の話ですかね。ここまでデータを書き込むのは大変なので(汗)

レベル員数必要数
111
1.111
211
2.113
2.1.111(3)
2.1.211(3)
2.1.333(9)
2.211
2.311
2.422
2.511
2.611
2.711
2.811
2.933
2.134(3)
2.1142(4)
2.1222
328(2)
3.112

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。