- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 142
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2026-7-16
                
|
12#
發表於 2011-12-21 22:51
| 只看該作者
回復 11# tonycho33 - Sub 轉置()
- Dim A As Range, Ar(), Ay(), i%, j%, Ary(), s&
- With Sheets("a")
- For Each A In .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants) '在A2以下有資料的儲存格做迴圈
- Ar = A.Resize(, 4) 'A欄向右擴展成欄的範圍,取得工單、料號、摘要、數量
- Ay = .Range(A.Offset(, 6), A.Offset(, 6).End(xlToRight).Offset(2)).Value '從G欄向右到該列資料尾向下2列的範圍存入陣列變數
- For i = 1 To UBound(Ay, 2) '迴圈從1開始到資料陣列的欄數
- ReDim Preserve Ary(7, s) ',擴展動態陣列此陣列有7列,擴展成s欄
- Ary(0, s) = Ar(1, 1): Ary(1, s) = Ar(1, 2): Ary(6, s) = Ar(1, 4) '將工單、料號、數量寫入陣列
- For j = 1 To UBound(Ay, 1)
- Ary(j + 1, s) = Ay(j, i) '將每個工程的3個項目寫入陣列
- Next
- s = s + 1 '準備下次動態陣列擴增的欄數
- Next
- Next
- End With
- Sheets("b").UsedRange.Offset(1) = "" '清空原來資料
- Sheets("b").[A2].Resize(s, 7) = Application.Transpose(Ary) '將陣列寫入b工作表
- End Sub
複製代碼 |
|