2012-10-25 65 views
0

在Excel片我有數據如下:轉換垂直數據至水平在Excel

Name  Age 
------- ------- 
XYZ  24 
ABC  25 
CDE  26 
GHI  27 

我想這個數據將被轉換爲在Excel工作表以下。

Name1  Age1 Name2  Age2 Name3  Age3 Name4  Age4 
XYZ  24  ABC  25  CDE  26  GHI  27 

這可能嗎?請幫忙。謝謝!

+0

你可以使用VBA嗎? – Trace

+0

我可以,如果它的伎倆?但我不知道如何使用它。 – Prashant

+0

這是一次性的,還是你需要定期做這個? – bendataclear

回答

0

將其粘貼到您的vba編輯器(標準模塊)中並將代碼添加到按鈕中。
該代碼假設表格從範圍「A1」開始。
第一行包含標題,其他行包含您的示例中的值。
我粘貼從第8行輸出。
讓我知道它是否有幫助。

Option Explicit 

Sub Name_Age() 

Dim oRange     As Excel.Range 
Dim iRange_Cols    As Integer 
Dim lRange_Rows    As Long 
Dim lCnt     As Long 

Dim vArray     As Variant 
Dim vArray_Dest    As Variant 

Dim lUbound_Rows   As Long 
Dim lUBound_Cols   As Long 


Set oRange = ThisWorkbook.Sheets(1).UsedRange 
iRange_Cols = oRange.Columns.Count 
lRange_Rows = oRange.Rows.Count - 1 
ReDim vArray(1 To lRange_Rows, 0 To iRange_Cols) 
ReDim vArray_Dest(1 To iRange_Cols, 1 To (lRange_Rows * iRange_Cols)) 
vArray = oRange 

lCnt = 0 
For lCnt = 1 To lRange_Rows 
    vArray_Dest(1, (lCnt * 2) - 1) = CStr("Name" & lCnt) 
    vArray_Dest(1, (lCnt * 2)) = CStr("Age" & lCnt) 
    vArray_Dest(2, (lCnt * 2) - 1) = vArray(1 + lCnt, 1) 
    vArray_Dest(2, (lCnt * 2)) = vArray(1 + lCnt, 2) 
Next lCnt 

lUbound_Rows = UBound(vArray_Dest, 1) 
lUBound_Cols = UBound(vArray_Dest, 2) 

Set oRange = Nothing 
Set oRange = ThisWorkbook.Sheets(1).Range(Cells(8, 1), Cells(8 + lUbound_Rows - 1, lUBound_Cols)) 
oRange = vArray_Dest 

End Sub 
4

至於非VBA的解決方案 - 你可以用一些創造性的使用自動填充和排序的做到這一點:

做一些有創意的自動填充和排序: AutoFillSort1

複製和粘貼換位: AutoFillSort2

和你做: AutoFillSort3