返回列表 上一主題 發帖

[發問] 資料直向轉橫向排列

本帖最後由 c_c_lai 於 2013-1-8 07:27 編輯

回復 6# GBKEE
回復 5# Genie
GBKEE 版大早安!
今早讀了 "資料直向轉橫向排列" 發覺 Idea 不錯,於是乎
除了原先的  "A欄、B 欄" ,我又加入了 "AB 欄" 選項。
來取樂一下,請勿見怪!(我另增加一工作表單 "測試結果")
  1. Sub Ex2()
  2.     Dim D As Object, AR(), Rng As Range, i As Integer, K As Variant, W As String
  3.     Dim cts As Integer, nums As Integer
  4.    
  5.     '  Do
  6.     '      W = InputBox("請選擇: A 欄作區分 或 B 欄作區分")
  7.     '      If W = "" Then Exit Sub                         '  沒輸入:離開程式
  8.     '  Loop Until UCase(W) = "A" Or UCase(W) = "B"
  9.     W = InputBox("請選擇: A 欄作區分 或 B 欄作區分、" & vbCrLf & "亦或是 AB 欄作區分")
  10.     If UCase(W) <> "A" And UCase(W) <> "B" And UCase(W) <> "AB" Then Exit Sub   '  沒輸入:離開程式
  11.    
  12.     nums = IIf(UCase(W) = "AB", 2, 1)
  13.     Set D = CreateObject("Scripting.Dictionary")            '  字典物件
  14.    
  15.     For cts = 1 To nums
  16.         Set Rng = Sheets("原始資料").Range("a2")            '  儲存格物件
  17.         
  18.         Do
  19.            If UCase(W) = "AB" Then
  20.                 K = IIf(cts = 1, Rng.Value, "'" & Rng & " - " & Rng.Cells(1, 2))
  21.             Else
  22.                 K = IIf(UCase(W) = "A", Rng.Value, "'" & Rng & " - " & Rng.Cells(1, 2))
  23.             End If
  24.                
  25.             If D.exists(K) Then                             '  字典物件.exists(Rng.Value) 關鍵字[存在] 條件成立
  26.                 AR = D(K)                                   '  陣列=字典物件(關鍵字)的內容
  27.                 ReDim Preserve AR(UBound(D(K)) + 1)         '  陣列擴充增加一元素
  28.                 AR(UBound(AR)) = Rng.Cells(1, 3).Value      '  陣列增加的元素=C欄的數值
  29.                 D(K) = AR                                   '  字典物件(關鍵字)的內容=陣列
  30.             Else
  31.                 D(K) = Array(Rng.Cells(1, 3).Value)         '  字典物件(關鍵字)的內容=陣列
  32.             End If
  33.             Set Rng = Rng.Offset(1)
  34.         Loop Until Rng = ""
  35.     Next
  36.             
  37.     With Sheets("測試結果")
  38.         .Cells.Clear
  39.             
  40.         If D.Count > 0 Then
  41.             i = 1
  42.             For Each K In D.keys                            '  K = 字典物件(關鍵字)
  43.                 .Cells(1, i) = K
  44.                 .Cells(2, i).Resize(UBound(D(K)) + 1) = Application.WorksheetFunction.Transpose(D(K))  '  讀取內容
  45.                 i = i + 1
  46.             Next
  47.         End If
  48.     End With
  49. End Sub
複製代碼

TOP

回復 11# Hsieh
回復 14# Genie
Hsieh 版大新年愉快!
經測試發現有點小瑕玼,修改了一點
  1. '  s = Application.CountIf(.Range(A, A.End(xlDown)), A)
  2. s = Application.CountIf(.Range("A" & j, .[A2].End(xlDown)), .Cells(j, "A"))
複製代碼
過程如附圖:

TOP

        靜思自在 : 做好事不能少我一人,做壞事不能多我一人。
返回列表 上一主題