Comment puis-je transformer une masortingce de données sur la feuille de calcul en une seule colonne à l'aide de VBA?

Dis, mon bloc de données d'origine est des feuilles de travail (1) .range ("A1: C100"), et j'aimerais emstackr les colonnes de ce bloc dans une seule colonne, c'est-à-dire que j'ai d'abord placé la première colonne puis la seconde La colonne se trouve en dessous et enfin la troisième colonne. En fin de count, je devrais avoir une seule colonne, disant être mis dans les feuilles de travail (2) .range ("A1: A300"). Je me request s'il y a un algorithm intelligent et rapide pour y parvenir?

Sans VBA , In Sheet2 cell A1 :

=OFFSET(Sheet1!$A$1,MOD(ROWS($1:1)-1,100),ROUNDUP(ROWS($1:1)/100,0)-1,) 

et copyr.

et avec VBA

 Sub copy_table_to_column() Dim s As Ssortingng s = "=OFFSET(Sheet1!$A$1,MOD(ROWS($1:1)-1,100),ROUNDUP(ROWS($1:1)/100,0)-1,)" With Worksheets("Sheet2").Range("A1:A300") .Formula = s .Value = .Value End With End Sub 

Il pourrait y avoir une meilleure façon, mais je le fais habituellement avec un Offset

 I=0 For Each A in Worksheets(1).Range("A1:A100").Cells Worksheets(2).Range("A1").Offset(I,0) = A.Value I = I + 1 Next For Each B in Worksheets(1).Range("B1:B100").Cells Worksheets(2).Range("A1").Offset(I,0) = B.Value I = I + 1 Next For Each C in Worksheets(1).Range("C1:C100").Cells Worksheets(2).Range("A1").Offset(I,0) = C.Value I = I + 1 Next 

Cela pourrait vous suffire … J'espère que cela vous aidera.

 Option Explicit 'Define the test function... Sub test() Dim vData As Variant Dim r As Range Set r = Sheet1.Range("A1:C100") vData = ConcatinateColumns(r) End Sub 'Define the function to concatinate columns. Public Function ConcatinateColumns(ByVal Data As Range) Dim vTemp As Variant Dim i As Integer, j As Long, k As Long 'Get the data for each cell to a variant. vTemp = Data.Value ReDim vData(1 To (UBound(vTemp, 1) - LBound(vTemp, 1) + 1) * (UBound(vTemp, 2) - LBound(vTemp, 2) + 1), 1 To 1) As Variant For i = LBound(vTemp, 2) To UBound(vTemp, 2) For j = LBound(vTemp, 1) To UBound(vTemp, 1) k = k + 1 vData(k, LBound(vData, 1)) = vTemp(j, i) Next Next ConcatinateColumns = vData End Function