9
votes

Comment boucler des colonnes de rangées dans Excel VBA Macro

Bonjour, j'essaie de créer une macro qui a une boucle qui copie une fonction de la colonne 1 (Vol) et une autre fonction sur la colonne 2 (capacité) pour chaque station. C'est ce que j'ai jusqu'à présent: strong> xxx pré>

L'image de ce que je veux est ci-dessous: strong> Vous pouvez voir que j'ai copié manuellement et collé mon deux fonctions dans chaque colonne. J'ai juste besoin d'une macro qui peut boucler à travers elle. P>

text alt p>

La fonction que je veux être en boucle dans la colonne Vol pour chaque station est la suivante: strong> p> xxx pré>

la fonction Je veux être en boucle de la colonne de capacité de chaque station est la suivante: strong> p> xxx pré>

pourrait-il aider? Merci! P>

update strong> p>

**** Comment puis-je faire fonctionner la boucle automatiquement sans avoir à entrer manuellement la formule dans les deux premières cellules et Cliquez sur Macro?
Aussi comment puis-je faire courir la boucle à travers toutes les colonnes / lignes? (horizontiquement) **** p>

J'ai inclus deux coups d'écran pour montrer ce que je veux dire. Vous trouverez ci-dessous mon code actuel. Texte alt Texte alt Merci! P>

    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


2 commentaires

@ Techgirl09, si vous suivez toujours cette question, je sais qu'il y a un moyen plus facile de le faire. 2 questions: est la gamme que la formule est copiée dans toujours la même (c'est-à-dire que vous pouvez en faire une plage nommée)? Et voulez-vous que cela déclenche sur l'activation de la feuille, ou autre chose?


On dirait que Kevin vous a envoyé un email pendant que vous prenez la capture d'écran, assurez-vous de lui répondre.


4 Réponses :


1
votes

Essayez ceci:

Créez une macro avec la chose suivante: xxx

Cette macro particulière copiera la cellule actuelle (placez votre curseur dans la cellule Vol vous souhaite copier) sur une ligne, puis copiez la cellule de capuchon également.

Ceci n'est qu'une seule boucle afin que vous puissiez automatiser la copie volée et le capuchon de votre cellule active actuelle (où votre curseur est) à basse 1 rangée.

Il suffit de le mettre à l'intérieur d'une déclaration de boucle pour le faire x nombre de fois. comme: xxx


1 commentaires

MERCI! Je l'ai travaillé. Maintenant, j'ai besoin de la boucle pour courir jusqu'à ce que ma colonne latérale gauche (plage de date) soit vide. Je verrai comment je peux le faire - si quelqu'un peut saisir - apprécierait grandement.



6
votes

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


2 commentaires

Merci - qui a copié et collé ma formule à travers les cellules, mais pour que cela puisse faire cela, je dois entrer manuellement la formule dans les deux premières cellules, puis cliquez sur Macro. Y a-t-il un moyen de le rendre complètement automatique? Par exemple, si ma feuille est complètement vide comme dans la troisième station, comment la formule peut-elle être automatiquement remplie?


Avec Justhe Code ici, la formule est écrite sur la propriété de formule, elle n'est pas copiée. Il n'est pas nécessaire que vous puissiez écrire la formule dans les deux premières cellules.



0
votes

Je recommanderais l'objet de la gamme Autofill a> Méthode pour ceci:

'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")


0 commentaires

1
votes

Celui-ci est similaire à la solution de @ Wilhelm. La boucle automate basée sur une plage créée en évaluant la colonne Date peuplée. Cela a été giflé ensemble basé strictement sur la conversation ici et des captures d'écran.

Veuillez noter que cela suppose que les en-têtes seront toujours sur la même rangée (rangée 8). Changer la première ligne de données (déplacement de l'en-tête haut / bas) entraînera la rupture de la plage de gamme, à moins que vous n'ayez modifié le bloc de plage à prendre dans la ligne d'en-tête de manière dynamique. Les autres hypothèses incluent que les en-têtes de colonne de formule Vol et de capacité sont nommés "Vol" et "Cap" respectivement. P>

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


0 commentaires