標題:
[發問]
陣列資料依欄位抬頭名稱進行擺放
[打印本頁]
作者:
art00083303
時間:
2016-4-15 21:28
標題:
陣列資料依欄位抬頭名稱進行擺放
本帖最後由 art00083303 於 2016-4-15 21:30 編輯
需求如下圖所示:
[attach]23863[/attach]
列數不變,欄位會有增減
完成的紅色表格中,欄位抬頭排序不限。
我目前作法:
1.跑回圈方式抓取各日期下的資料,判斷欄位數量NN,將數據丟進列Arrdata(4-1,NN)中
2.將Arrdata()依欄位順序丟入紅色表格,這個步驟我想破頭不知道該如何達成,初步思緒:
a.因陣列資料Arrdata(0,NN)包含欄位抬頭名稱,不曉得是否能夠判斷Arrdata()內依欄位抬頭名稱放入資料,若缺欄位就新增欄。
b.或是我的思緒是不可行的,有請大大指導。
作者:
luhpro
時間:
2016-4-16 04:12
本帖最後由 luhpro 於 2016-4-16 04:17 編輯
回復
1#
art00083303
[attach]23873[/attach]
Sub NN()
Dim iI%, iJ%, iCol%
Dim lRow&
Dim aR()
Dim vD
[B22:I100].Clear ' 清掉上一次的資料
Set vD = CreateObject("Scripting.Dictionary")
iCol = 4
While Cells(21, iCol) <> ""
vD(CStr(Cells(21, iCol))) = iCol ' vD(項目名稱) = 欄位號碼
iCol = iCol + 1
Wend
lRow = 22
For iI = 2 To 14 Step 6 ' 3 個表格
For iJ = 1 To 3
With Cells(lRow, 2)
.NumberFormat = "yyyy/m/d"
.Value = Cells(iI + iJ, 2) ' DATE
End With
With Cells(lRow, 3)
.NumberFormat = "hh:mm"
.Value = Cells(iI + iJ, 3) ' TIME
End With
iCol = 4
While Cells(iI + iJ, iCol) <> "" ' HTM 與 其他
With Cells(lRow, vD(CStr(Cells(iI, iCol))))
.Value = Cells(iI + iJ, iCol)
.Interior.ColorIndex = Cells(iI + iJ, iCol).Interior.ColorIndex ' 設定底色
End With
iCol = iCol + 1
Wend
lRow = lRow + 1
Next
Next
End Sub
複製代碼
[attach]23874[/attach]
最後, 再呼籲一下,
若資料較多且無規律性,
請開串的人順便提供範例檔,
可加快大家回文的速度. (節省 Key 範例檔資料的時間)
作者:
art00083303
時間:
2016-4-16 09:21
回復
2#
luhpro
謝謝luhpro 大大
我吸收一下您提供的代碼,
您的呼籲是我思考未周到之處,一定改進~!
作者:
art00083303
時間:
2016-4-16 10:57
回復
2#
luhpro
試run了大大提供的Code,
發現您的方式是,總表欄位名稱已知,將3個表格資料分門別類完成總表。
我的問題傾向於已知欄位為3個表的欄位抬頭(扣除"日期"、"時間"欄,總表Total未必是6欄),藉由大大提供的CODE,小弟欲改進地方卡在於:
判斷總共有幾個欄位抬頭(重複欄位算做1欄),本例中重複性的有6欄,非重複性的有2欄,因此總表形成欄位共有6+2欄。
還請大大指教。
[attach]23878[/attach]
作者:
luhpro
時間:
2016-4-17 23:12
回復
4#
art00083303
那就在抓取資料時, 一併建立結果標題攔 : (當然, 順序會變成依抓取先後排列)
[attach]23892[/attach]
Private Sub cbMerge_Click()
Dim iI%, iJ%, iSCol%, iTCol%
Dim lRow&
Dim aR()
Dim vD
Rows("21:" & Rows.Count).Clear ' 清掉上一次的資料(含標題攔)
Set vD = CreateObject("Scripting.Dictionary")
Cells(21, 2) = "DATE"
Cells(21, 3) = "TIME"
lRow = 22
iTCol = 4
For iI = 2 To 14 Step 6 '3 個表格
iSCol = 4
While Cells(iI, iSCol) <> "" ' 檢查標題攔
If Not (vD.Exists(CStr(Cells(iI, iSCol)))) Then
vD(CStr(Cells(iI, iSCol))) = iTCol
Cells(21, iTCol) = Cells(iI, iSCol)
iTCol = iTCol + 1
End If
iSCol = iSCol + 1
Wend
For iJ = 1 To 3
With Cells(lRow, 2)
.NumberFormat = "yyyy/m/d"
.Value = Cells(iI + iJ, 2) ' DATE
End With
With Cells(lRow, 3)
.NumberFormat = "hh:mm"
.Value = Cells(iI + iJ, 3) ' TIME
End With
iSCol = 4
While Cells(iI + iJ, iSCol) <> ""
With Cells(lRow, vD(CStr(Cells(iI, iSCol))))
.Value = Cells(iI + iJ, iSCol)
.Interior.ColorIndex = Cells(iI + iJ, iSCol).Interior.ColorIndex ' 複製底色
End With
iSCol = iSCol + 1
Wend
lRow = lRow + 1
Next
Next
End Sub
複製代碼
[attach]23893[/attach]
作者:
art00083303
時間:
2016-4-18 18:23
回復
5#
luhpro
經運行,完全符合需求~!!
謝謝大大,受教了
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)