web-dev-qa-db-fra.com

Excel Boucle dans les lignes et copie les valeurs des cellules dans une autre feuille de calcul

J'ai du mal à obtenir le résultat souhaité pour mon macro.

Intention:

J'ai une liste de données dans sheets(input).column A (le nombre de lignes qui a une valeur variera et j'ai donc créé une boucle qui exécutera la macro jusqu'à ce que la cellule active soit vide).

Ma macro commence à partir de Range(A2) et s'étend jusqu'en bas de la colonne A, elle ne s'arrête que lorsqu'elle atteint une ligne vierge

Le résultat souhaité pour la macro sera de commencer à copier la valeur de la cellule dans sheet(input).Range(A2) la coller dans sheet(mywork).Range(B2:B6).

Par exemple, si "Peter" était la valeur dans la cellule sheet(input),range(A2) alors lorsque marco s'exécute et collez la valeur dans sheet(mywork) range(B2:B6). la plage B2:B6 reflétera "Peter"

Ensuite, les macros rebouclent sur la feuille (entrée) et copient la valeur de cellule suivante et la collent dans range(B7:B10)

Exemple: "Dave" était la valeur dans sheet(input) Range(A3), puis "Dave" sera collé dans les 4 lignes suivantes dans sheet(mywork).Range(B7:B10). B7:B10 Reflètera "Dave"

Répéter à nouveau le même processus revient à la feuille (entrée) cette fois range(A4), copie la valeur va à la feuille (mon travail) et collez-la dans B11:B15.

Fondamentalement, le processus se répète ....

La macro termine le lorsque la cellule active dans sheet(input) column A est vide.

Sub playmacro()
    Dim xxx As Long, yyy As Long
    ThisWorkbook.Sheets("Input").Range("A2").Activate
    Do While ActiveCell.Value <> ""
        DoEvents
        ActiveCell.Copy
        For xxx = 2 To 350 Step 4
            yyy = xxx + 3
            Worksheets("mywork").Activate 
            With ActiveSheet
                .Range(Cells(xxx, 2), Cells(yyy, 2)).PasteSpecial xlPasteValues
            End With
        Next xxx
        ThisWorkbook.Sheets("Input").Select
        ActiveCell.Offset(1, 0).Activate
    Loop
    Application.ScreenUpdating = True
End Sub
5
user2451335
Private Sub CommandButton1_Click() 

Dim Z As Long 
Dim Cellidx As Range 
Dim NextRow As Long 
Dim Rng As Range 
Dim SrcWks As Worksheet 
Dim DataWks As Worksheet 
Z = 1 
Set SrcWks = Worksheets("Sheet1") 
Set DataWks = Worksheets("Sheet2") 
Set Rng = EntryWks.Range("B6:ad6") 

NextRow = DataWks.UsedRange.Rows.Count 
NextRow = IIf(NextRow = 1, 1, NextRow + 1) 

For Each RA In Rng.Areas 
    For Each Cellidx In RA 
        Z = Z + 1 
        DataWks.Cells(NextRow, Z) = Cellidx 
    Next Cellidx 
Next RA 
End Sub

Alternativement

Worksheets("Sheet2").Range("P2").Value = Worksheets("Sheet1").Range("L10") 

Ceci est un CopynPaste - Méthode

Sub CopyDataToPlan()

Dim LDate As String
Dim LColumn As Integer
Dim LFound As Boolean

On Error GoTo Err_Execute

'Retrieve date value to search for
LDate = Sheets("Rolling Plan").Range("B4").Value

Sheets("Plan").Select

'Start at column B
LColumn = 2
LFound = False

While LFound = False

  'Encountered blank cell in row 2, terminate search
  If Len(Cells(2, LColumn)) = 0 Then
     MsgBox "No matching date was found."
     Exit Sub

  'Found match in row 2
  ElseIf Cells(2, LColumn) = LDate Then

     'Select values to copy from "Rolling Plan" sheet
     Sheets("Rolling Plan").Select
     Range("B5:H6").Select
     Selection.Copy

     'Paste onto "Plan" sheet
     Sheets("Plan").Select
     Cells(3, LColumn).Select
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
     False, Transpose:=False

     LFound = True
     MsgBox "The data has been successfully copied."

     'Continue searching
      Else
         LColumn = LColumn + 1
      End If

   Wend

   Exit Sub

Err_Execute:
  MsgBox "An error occurred."

End Sub

Et il pourrait y avoir des méthodes qui font cela dans Excel.

6
user2432923