如何使用VBA将由空白分隔的分组数据列“转置”为行

时间:2018-06-20 09:40:43

标签: excel-vba vba excel

由于我发现自己的问题难以解释,因此我仅举一个例子。

这是我在excel中的一列数据的格式,用空格分隔。

A

B
C
D
E

F
G
H

我希望对其进行转置,以便最终结果为:

A B F
  C G
  D H
  E

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这是Honorez的方法:

Sub Honorez()
    Dim N As Long, i As Long, j As Long, k As Long
    N = Cells(Rows.Count, "A").End(xlUp).Row
    j = 2
    k = 0
    For i = 1 To N
        v = Cells(i, 1)
        If v = "" Then
            j = j + 1
            k = 0
        Else
            k = k + 1
            Cells(k, j) = v
        End If
    Next i
End Sub

enter image description here

答案 1 :(得分:1)

数组方法

除了@ Gary's-Student的优良解决方案之外,我还演示了使用数据字段 Array 的另一种方法,并将值直接写回新列:

Sub Honorez2()
Dim rng As Range
Dim ws  As Worksheet: Set ws = ThisWorkbook.Worksheets("Honorez")
Dim i As Long, ii As Long, j As Long, m As Long, n As Long
Dim a()
' get data
  n = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
  Set rng = ws.Range("A1:A" & n)
  rng.Offset(0, 1).Resize(n, n - WorksheetFunction.CountA(Range("A:A")) + 1) = "" ' clear prior values
' write data field to array
  a = rng
  j = 2                                           ' start column for results
  For i = 1 To n
    If a(i, 1) = "" Or i = n Then
       ' write data to new column
         ws.Range(ws.Cells(1, j), ws.Cells(i - ii, j)).Value = _
            ws.Range(ws.Cells(ii + 1, 1), ws.Cells(i, 1)).Value
       ' remember row and increment column counter
         ii = i: j = j + 1
    End If
  Next i
End Sub