Vba 在列中重新排列行数据
我有以下格式的excel数据Vba 在列中重新排列行数据,vba,excel,rows,Vba,Excel,Rows,我有以下格式的excel数据 Resource 2/2/2013 2/3/2013 2/4/2013 Name1 9 9 9 Name2 9 9 9 Name3 9 9 9 我必须将上述数据转换为如下内容: Resource Date Hours Name1 2/2/2013
Resource 2/2/2013 2/3/2013 2/4/2013
Name1 9 9 9
Name2 9 9 9
Name3 9 9 9
我必须将上述数据转换为如下内容:
Resource Date Hours
Name1 2/2/2013 9
Name1 2/3/2013 9
Name1 2/4/2013 9
Name2 2/2/2013 9
Name2 2/3/2013 9
Name2 2/4/2013 9
Name3 2/2/2013 9
Name3 2/3/2013 9
Name3 2/4/2013 9
excel
中是否有任何函数可以做到这一点。我只能找到没有帮助的行到列
函数,因为它只会转置
数据,而不会像上面那样创建多个条目
即使通过
VBA
我也在想,如果没有VBA,是否有可能实现这一点,而且似乎是这样。
但是有一些假设,特别是你要变换的区域是矩形的
然后,您可以使用MOD函数(可以将“helper columns C-E”合并在一起,但为了更清晰的解释,我将它们显示出来)
在A9中,我有一个列数为的值(可以通过另一个函数获得)——只是有点泛化
然后我以这种方式使用间接()函数:
- 单元格G9:
=间接(“R”和2+D9和“C1”为假)
- 单元格H9:
=间接(“R1C”&2+E9;错误)
- 单元格I9:
=间接(“R”&2+D9&“C”&2+E9;假)
然后向下拖动它。这里是一个VBA解决方案:
Sub Example()
Dim Resources() As String
Dim rng As Range
Dim row As Long
Dim col As Long
Dim x As Long
ReDim Resources(1 To (ActiveSheet.UsedRange.Rows.Count - 1) * (ActiveSheet.UsedRange.Columns.Count - 1), 1 To 3)
'Change this to the source sheet
Sheets("Sheet1").Select
'Read data into an array
For row = 2 To ActiveSheet.UsedRange.Rows.Count
For col = 2 To ActiveSheet.UsedRange.Columns.Count
x = x + 1
Resources(x, 1) = Cells(row, 1).Value ' Get name
Resources(x, 2) = Cells(1, col).Value ' Get date
Resources(x, 3) = Cells(row, col).Value ' Get value
Next
Next
'Change this to the destination sheet
Sheets("Sheet2").Select
'Write data to sheet
Range(Cells(1, 1), Cells(UBound(Resources), UBound(Resources, 2))).Value = Resources
'Insert column headers
Rows(1).Insert
Range("A1:C1").Value = Array("Resource", "Date", "Value")
'Set strings to values
Set rng = Range(Cells(1, 3), Cells(ActiveSheet.UsedRange.Rows.Count, 3))
rng.Value = rng.Value
End Sub
原件:
结果:
Thank@Ripster完成了这项工作。唯一的问题是它将数据复制到同一张表中,而不是复制到目标表中。这很奇怪,因为我给出了正确的
工作表名称
,但最后它只选择了dest工作表
,所有数据都只在源工作表中填充。这不应该发生。这对我来说是正确的。您是否尝试过单步遍历代码,并试图找到它按预期停止工作的行?我已将代码复制到工作表中。当我通过模块使用它时,它工作得很好。我将稍微修改一下这段代码。我将使用3个独立的一维数组。但是这一行范围(单元格(1,1),单元格(UBound(参考资料),1))。Value=Resources
仅为所有字段提供第一个元素的值。