2017-01-10 6 views
0

私はユーザーが新しいアセンブリとその重さをテーブルに挿入できるようにするVBAスクリプトを作成しました。挿入されたアセンブリは、2つのレベル(1または2)のいずれかになります。挿入された行がサブアセンブリ(すなわちレベル2)である場合、その位置はより高いレベルのアセンブリの真下にある。私はレベル1の重みをすべてのレベル2の重みの合計に等しくしたいと思います。私はこれを行う最も簡単な方法は、空白のセルを数えて範囲を定義し、次に計算を実行することだと考えています。レベル1のウェイトとレベル2のウェイトの合計との差が0でない場合、この値をレベル1のアセンブリと同じ行にレベル2のウェイトとして挿入します。私はこれがかなり混乱していることを理解していますので、写真を添付し​​て少しだけ説明してみてください。すべてのヘルプは高く評価され:)ここ 未定義の範囲内の空白セルの数を数え、次の列の値を合計する

Excel Sheet Image

はOK

If TextBox_LevelNo.Value = 1 Then 
Cells(NextRow, 6).Value = TextBox_Weight.Value 
Cells(NextRow, 7).Value = TextBox_ExtraWeight.Value 
ElseIf TextBox_LevelNo.Value = 2 Then 
Cells(NextRow, 7).Value = TextBox_Weight.Value 
Cells(NextRow, 8).Value = TextBox_ExtraWeight.Value 
ElseIf TextBox_LevelNo.Value = 3 Then 
Cells(NextRow, 8).Value = TextBox_Weight.Value 
End If 
+0

挿入するVBAコードを表示できますか?現時点での値は単にuserfromボックスから来 – EngJon

+0

'場合TextBox_LevelNo.Value = 1個のそして 細胞(NextRow、6).Valueの= TextBox_Weight.Value 細胞(NextRow、7).Valueの= TextBox_ExtraWeight.Value のElseIf TextBox_LevelNo .VALUE = 2個のそして 細胞(NextRow、7).VALUE = TextBox_Weight.Value 細胞(NextRow、8).VALUE = TextBox_ExtraWeight.Value のElseIf TextBox_LevelNo.Value = 3そして 細胞(NextRow、8).VALUE = TextBox_Weight .Value End If' –

+0

よろしくお願いします。あなたはあなたの質問を編集し、そこにコメントされたコードを挿入できますか? – EngJon

答えて

1

(ユーザーフォームから)私は現在の値を挿入するために使用していたコードで、ここではそれが行きます。このマクロを使用します。アセンブリの作業が終わったら実行してください。

コードの説明:それぞれ

  • COL1とCOL2のレベルの列番号に設定されなければならない、
  • 他の変形が必要であってはなりません。列の値を確認するだけの大きな反復です。

これをマクロとして一度だけ実行してください。レベル1のエントリの横にあるすべてのレベル2の列が設定されます。

Sub SumLevelOne() 

Dim col1 As Integer 
Dim col2 As Integer 

col1 = 1 'level 1 column (1 = A) 
col2 = 2 'level 2 column (2 = B) 

Dim i As Integer 
Dim currentLevel1Row As Integer 
currentLevel1Row = -1 
Dim currentLevel1Total As Integer 
currentLevel1Total = 0 
Dim currentLevel2Sum As Integer 
currentLevel2Sum = 0 

Dim LastRow As Integer 
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, col2).End(xlUp).Row 

For i = 1 To LastRow 
    If Cells(i, col1) <> "" Then 'level 1 entry 
     If currentLevel1Row <> -1 Then 'level 1 entry already set 
      'sum up former level 1 entry: 
      Cells(currentLevel1Row, col2) = currentLevel1Total - currentLevel2Sum 
     End If 
     'set new level 1 entry 
     currentLevel1Row = i 
     currentLevel1Total = Cells(i, col1) 
     currentLevel2Sum = 0 
    ElseIf i = LastRow Then 
     If currentLevel1Row <> -1 Then 'level 1 entry already set 
      'sum up former level 1 entry: 
      Cells(currentLevel1Row, col2) = currentLevel1Total - currentLevel2Sum 
     End If 
    Else 
     'sum up level 2 entries 
     If Cells(i, col2) <> "" Then 'level 2 entry here 
      'add this 
      currentLevel2Sum = currentLevel2Sum + Cells(i, col2) 
     End If 
    End If 

Next i 
End Sub 
関連する問題