如何将多列转换为单行并使其与其他数据保持一致

时间:2016-12-20 19:30:05

标签: excel excel-vba excel-formula vba

我有一组数据列出了初始值的重复项(A列)我想获取引用相应行中单元格中的值的数据列并转置它们。

问题是有多列,列数因原始值的重复数而异。因此,当我转置时,我需要它基本上插入空行,以便所有列数据对应于正确的单元格。这是一个带有:

的屏幕截图

example

2 个答案:

答案 0 :(得分:0)

我相信这个VBA代码可以满足您的需求。它基本上做了人类手动做的事情,使用B2作为第一个表的参考点。如果您的第一个表格左上角的单元格不是B2,那么您需要更改对B2的所有引用。默认情况下,新表将显示在第一个下方的2行。这可以改变'offset(j,0)'来改变。 (例如,偏移(j + 1,2)将使第二个表3向下,2向右)。

另请注意,第一个表格下方的区域需要为空白,否则新表格将显示在其中。

Sub Very_special_transpose()

'Calculates number of values
Dim Value1 As Integer 'row number of value 1
Dim LastValue As Integer 'row number of last value
Dim i As Integer 'number of values
Dim j As Integer

Range("B2").Offset(1, 0).Select
Value1 = ActiveCell.Row

Range("B2").End(xlDown).Select
LastValue = ActiveCell.Row

i = LastValue - Value1 + 1

'puts in headers under first table
Range("B1048576").End(xlUp).Offset(2, 0).Select
ActiveCell.FormulaR1C1 = "Value"
ActiveCell.Offset(0, 1).FormulaR1C1 = "Reference value"
ActiveCell.Offset(0, 2).FormulaR1C1 = "Duplicates"

'Repeats copying process for each value

For j = 1 To i

Range("B2:C2").Offset(j, 0).Copy
Range("D1048576").End(xlUp).Offset(1, -2).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
Range("B2").Offset(j, 2).Select
Range(ActiveCell, ActiveCell.End(xlToRight)).Copy
Range("D1048576").End(xlUp).Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=True
Next j

End Sub

答案 1 :(得分:0)

您也可以在没有VBA代码的情况下执行此操作。 只需使用goto insert->数据透视表即可。 然后在上方工具栏中选择设计选项,然后选择报告布局!! 您可以选择所需的任何布局。