2017-08-31 5 views
0

Ich habe mehrere Spalte von diskontinuierlichen Daten, jede Spalte enthalten einige weiterlesen, die zusammengefasst werden müssen. Also Summierung in verschiedenen Bereichen ist erforderlich. Die Summation wird nur durchgeführt, wenn x größer als 1 ist und sein Wert die Größe des Bereichs definiert (Anzahl der Zeilen, die über der aktiven Zelle ausgewählt werden). "Rng1 = .. address" führte jedoch zu einem anwendungsdefinierten oder objektdefinierten Fehler. Mein Code ist nicht so ordentlich, aber ich bin sicher, dass alle variablen Halte gewünschten Wert, bitte helfen ..Wie Variable interne Variable in Zelle verwenden. Adresse

Sub Dynamic_rowsRangeNumbers() 
Dim rng1 As String, rng2 As String 
Dim nrow As Integer 
Dim x, ncol As Integer 

ThisWorkbook.Worksheets("Sheet5").Activate 
For ncol = 2 To 4 
    For nrow = 3 To 28 
    x = Cells(nrow, 216 + ncol).Value 
    rng1 = Cells(nrow - x + 1, ncol).Address *** run-time error 1004 
    rng2 = ActiveCell.Address 

    'If reference cell has value FZ>=1 Then 
    If (Cells(nrow, 216 + ncol).Value >= 1) Then 
    Cells(nrow, 254 + ncol).Formula = "=sum(" & (rng1) & ":" & (rng2) & ")" 
    End If 
    Next nrow 
Next ncol 
End Sub 
+2

Was ist der Wert von x, wenn es fehlschlägt? – SJR

+1

Wahrscheinlich nicht mit Ihrem Problem verknüpft, aber 'Dim rng1, rng2 As String' deklariert' rng2' nur als 'string', während' rng1' als 'variant' Typ Variable angesehen wird. Sie sollten 'Dim rng1 als String, rng2 als String' schreiben. –

+0

Mein Bauchgefühl ist, dass Sie Ihre' If (Zellen (nrow, 216 + ncol) .Wert> = 1) Then' Anweisung so verschieben, dass sie direkt nach dem 'For steht nrow = 3 bis 28' Aussage kann Dinge reparieren. Selbst wenn es die Dinge nicht repariert, sollte es wahrscheinlich verschoben werden - keine der drei Zeilen zwischen diesen beiden Anweisungen wird benötigt, außer ** innerhalb des "If" -Blocks. (Aber ich denke, Sie könnten die 'x = ...' Zeile dort belassen und dann 'If x> = 1 Then' haben.) – YowE3K

Antwort

0

Sie können keine nicht-numerischen Werte in numerischen Berechnungen verwenden, so prüfen, dass der Wert numerisch ist, bevor Sie alles:

Sub Dynamic_rowsRangeNumbers() 
    Dim rng1 As String, rng2 As String 
    Dim nrow As Long 
    Dim x As Long, ncol As Long 

    With ThisWorkbook.Worksheets("Sheet5") 
     For ncol = 2 To 4 
      For nrow = 3 To 28 
       If IsNumeric(.Cells(nrow, 216 + ncol).Value) Then 
        x = .Cells(nrow, 216 + ncol).Value 
        'If reference cell has value FZ>=1 Then 
        If x >= 1 Then 
         rng1 = .Cells(nrow - x + 1, ncol).Address 
         'This next line seems wrong - you were never moving ActiveCell 
         'rng2 = ActiveCell.Address 
         'I think you wanted 
         rng2 = .Cells(nrow, ncol).Address 

         .Cells(nrow, 254 + ncol).Formula = "=sum(" & rng1 & ":" & rng2 & ")" 
        End If 
       End If 
      Next nrow 
     Next ncol 
    End With 
End Sub 
+0

Danke. Es funktioniert –