Excel 2010:使用 VBA 将单元格从垂直数据移动到水平数据
Excel 2010: Move cells from vertical data to horizontal with VBA
Excel 2010
我想将以下数据从垂直状态移动到水平数据。我想要 VBA 中的解决方案。 (我已经有公式了)
订单 = (A10) 结果 = (B10) 运行超过 1000 行
| Order1 | result
| line1 | result 1
| line2 | result 1
| line3 | result 1
| line4 | result 1
| line5 | result 1
| line6 | result 1
| line7 | result 1
| line8 | result 1
| br |
| Order2 | result
| line1 | result 1
| line2 | result 1
| line3 | result 1
| line4 | result 1
| line5 | result 1
| line6 | result 1
| line7 | result 1
| line8 | result 1
我希望它解析为:
Order 1 | result1 | result2 | result3 | result4 | result5 | result6 | result7 | result8 |
Order 2 | result1 | result2 | result3 | result4 | result5 | result6 | result7 | result8 |
提前致谢
编辑
我目前的公式是这样的:
(C10)=IF(A3="Order1 ",1,0)
(结果:1)
(D10) =IF($C3=1,B3,0)
(结果:第 1 行的结果)
(E10) =IF($C3=1,B10,0)
(结果:第 2 行的结果)
等等。
然后我复制并自动填充整个 sheet 数据,然后它全部填充。
我用这种方式构建了新的 table。
当我进行宏记录时,它不会记录我在单元格中的实际公式。
如果我们开始于:
在 Sheet1 中的订单之间有一个空白,然后这个宏:
Sub reorg()
Dim s1 As Worksheet, s2 As Worksheet, N As Long, i As Long, j As Long, k As Long
Dim v As Variant
Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet2")
N = s1.Cells(Rows.Count, "A").End(xlUp).Row
j = 1
k = 1
For i = 1 To N
v = s1.Cells(i, 1).Value
If v = "" Then
j = j + 1
k = 1
Else
s2.Cells(j, k) = v
k = k + 1
End If
Next i
End Sub
将在 Sheet2
中生成此内容
编辑#1:
要使用 A10 作为起点和终点,请使用:
Sub reorg()
Dim s1 As Worksheet, s2 As Worksheet, N As Long, i As Long, j As Long, k As Long
Dim v As Variant
Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet2")
N = s1.Cells(Rows.Count, "A").End(xlUp).Row
j = 10
k = 1
For i = 10 To N
v = s1.Cells(i, 1).Value
If v = "" Then
j = j + 1
k = 1
Else
s2.Cells(j, k) = v
k = k + 1
End If
Next i
End Sub
Excel 2010
我想将以下数据从垂直状态移动到水平数据。我想要 VBA 中的解决方案。 (我已经有公式了)
订单 = (A10) 结果 = (B10) 运行超过 1000 行
| Order1 | result
| line1 | result 1
| line2 | result 1
| line3 | result 1
| line4 | result 1
| line5 | result 1
| line6 | result 1
| line7 | result 1
| line8 | result 1
| br |
| Order2 | result
| line1 | result 1
| line2 | result 1
| line3 | result 1
| line4 | result 1
| line5 | result 1
| line6 | result 1
| line7 | result 1
| line8 | result 1
我希望它解析为:
Order 1 | result1 | result2 | result3 | result4 | result5 | result6 | result7 | result8 |
Order 2 | result1 | result2 | result3 | result4 | result5 | result6 | result7 | result8 |
提前致谢
编辑
我目前的公式是这样的:
(C10)=IF(A3="Order1 ",1,0)
(结果:1)
(D10) =IF($C3=1,B3,0)
(结果:第 1 行的结果)
(E10) =IF($C3=1,B10,0)
(结果:第 2 行的结果)
等等。
然后我复制并自动填充整个 sheet 数据,然后它全部填充。 我用这种方式构建了新的 table。
当我进行宏记录时,它不会记录我在单元格中的实际公式。
如果我们开始于:
在 Sheet1 中的订单之间有一个空白,然后这个宏:
Sub reorg()
Dim s1 As Worksheet, s2 As Worksheet, N As Long, i As Long, j As Long, k As Long
Dim v As Variant
Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet2")
N = s1.Cells(Rows.Count, "A").End(xlUp).Row
j = 1
k = 1
For i = 1 To N
v = s1.Cells(i, 1).Value
If v = "" Then
j = j + 1
k = 1
Else
s2.Cells(j, k) = v
k = k + 1
End If
Next i
End Sub
将在 Sheet2
中生成此内容编辑#1:
要使用 A10 作为起点和终点,请使用:
Sub reorg()
Dim s1 As Worksheet, s2 As Worksheet, N As Long, i As Long, j As Long, k As Long
Dim v As Variant
Set s1 = Sheets("Sheet1")
Set s2 = Sheets("Sheet2")
N = s1.Cells(Rows.Count, "A").End(xlUp).Row
j = 10
k = 1
For i = 10 To N
v = s1.Cells(i, 1).Value
If v = "" Then
j = j + 1
k = 1
Else
s2.Cells(j, k) = v
k = k + 1
End If
Next i
End Sub