【问题标题】:Merge multiple column rows into a single cell将多列行合并到一个单元格中
【发布时间】:2012-08-07 00:49:18
【问题描述】:

我有一个看起来像这样的列

A
B
C

D
E

我需要将此列变成行,每个空单元格标记新行,如下所示:

ABC
DE

在 Excel 中有没有简单的方法来做到这一点?

【问题讨论】:

  • 只使用 Excel,您必须复制每个字母块,然后每次都需要用转置粘贴它们。我认为不使用宏就无法一步完成。
  • 转置在这种情况下效果不佳,因为我有超过 50 万个单元格与该列中的空单元格分隔,并且需要在每个空单元格之后变成行。
  • 使用转置的单元格太多,所以是的,那么需要一个宏。

标签: vba excel


【解决方案1】:

如果您在模块中复制下面的代码,它应该按照您的要求执行(确保包含您的数据的工作表是活动工作表)。没有检查数据有效性 - 它假设:

  • 带有数据的工作表是活动工作表,
  • A列有数据

并在 B 列中输出结果。

Option Explicit

Public Sub doIt()

   Dim data As Variant
    Dim result As Variant
    Dim i As Long
    Dim j As Long

    data = ActiveSheet.UsedRange
    ReDim result(1 To UBound(data, 1), 1 To 1) As Variant

    j = 1
    For i = 1 To UBound(data, 1)
       If data(i, 1) = "" Then
          j = j + 1
       Else
          result(j, 1) = result(j, 1) & data(i, 1)
       End If
    Next i

    With ActiveSheet
        .Cells(1, 2).Resize(UBound(result, 1), 1) = result
    End With

End Sub

【讨论】:

    【解决方案2】:

    我的方法是使用 AREAS() 方法,非常完美,因为您的数据组由空白单元格分隔。

    Option Explicit
    
    Sub ColumnToRows()
    Dim RNG As Range, a As Long
    
        Set RNG = Range("A:A").SpecialCells(xlConstants)
    
        For a = 1 To RNG.Areas.Count
            RNG.Areas(a).Copy
            Range("C" & Rows.Count).End(xlUp).Offset(1).PasteSpecial xlPasteAll, Transpose:=True
        Next a
    
        Application.CutCopyMode = False
    End Sub
    

    如果 A 列没有满是常量,您可以将其更改为 xlFormulas

    【讨论】:

      猜你喜欢
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 2011-12-29
      • 2014-10-31
      相关资源
      最近更新 更多