我有一张如下所示的表格:
A | B | C | D | E |
----------------------------------------
62| Value1| Value2| | |
345| Value3| Value4| Value5| Value6|
17| Value7| | | |
111| Value8| Value9| ValueA| |
我想将其转换为这样:
A | B |
----------------
62| Value1|
62| Value2|
345| Value3|
345| Value4|
345| Value5|
345| Value6|
17| Value7|
111| Value8|
111| Value9|
111| ValueA|
这似乎是一个很常见的过程(我正在规范化一个表),Excel 会将其固定下来。有没有简单的方法可以做到这一点,还是只能编写宏或 VBA?
答案1
Excel 有一个内置的 Transpose 函数,可以切换行和列,但这不适用于您的情况。我认为唯一可行的是 VBA 函数。我的 VB 有点生疏,但这个应该可以。您需要修改“A1:E5”范围以覆盖要转换的单元格。这会将值从名为“Sheet1”的第一个工作表复制到名为“Sheet2”的第二个工作表。如果您在 Sheet2 中有数据或有不同名称的工作表,则需要修改代码。
Sub Transform()
Dim rowStr As String
Dim rowIndex As Integer
rowIndex = 1
For Each Cell In Sheet1.Range("A1:E5")
If Cell.Column = 1 Then
rowStr = Cell.Value
ElseIf Not IsEmpty(Cell.Value) Then
Sheet2.Cells(rowIndex, 1) = rowStr
Sheet2.Cells(rowIndex, 2) = Cell.Value
rowIndex = rowIndex + 1
End If
Next Cell
End Sub