Board logo

標題: [發問] 請問要如何切割數據以方便做圖? [打印本頁]

作者: Genie    時間: 2013-12-17 16:56     標題: 請問要如何切割數據以方便做圖?

因為工作需求
所以常常要將圖畫成 sheet2 的樣子
但是從資料庫抓下來的 data 是 sheet1 排列方式
請問該怎麼做才能快速將資料變成 sheet2 的形式以方便做圖呢?

Sheet2 是先對 1. EQ 2. TIME 做排序
再看 EQ 有多少 group 再依順序列在 TIME 的後面,並將同 group 的數值往旁邊移
且根據需要,在 group 的最後插入 0~n 的空白列
(每個 group 後面插入的空白列都是一樣的,不會有的插入一列,有的不插入)
最後再畫出折線圖。

有時候 group 太多,數據會移到亂掉,所以希望藉由 VBA 快速又不易弄錯來達成需求。
排序的部份我可以自己手動排序,但數據切割的部份希望由 VBA 達成。
請幫幫忙,謝謝∼

[attach]17074[/attach]
作者: stillfish00    時間: 2013-12-20 21:50

本帖最後由 stillfish00 於 2013-12-20 22:01 編輯

回復 1# Genie
  1. Sub test()
  2.     Dim ar, d, arEQ, i As Long
  3.    
  4.     '複製來源
  5.     With Sheets("Sheet1")
  6.         .AutoFilterMode = False
  7.         .[A1].CurrentRegion.Copy Sheets("Sheet2").[A1]
  8.         .[A1].AutoFilter
  9.     End With
  10.    
  11.     With Sheets("Sheet2")
  12.         '排序
  13.         With .Sort
  14.             .SortFields.Clear
  15.             .SortFields.Add .Parent.Range("B2:B" & Rows.Count), xlSortOnValues, xlAscending
  16.             .SortFields.Add .Parent.Range("C2:C" & Rows.Count), xlSortOnValues, xlAscending
  17.             .SetRange .Parent.[A1].CurrentRegion
  18.             .Header = xlYes
  19.             .Orientation = xlTopToBottom
  20.             .SortMethod = xlPinYin
  21.             .Apply
  22.         End With
  23.         
  24.         '找出每段起始位置
  25.         ar = .[A1].CurrentRegion.Value
  26.         Set d = CreateObject("scripting.dictionary")
  27.         For i = 2 To UBound(ar)
  28.             If ar(i, 2) <> ar(i - 1, 2) Then d(ar(i, 2)) = i
  29.         Next i
  30.         
  31.         '由後往前分割,插入空白
  32.         arEQ = d.keys
  33.         For i = UBound(arEQ) To LBound(arEQ) + 1 Step -1
  34.             .Range(.Cells(d(arEQ(i)), "D"), .Cells(.Rows.Count, "D")).Insert xlToRight
  35.             .Rows(d(arEQ(i))).Insert xlDown
  36.         Next i
  37.         .[D1].Resize(, d.Count).Value = d.keys
  38.     End With
  39. End Sub
複製代碼

作者: Genie    時間: 2013-12-26 13:38

回復 2# stillfish00


不好意思
我從 "With .Sort" 這裡就開始出現錯誤
請問該如何修正?還是我哪裡有弄錯呢?
謝謝!
作者: stillfish00    時間: 2013-12-26 15:03

回復 3# Genie
可能你的版本比較舊,語法不支援
把排序那段換成
  1.         '排序
  2.         .[A1].CurrentRegion.Sort key1:=.[B1], order1:=xlAscending, key2:=.[C1], order2:=xlAscending, Header:=xlYes, Orientation:=xlTopToBottom
複製代碼
試看看
作者: Genie    時間: 2013-12-26 16:30

回復 4# stillfish00


排序的部份沒有出現錯誤訊息了
但下一步又跳出 error "ar = .[A1].CurrentRegion.Value"
這裡該怎麼修改呢?

我 Excel 的版本是 2003
這也是版本差異的問題嗎?
謝謝!
作者: stillfish00    時間: 2013-12-26 20:46

回復 5# Genie
可能吧...我沒辦法測試舊版本
寫法很多種,自己試試吧
ar = Range(.[A1],.[A1].end(xldown)).resize(,4).Value
作者: Genie    時間: 2013-12-27 10:39

回復 6# stillfish00


還是不行

因為公司只能使用 2003 版
可能語法不支援
所以會一直出現錯誤吧……




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)