将excel中的数据列合并为一列,而不更改顺序

o2gm4chl  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(174)

我知道这个问题以前有人问过,但我不能按照上一篇文章的说明来解决这个问题。我正在尝试合并几列数据,看起来像左边的数据块Table on the left is what I have trying to get to table on the right,我想合并成一个,不变行(顺序非常重要,因为它遵循时间序列)。我编译数据的所有50个国家在一个单独的表中,我想粘贴到这一列。数据从列运行(答:是)。帮助将不胜感激,因为我真的不知道我在做什么(完全新手在这里,我没有经验的VBA)。一个适当的细分过程将不胜感激。
我尝试使用CONCATENATE函数,但不断遇到错误,我在谷歌上找到了一些故障排除方法,但它们似乎中断了数据的顺序。我尝试使用This的教程,但无法使其工作。

4uqofj5v

4uqofj5v1#

如果你没有母育酚,你也可以像这样使用INDEX。

名为“数据”的表:

| 列1|列2|第3栏|
| - ------|- ------|- ------|
| 项目a|克|米|
| B|小时|数量|
| (c)秘书长的报告|我|阿|
| 日|j|p|
| 电子|k|q|
| f级|升|r|

然后这个公式会将数据放到一列中。只需将其放在第一行的任意位置,将“data”更改为您的输入区域并向下展开。

=INDEX(data,MOD(ROW()-1,ROWS(data))+1,CEILING.MATH(ROW()/ROWS(data)))

或者,如果您的数据非常大,并且您不想手动展开,则可以尝试这种VBA方法。您唯一需要更改的是顶部的“data”和“targetCell”变量。
“data”是您的原始表,因此在您的示例中,它将是Range(“B2:F12”)。“targetCell”是列的起始位置。在您的示例中,它是Range(“BC 2”)

Sub singleColumn()
    Dim data As Range, targetCell As Range, targetRange As Range
    Set data = Range("data")
    Set targetCell = Range("G20")
    
    Dim resultArr() As Variant, arr As Variant
    ReDim resultArr(1 To data.Rows.Count * data.Columns.Count, 1 To 1)
    arr = data

    For i = 1 To UBound(resultArr)
        resultArr(i, 1) = arr(((i - 1) Mod UBound(arr)) + 1, WorksheetFunction.Ceiling_Math(i / UBound(arr)))
    Next i
    
    Set targetRange = Range(targetCell, Cells(targetCell.Row + UBound(resultArr) - 1, targetCell.Column))
    targetRange = resultArr
End Sub

相关问题