2017-08-04 82 views
0

任何人都可以帮助您将Excel表格中的数据转换为垂直列表吗?将表格数据转换为Excel中的垂直列表

我试过使用一个宏,但它一直在跳起来,我不知道我要去哪里错了。

我正在下载一个大型数据表,但这些数据需要放在工作表上另一个宏的列表中。有了多少数据,手动执行它是不切实际的,所以我想知道是否有快速的方法。

在此先感谢!

+0

没有太多的错误描述基于哪些尝试解决您的情况,但你[试过](https://stackoverflow.com/questions/20541905/convert-matrix-to-3-column-表反向枢转逆透视-弄平正常/ 20543651#20543651)? – pnuts

+0

如果您知道宏,然后尝试对数据范围进行计数并将其用于转置。 – Shrikant

+0

表单中有多少列数据?你能展示一下床单的外观吗? –

回答

1

你可以在一个公式中做到这一点。假设你有一个电子表格,其中看起来像这样(我已经把伪数据表示该单元的位置,这样就可以看到它结束了):

Spreadsheet with 8 columns and 15 rows

在另一个小区(或另一片)把下面的公式:

=OFFSET($A$1,INT((ROW(1:1)-1)/8),(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8)) 

,两个8的公式中有没有因为片具有8列,如果它有或多或少你会改变这8对您的电子表格中的列数。

然后您将该公式拷贝下来,你会得到这样的:

Sheet with formula in

它的工作原理,因为它使用的偏移公式,得到一个单元的使用行和列的参考内容。

INT((ROW(1:1)-1)/8) 

这部分可以确保行数不从1移动到2等,直到8行新配方已经建立,使房间为8列被复制。

(COLUMN(A:A)-1)+MOD(ROW(1:1)-1,8) 

这部分带柱和1增加为每行下来,我们去,直到我们到达第8列时,MOD函数返回到0,我们开始一个新的数据行上的原片。

0

有些东西谎言这应该为雅做的伎俩。

Sub TransposeThis() 

Set Rng = Sheets("sheet1").Range("B2:B6") 'Input range of all fruits 
Set Rng_output = Sheets("sheet2").Range("B2") 'Output range 

For i = 1 To Rng.Cells.Count 
    Set rng_values = Range(Rng.Cells(i).Offset(0, 1), Rng.Cells(i).End(xlToRight)) 'For each fruit taking the values to the right which need to be transposed 

    If rng_values.Cells.Count < 16000 Then 'To ensure that it doesnt select till the right end of the sheet 
     For j = 1 To rng_values.Cells.Count 
       Rng_output.Value = Rng.Cells(i).Value 
       Rng_output.Offset(0, 1).Value = rng_values.Cells(j).Value 
       Set Rng_output = Rng_output.Offset(1, 0) 'Shifting the output row so that next value can be printed 
     Next j 
    End If 
Next i 

End Sub 

前:

enter image description here

后:

enter image description here

或者,如果你只是想一切都转成一个单一的载体,这听起来有点不可思议,但可能需要这样的东西,你可以试试下面的脚本。

Sub TryThis() 
    Dim rRow   As Range 
    Dim nCol   As Long 
    Dim iOfs   As Long 

    Application.ScreenUpdating = False 
    With Sheet1.Range("A1:E20") 
    nCol = .Columns.Count 
    For Each rRow In .Rows 
     rRow.Copy 
     Sheet2.Range("A2").Offset(iOfs).PasteSpecial Transpose:=True 
     iOfs = iOfs + nCol 
    Next rRow 
    End With 
    Application.ScreenUpdating = True 
End Sub