2 votes

Ms Excel copier et coller les données dupliquées par x

J'ai Data A dans Microsoft Excel.

Ce que je veux faire, c'est copier le contenu de ces données et le coller en le multipliant par X.

Disons que X est 3.

Le nombre réel de X est énorme, donc l'automatisation est vraiment nécessaire ici au lieu de copier et coller des centaines de fois.

enter image description here

0 votes

Il s'agit d'une duplication, pas d'une multiplication

0 votes

Salut @user11392987 ,, vérifiez mon post ci-dessous, j'ai résolu le problème.

2voto

Rajesh Sinha Points 8611

Peu de valeur d'aide avec INDIRECT La fonction de feuille de calcul résout le problème :

Situation 1 :

enter image description here

Comment cela fonctionne :

  • Mettre la valeur désirée dans la cellule G2 indique le nombre de fois que vous souhaitez répéter un ensemble de données.
  • Formule de compteur de rangs dans une cellule G3 :

=COUNTA(F2:F4)*G2

  • Formule finale dans la cellule H2 :

    =IF(ROW(H2)>G$3+1,"",IF(ISBLANK(INDIRECT("F"&ROW(F2))),INDIRECT("H"&(ROWS($F$2:F2)-(COUNTA(F:F)-2))),F2))

N.B.

  • Remplissez la formule jusqu'à quelques rangées supplémentaires.

Situation 2 :

enter image description here

N.B.

  • Dès que vous changez la valeur dans la cellule G2 pour répéter un ensemble de données n times la formule s'ajustera pour donner le résultat suivant column H .
  • Vous pouvez ajuster les références de cellule dans la formule si nécessaire.

2voto

Justin Doward Points 1005

Vous pouvez essayer ce code. Lien vers un bouton sur la page, il suppose que l'entrée est de A2 vers le bas et la sortie ira de C2 vers le bas sur la feuille 1 (modifier en fonction).

Sub Duplicate()
Application.ScreenUpdating = False

Dim ws As Worksheet: Set ws = Sheet1
Dim MyCRnge As Range, c As Range
Dim MyX As String
Dim MyArr() As Variant
Dim i As Long, x As Long

Set MyCRnge = ws.Range(ws.Cells(2, 1), ws.Cells(ws.Cells(2, 1).End(xlDown).Row, 1))

MyX = InputBox("Give me a number", "My Duplicator")
If Not IsNumeric(MyX) Then Exit Sub
MyX = CLng(MyX)

ReDim MyArr(MyX * MyCRnge.Rows.Count)
x = 1
For i = LBound(MyArr) To UBound(MyArr) - 1

    MyArr(i) = MyCRnge(x, 1)
    If x = MyCRnge.Rows.Count Then
    x = 1
    Else
    x = x + 1
    End If

Next i

ws.Range(ws.Cells(2, 3), ws.Cells((MyX * MyCRnge.Rows.Count) + 1, 3)) = Application.Transpose(MyArr)

End Sub

0 votes

Je viens de le mettre à jour pour que la valeur x s'adapte à la taille de votre plage plutôt que de rester bloquée sur 3, désolé de l'avoir manqué la première fois que j'ai posté.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X