2

如何将 A 列中的行转换为 B 列中的列,将 B 列中的行转换为单行?

这是我当前的设置:

   ColumnA   ColumnB
  Question1  Answer1
  Question2  Answer2
  Question3  Answer3
  Question4  Answer4
  Question5  Answer5
  Question1  Answer6
  Question2  Answer7
  Question3  Answer8
  Question4  Answer9
  Question5  Answer10

我想要的是:

Question1 Question2 Question3 Question4 Question5
 Answer1   Answer2   Answer3   Answer4   Answer5
 Answer6   Answer7   Answer8   Answer9   Answer10
4

2 回答 2

1

我认为这最好用 VBA 宏来解决。如果您获得了当前表Sheet1并想要进行转换,Sheet2那么以下宏将进行转换。

Option Explicit
Sub ConvertRows()
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim i As Integer, j As Integer
    Set ws1 = ActiveWorkbook.Sheets("Sheet1")
    Set ws2 = ActiveWorkbook.Sheets("Sheet2")

    'Lists each value from column 1
    For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row Step 1
        For j = 1 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column + 1 Step 1
            If ws2.Cells(1, j).Value = ws1.Cells(i, 1).Value Then Exit For
            If ws2.Cells(1, j).Value = vbNullString Then
                ws2.Cells(1, j).Value = ws1.Cells(i, 1).Value
                Exit For
            End If
        Next j
    Next i

    'Fills columns with matching values
    For i = 1 To ws1.Cells(Rows.Count, 1).End(xlUp).Row Step 1
        For j = 1 To ws2.Cells(1, Columns.Count).End(xlToLeft).Column Step 1
            If ws2.Cells(1, j).Value = ws1.Cells(i, 1).Value Then
                ws2.Cells(Rows.Count, j).End(xlUp).Offset(1, 0).Value = ws1.Cells(i, 2).Value
            End If
        Next j
    Next i
End Sub
于 2013-11-07T21:54:20.113 回答
0

非 VBA 方法:

如果您正在处理一次性问题,处理从列到行的转换的一种简单方法是使用 INDEX() 函数。我建议在第一个目标单元格中​​使用以下内容(用于放置“Question1”和“Question2”的位置):

Question1 Destination Cell:
=INDEX($A:$A,COLUMN(A1))

Answer1 Destination Cell:
=INDEX($B:$B,COLUMN(A1))

从那里,只需将方程式复制到右侧,直到您跨越与行数一样多的列,因为这允许您的列到行转换无限期地向右扩展。

**只要您的问题和答案数据在您指定的 ColumnA 和 ColumnB 中,这将起作用,但可以相应地修改(使用 COLUMN(A1) 的替代方法来定位您正在移动的行)。

并且,如果您希望在完成如上所示的一组 5 列后将您的问题和答案堆叠起来,请按如下方式设置:

Question1 Destination Cell:
=INDEX($A:$A,COLUMN(A1))

Answer1 Destination Cell:
=INDEX($B:$B,COLUMN(A1))

Answer6 Destination Cell:
=INDEX($B:$B,MATCH([non-locked cell address of Answer1],$B:$B,0)+5)

从那里,将这三个单元格复制到右侧跨越 5 列。然后,要向下扩展,仅复制以 Answer6 开头的计算行并将其粘贴到工作表中以覆盖 ColumnA 和 ColumnB 中的行数。

此方法将产生以下结果:

Question1 Question2 Question3 Question4 Question5
 Answer1   Answer2   Answer3   Answer4   Answer5
 Answer6   Answer7   Answer8   Answer9   Answer10

干杯。

于 2013-11-08T00:04:55.350 回答