Bonjour, j'essaie de créer une macro comportant une boucle qui copie une fonction dans la colonne 1 (VOL) et une autre dans la colonne 2 (CAPACITY) pour chaque station. C'est ce que j'ai jusqu'à présent:
Sub TieOut()
Dim i As Integer
Dim j As Integer
For i = 1 To 3
For j = 1 To 3
Worksheets("TieOut").Cells(i, j).Value = "'=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A9,"m/dd/yyyy"),'ZaiNet Data'!$C$1:$C$39038,0), 4)"
Next j
Next i
End Sub
L'image de ce que je veux est ci-dessous: Vous pouvez voir que j'ai copié et collé manuellement mes deux fonctions dans chaque colonne. J'ai juste besoin d'une macro qui puisse la parcourir en boucle.
alt text http://i26.tinypic.com/nz4lfn.jpg
La fonction que je veux lire en boucle dans la colonne VOL pour chaque station est:
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 4)
La fonction que je veux lire en boucle dans la colonne CAPACITY pour chaque station est:
=INDEX('ZaiNet Data'!$A$1:$H$39038,MATCH('INDEX-MATCH'!Z$7&TEXT('INDEX-MATCH'!$A438,"M/DD/YYYY"),'ZaiNet Data'!$C$1:$C$39038,0), 5)
Quelqu'un pourrait-il s'il vous plaît aider? Je vous remercie!
METTRE À JOUR
**** Comment faire en sorte que la boucle s'exécute automatiquement sans avoir à entrer manuellement la formule dans les deux premières cellules et à cliquer sur macro?
De plus, comment puis-je faire en sorte que la boucle parcourt toutes les colonnes/lignes? (horizontalement) ****
J'ai inclus deux captures d'écran pour montrer ce que je veux dire. Vous trouverez ci-dessous le code actuel . texte alt. Http://i26.tinypic.com/i3gw9g.jpgtexte alt. Http://i29.tinypic.com/8izl.jpg Merci!
Sub Loop3()
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
Dim i As Integer
Dim j As Integer
With Worksheets("Loop")
i = 1
Do Until .Cells(10, i).Value = "blank"
For j = 1 To 10
.Cells(j, i).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),4)"
.Cells(j, i + 1).Formula = "=INDEX('ZAINET DATA'!$A$1:$H$39038,MATCH(Loop!E$7&TEXT(Loop!$A9,""M/D/YYYY""),'ZAINET DATA'!$C$1:$C$39038,0),5)"
Next j
i = i + 2
Loop
End With
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
End Sub
Voici ma suggestion:
Dim i As integer, j as integer
With Worksheets("TimeOut")
i = 26
Do Until .Cells(8, i).Value = ""
For j = 9 to 100 ' I do not know how many rows you will need it.'
.Cells(j, i).Formula = "YourVolFormulaHere"
.Cells(j, i + 1).Formula = "YourCapFormulaHere"
Next j
i = i + 2
Loop
End With
Essaye ça:
Créez une macro avec la chose suivante à l'intérieur:
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
Cette macro particulière copiera la cellule actuelle (placez votre curseur dans la cellule VOL que vous souhaitez copier) sur une ligne, puis copiez également la cellule CAP.
Il ne s’agit que d’une boucle unique. Vous pouvez donc automatiser la copie de VOL et CAP de l’emplacement de votre cellule active actuelle (où se trouve votre curseur) vers le bas d’une ligne.
Il suffit de le placer dans une instruction de boucle For pour le faire x nombre de fois ..__ comme:
For i = 1 to 100 'Do this 100 times
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(-1, 1).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
ActiveCell.Offset(0, -1).Select
Next i
Celui-ci est similaire à la solution de @ Wilhelm. La boucle s'automatise en fonction d'une plage créée en évaluant la colonne de date renseignée. Cela a été giflé ensemble strictement sur la base de la conversation et des captures d'écran.
Remarque: ceci suppose que les en-têtes seront toujours sur la même ligne (ligne 8). Si vous modifiez la première ligne de données (en déplaçant l'en-tête vers le haut ou le bas), l'automatisation de la plage sera interrompue à moins que vous ne modifiiez le bloc de la plage pour qu'il prenne la ligne d'en-tête de manière dynamique. D'autres hypothèses incluent que les en-têtes de colonne des formules VOL et CAPACITY sont respectivement nommés "Vol" et "Cap".
Sub Loop3()
Dim dtCnt As Long
Dim rng As Range
Dim frmlas() As String
Application.ScreenUpdating = False
'The following code block sets up the formula output range
dtCnt = Sheets("Loop").Range("A1048576").End(xlUp).Row 'lowest date column populated
endHead = Sheets("Loop").Range("XFD8").End(xlToLeft).Column 'right most header populated
Set rng = Sheets("Loop").Range(Cells(9, 2), Cells(dtCnt, endHead)) 'assigns range for automation
ReDim frmlas(1) 'array assigned to formula strings
'VOL column formula
frmlas(0) = "VOL FORMULA"
'CAPACITY column formula
frmlas(1) = "CAP FORMULA"
For i = 1 To rng.Columns.count
If rng(0, i).Value = "Vol" Then 'checks for volume formula column
For j = 1 To rng.Rows.count
rng(j, i).Formula= frmlas(0) 'inserts volume formula
Next j
ElseIf rng(0, i).Value = "Cap" Then 'checks for capacity formula column
For j = 1 To rng.Rows.count
rng(j, i).Formula = frmlas(1) 'inserts capacity formula
Next j
End If
Next i
Application.ScreenUpdating = True
End Sub
Je recommanderais la méthode AutoFillde l'objet Range pour cela:
rngSource.AutoFill Destination:=rngDest
Spécifiez la plage source contenant les valeurs ou les formules que vous souhaitez renseigner, ainsi que la plage Destination en tant que plage complète dans laquelle vous souhaitez que les cellules soient remplies. La plage de destination doit inclure la plage source. Vous pouvez remplir aussi bien que vers le bas.
Cela fonctionne exactement de la même manière que si vous "glissiez" manuellement les cellules du coin avec la souris; Les formules absolues et relatives fonctionnent comme prévu.
Voici un exemple:
'Set some example values'
Range("A1").Value = "1"
Range("B1").Formula = "=NOW()"
Range("C1").Formula = "=B1+A1"
'AutoFill the values / formulas to row 20'
Range("A1:C1").AutoFill Destination:=Range("A1:C20")
J'espère que cela t'aides.