J'ai un problème sur la colonne A à la colonne B de la colonne B de la colonne A, les deux colonnes ont un nombre de lignes de 2563. Existe-t-il un code VBA pour résoudre ce problème?
J'essaie déjà ce code: < / p> mais il ne peut échanger que la rangée 1 des deux colonnes ... p> p>
4 Réponses :
Vous pouvez les échanger tous par une boucle. Pour votre cas, la boucle devrait aller pour 2563 fois.
Je ne voulais pas claquer votre réponse. J'aurais posté quelque chose comme le vôtre il n'y a pas trop longtemps. J'ai inclus le détail de la raison pour laquelle le mien est plus efficace pour aider les autres à apprendre les valeurs des tableaux. Je souhaite que quelqu'un me ait aidé à comprendre cela plus tôt. Je t'ai donné une uppote.
L'utilisation d'un tableau serait beaucoup plus rapide que la boucle. Dans cet exemple, la colonne A est copiée dans un tableau hold_rng code>. Ensuite, la colonne B est copiée sur la colonne A, puis la matrice est copiée dans la colonne B. Sub SwapCOlumns()
Dim hold_rng() As Variant
Dim rowsToinclude As Long, WS As Worksheet
Set WS = ActiveSheet '<--- make sure this is correct worksheet
rowsToinclude = 2563 '<----- might want to make more dynamic
With WS
hold_rng = .Range("A1:A" & rowsToinclude)
.Range("A1:A" & rowsToinclude).Value = .Range("B1:B" & rowsToinclude).Value
.Range("B1:B" & rowsToinclude).Value = hold_rng
End With
End Sub
juste pour l'ajouter dans le mélange, il y a une troisième voie.
Insérez une colonne après B. Copier A à C. Supprimer A. P>
With ThisWorkbook.Worksheets(1)
.Columns(3).Insert
.Columns(1).Copy .Columns(3)
.Columns(1).Delete
End With
Je préfère utiliser les tableaux code> car est beaucoup plus rapide. Option Explicit
Sub test()
Dim i As Long
Dim arrA As Variant, arrB As Variant
Dim ValueA As Double, ValueB As Double
'Cahng if needed
With ThisWorkbook.Worksheets("Sheet1")
arrA = .Range("A1:A2563")
arrB = .Range("B1:B2563")
For i = 1 To 2563
ValueA = arrA(i, 1)
ValueB = arrB(i, 1)
arrA(i, 1) = ValueB
arrB(i, 1) = ValueA
Next i
.Range("A1").Resize(UBound(arrA), 1) = arrA
.Range("B1").Resize(UBound(arrB), 1) = arrB
End With
End Sub
Ne pas être territorial, mais cela semble être une réponse faible. Oui, les tableaux sont plus rapides, mais votre approche passe ensuite à des mises à jour individuelles à chaque cellule en boucle. L'avantage de la matrice est qu'il n'aboutit que le classeur une fois. Votre réponse n'est pas différente en ce qui concerne la performance que le code de Reza que le vôtre est inutilement complexe. Si je suis négligeant quelque chose, n'hésitez pas à me corriger puisque vous avez pratiquement doubler ma note. J'ai inclus vos résultats dans l'événement de chronométrage que j'ai posté et cela fait comme je m'attends à être similaire à Reza. Pastebin.com/n5ubyigy
Je vois le changement. Cela a plus de sens, mais je suppose que je ne vois pas comment c'est une grande partie d'une amélioration du mien. J'ai donné une hausse juste parce que c'est dimanche.