2017-06-13 3 views
0

Je viens inscrit sur le site et je suis sûr que je peux obtenir de l'aide sur la question ci-dessous (je ne suis pas un expert en VBA) ..VBA - SUMIFS - ligne incrémenter - Erreur 1004

Brièvement, je fais une macro qui calcule une quantité totale (dans la colonne I, pour chaque rangée) basée sur 2 paramètres (colonne A et colonne G). J'utilise une fonction SUMIFS, qui fonctionne très bien pour une cellule. Mais, je voudrais automatiser pour chaque ligne, qui devient difficile pour moi ..

Voici le code qui fonctionne pour la cellule I2:

Sub quantity_aggregated()  
    Dim sht As Worksheet, LastRow As Long, i As Integer  
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row  
    Set sht = ThisWorkbook.Worksheets("JDE_Greece")  
    Range("I2").Formula = "=SUMIFS(H:H,G:G,G2,A:A,A2)"  

Je veux garder cette façon, mais d'intégrer a Pour, en commençant à la rangée 2 et en terminant à la dernière rangée peuplée.

Je pensais (et essayé) au sujet de certains codes ci-dessous, 3 différents (la fin est la même, incrémenter i et fermer la macro):

For i = 2 To LastRow  

'Range("I2").Formula = "=SUMIFS(H:H,G:G,Range(i,7),A:A,Range(i,1)"''  

'Range(i, 9).Value = Application.WorksheetFunction.SumIfs(Range("H:H"), Range("G:G"), Range(i, 7), Range("A:A"), Range(i, 1))' 

'Cells(i, 9).FormulaR1C1 = "=SUMIFS(H:H,G:G, "'  

Next i  
End Sub 

Je comprends le processus, mais pour chacun, il y a un " la plage de méthode de l'objet global a échoué (erreur 1004) "qui apparaît. Je suis sûr que c'est quelque chose à propos de la définition de l'application, l'objet ou quelque chose de connexe, mais ne peut pas le résoudre.

Quelqu'un a-t-il des idées? Ce serait vraiment génial :)

Merci beaucoup à l'avance,

Répondre

1

Vous pouvez simplement appliquer la formule à toute la gamme I. puisque vos références à A2 et G2 sont "relatif", la formule ajustera systématiquement pour chaque rangée dans la gamme.

Dim sht As Worksheet, LastRow As Long 
Set sht = ThisWorkbook.Worksheets("JDE_Greece")  
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row  
sht.Range("I2:I" & LastRow).Formula = "=SUMIFS(H:H,G:G,G2,A:A,A2)" 

Si vous voulez le faire avec une boucle « pour la pratique »,

For i = 2 To LastRow 
    sht.Range("I" & i).Formula = "=SUMIFS(H:H, G:G, G" & i & ", A:A, A" & i & ")" 
Next i 

mais notez que c'est exactement ce qui se passe dans les coulisses de la première forme.

+0

Salut, En effet, cela fonctionne, et c'est certainement plus rapide ... J'ai passé tellement de temps sur cette boucle que j'ai presque oublié les choses simples. Je vous remercie. Mais, par hasard, avez-vous la moindre idée de la raison pour laquelle cette boucle ne fonctionne pas? Et à quoi ressemblerait un simple code si je voulais insérer une boucle (j'aimerais pratiquer). Merci pour votre temps – Jeofbist3

+0

"@ Jeofbist3 avec une boucle la formule serait composée de" "= SUMIFS (H: H, G: G, G" & i & ", A: A, A" & i & ") "' –

+0

Nice !! merci beaucoup :) – Jeofbist3