gpt4 book ai didi

excel - 将多列堆叠成两列,每列两对

转载 作者:行者123 更新时间:2023-12-03 03:01:34 25 4
gpt4 key购买 nike

我有列 A:ALC 填充了数据,并且每列有不同数量的行。如果可能的话,我需要一个宏来将列成对地堆叠。例如,C 列直接位于 A 列下,而 D 列直接位于 B 列下,对于所有列,依此类推A:ALC

        COLUMN A    COLUMN B          COLUMN C      COLUMN D
ROW 1 2598 F800 2599 F800
ROW 2 2598 K1300 2599 K1300
ROW 3 2598 S1000RR 2599 R900
ROW 4 2598 G650 2599 G650
ROW 5 2598 R1200 2599 K1600
ROW 6 2599 S1000
ROW 7 2599 HP2
ROW 8 2599 R1200

每对列的数据量相等(例如,A 列和 B 列有 8 行,C 列和 >D 有 5 行,依此类推),但显然,多对列之间的行数不同。数据中没有空白。

当我运行你给 Excel 的宏时,显示如下:

Run-Time Error '13': Type Mismatch

可能是什么问题?

注意:有些列只有一对数据,即仅第一行的数据。

这就是我需要的输出:

       COLUMN A    COLUMN B          
ROW 1 2598 F800
ROW 2 2598 K1300
ROW 3 2598 S1000RR
ROW 4 2598 G650
ROW 5 2598 R1200
ROW 6 2599 S1000
ROW 7 2599 HP2
ROW 8 2599 R1200
ROW 9 2599 F800
ROW 10 2599 K1300
ROW 11 2599 R900
ROW 12 2599 G650
ROW 13 2599 K1600

最佳答案

如果 A:ALC 中的数据范围已满,则此变体数组代码将非常快速地在 A 列和 B 列中形成新范围

请注意完整的警告,如果遇到空白或单个单元格列,代码将失败,因为无法创建变体数组。如果是这种情况,那么我将需要添加范围测试,所以请建议。

[已更新以处理空白范围和/或单个单元格]

Sub Combine()
Dim OrigA
Dim OrigB
Dim strA As String
Dim strB As String
Dim strDelim As String
Dim lngCol As Long

strDelim = "||"
strA = Join(Application.Transpose(Range([a1], Cells(Rows.Count, "A").End(xlUp))), strDelim)
strB = Join(Application.Transpose(Range([b1], Cells(Rows.Count, "b").End(xlUp))), strDelim)

For lngCol = Columns("C").Column To Columns("ALC").Column - 2 Step 2
If Application.CountA(Columns(lngCol)) > 1 Then
'handle odd column range
strA = strA & (strDelim & Join(Application.Transpose(Range(Cells(1, lngCol), Cells(Rows.Count, lngCol).End(xlUp))), strDelim))
Else
'handle odd column single cell
If Len(Cells(1, lngCol)) > 0 Then strA = strA & (strDelim & Cells(1, lngCol).Value)
End If
If Application.CountA(Columns(lngCol + 1)) > 1 Then
'handle even column range
strB = strB & (strDelim & Join(Application.Transpose(Range(Cells(1, lngCol + 1), Cells(Rows.Count, lngCol + 1).End(xlUp))), strDelim))
Else
'handle even column single cell
If Len(Cells(1, lngCol + 1)) > 0 Then strB = strB & (strDelim & Cells(1, lngCol + 1).Value)
End If
Next

OrigA = Application.Transpose(Split(strA, strDelim))
OrigB = Application.Transpose(Split(strB, strDelim))

[a1].Resize(UBound(OrigA, 1), 1) = OrigA
[b1].Resize(UBound(OrigB, 1), 1) = OrigB

End Sub

关于excel - 将多列堆叠成两列,每列两对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9613908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com