2016-11-23 5 views
0

셀 수 (4, "D")와 셀 수 (6, "D")를 기반으로 만들어진 하나의 동적 테이블이 있습니다. 행. 열 번호는 고정되어 B에서 G로 정의됩니다. 데이터가있는 첫 번째 행은 13 행입니다.동적 범위를 사용하는 수식으로 여러 셀을 자동 채우는 방법

열 B에 다음을 소개하는 수식 deltaMassFormula를 쓰고 싶습니다. deltaMassFormula = D13 * (G13 - F13) 및 (- F13 G13)

E14 = D14 * COUNTROWS 행의 총 수 (승산 변수) 예컨대

을 달할 때까지 자동으로이 경우 승산 = 4 다음

E13 = D13의 * 아래로 채운다 (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

이 솔루션을 사용하는 경우 "value"대신 "value2"를 확인하고 사용하는 것이 좋습니다. (이들 사이의 차이점은 그냥 google ...) – tretom

+0

Value 대신 Value2를 사용하여 계산 시간에 차이가 있습니까? 나는 차이점을 찾아 갔다. 그리고 그것은 Value2에서 주로 Date 또는 Currency를 포함하지 않는다. 변수 유형을 정의하기 때문에이 솔루션에 어떤 영향을 줍니까? – 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))의 수식 속성을 설정해야합니다. 셀 (i , "B") - 방정식의 오른쪽에 구축 된 문자열에 – tretom

+0

이해합니다. 고마워요. – vbalearner