2016-11-23 14 views
0

セル(4、 "D")とセル(6、 "D")の乗算に基づいて作成される1つのダイナミックテーブルがあります。行。列番号は固定され、BからGまで定義されます。データの最初の行は13行目です。ダイナミックレンジを使用して数式で複数のセルをオートフィルする方法

列BにdeltaMassFormula = D13 *(G13〜F13)を導入する式deltaMassFormulaを記述します。

E14 = D14 * - 乗算= 4次に

E13 = D13×(F13 G13)場合COUNTROWSは、例えば行の総数(乗算変数)

に等しくなるまで自動的にダウン充填します(G14-F14)

E15 = D15の*(G15 - F15)

E16 = D16の*(G16 - F16)

マイコード

Dim StartCellM As Range  
Dim lastRow As Long  
Dim deltaMassFormula As Integer  
Dim multiplication As Integer 

multiplication = Cells(4, "D").Value * Cells(6, "D").Value  
countRows = multiplication - 1 

Set StartCellM = Cells(13, "E")  
Set lastRow = Cells(13, "E") + countRows 

deltaMassFormula = Cells(13, "D") * (Cells(13, "G") - Cells(13, "F")) 

With ThisWorkbook.Sheets(1)  
    .Range("E13").Formula = deltaMassFormula  
    .Range("E13:E" & lastRow).FillDown  
End With 

誰もが私を助けることができますか?

+0

あなたが投稿したコードで発生しますどのような問題? –

+0

問題は、コードがE13以下のセルを埋めるものではないということです。 – vbalearner

答えて

0

実際の数式を範囲に入力し、値で置き換えます。 lastrowを長めに変更したので、他の行でも正しく使用でき、範囲から開始行が引かれました。

Dim StartCellM As Range 
Dim lastRow As Long 
Dim multiplication As Integer 

With ThisWorkbook.Sheets(1) 
    multiplication = .Range("D4").Value * .Range("D6").Value 
    countRows = multiplication - 1 

    Set StartCellM = .Range("E13") 
    lastRow = StartCellM.Row + countRows 

    .Range("E13:E" & lastRow).Formula = "=D13*(G13-F13)" 
    .Range("E13:E" & lastRow).Value = .Range("E13:E" & lastRow).Value 'Remove this line to keep formula 
End With 

あなたが開始セルがオンになっている行を変更して、このコードは、それをハードコーディングするのではなく、式にStartCellMから行を使用しますので、一致する式の行を変更しない場合は式が壊れます。

Dim StartCellM As Range 
Dim lastRow As Long, startRow As Long 
Dim multiplication As Integer 

With ThisWorkbook.Sheets(1) 
    multiplication = .Range("D4").Value * .Range("D6").Value 
    countRows = multiplication - 1 

    Set StartCellM = .Range("E13") 

    startRow = StartCellM.Row 
    lastRow = startRow + countRows 

    .Range("E" & startRow & ":E" & lastRow).Formula = "=D" & startRow & "*(G" & startRow & "-F" & startRow & ")" 
    .Range("E" & startRow & ":E" & lastRow).Value = .Range("E" & startRow & ":E" & lastRow).Value 'Remove this line to keep formula 
End With 

それが正しいシートからすべての値を引っ張ってくるので、私はまたWith内のすべてのものを移動しました。

+0

ありがとうtjb1。それは完全に動作します。私は両方のコードを比較して、欠けていたものを見てみましょう。 – vbalearner

+0

このソリューションを使用する場合は、「値」の代わりに「値2」をチェックすることをおすすめします。 (それらの違いについては、ちょうどGoogle ...) – tretom

+0

Valueの代わりにValue2を使用して計算時間に違いはありますか?私は違いを検索し、主にValue2に日付や通貨は含まれていません。私は可変型を定義しているので、このソリューションではどのように影響しますか? – vbalearner

0

それは式の列Bを満たす:

Sub filler() 

    Dim i As Long 
    Dim startRow As Long 
    Dim lastRow As Long 
    Dim multiplication As Integer 

    multiplication = Cells(4, 4).Value * Cells(6, 4).Value 

    startRow = 13 
    lastRow = startRow + multiplication - 1 

    For i = startRow To lastRow 
     Cells(i, 2).Formula = "=D" & i & "*(G" & i & "-F" & i & ")" 
    Next i 

End Sub 
+0

tretomでは、最初に開始セルの数式を定義し、次にセルの位置を右に移動していますか?私はプログラミングでは本当に緑です。私はvbaで始まっています。 – vbalearner

+0

ああ、申し訳ありませんが、あなたのdeltaMassFormulaを消去するのを忘れてしまいました。私はそれを使用しませんでした。最初の行と最後の行を伝えてから、行をループし、与えられたセル(この場合はcell(i、2))のformulaプロパティを設定する必要があります。 、 "B") - 方程式の右辺に構築された文字列に – tretom

+0

を理解しています。ありがとう、tretom。 – vbalearner

関連する問題