標題:
[發問]
資料排列問題
[打印本頁]
作者:
sandra_wang
時間:
2010-10-27 16:04
標題:
資料排列問題
本帖最後由 sandra_wang 於 2010-10-29 15:28 編輯
想請教各位前輩~
(請大家幫我看看附件)
我要如何把左邊的資料依照Max數量,Min數量,Middle數量把資料從左邊排列到右邊?
排列的規則是從H欄位開始,只要H欄位不是0的就要把欄位B~E的資料填到右邊表格
H欄位數量如果是"1",右邊表格就填入一次,數量如果是"2",右邊表格就填入2次,依此類推...
H欄位的部份處理完,接著換I欄位的部份,
I欄位數量如果是"1",右邊表格就填入一次,數量如果是"2",右邊表格就填入2次,依此類推…
最後是J欄位的部份,
J欄位數量如果是"1",右邊表格就填入一次,數量如果是"2",右邊表格就填入2次,依此類推…
還有右邊表格的表頭也要有讓它自動跑出來Max_1, Max_2,...
拜託大家幫幫我看看要怎麼用VBA寫呢?
(我還是小學生沒辦法下載檔案,請大家多多指教!!)
作者:
kimbal
時間:
2010-10-28 00:05
其實這個不一定要用VBA
如果MAX,MIDDLE,MIN下數字沒重覆 可以用公式得出
M3=INDIRECT("B"&MATCH(1,H:H,0))
M4=INDIRECT("C"&MATCH(1,H:H,0))
M5=INDIRECT("D"&MATCH(1,H:H,0))
M6=INDIRECT("E"&MATCH(1,H:H,0))
N3=INDIRECT("B"&MATCH(2,H:H,0))
N4=INDIRECT("C"&MATCH(2,H:H,0))
N5=INDIRECT("D"&MATCH(2,H:H,0))
N6=INDIRECT("E"&MATCH(2,H:H,0))
....
公式的方法也有很多,可以試試找找
作者:
sandra_wang
時間:
2010-10-28 15:58
感謝版主的回答~~
但是欄位B-欄位J 的資料會一直變化,每次進來的資料都不同,所以沒辦法用INDIRECT去比對。
因為每次進來的資料欄位H-J的數量都不一定,只要不是零的時候,就要把那列的資料填到右邊表格,
而且數量是多少,那筆資料就要出現幾次,
還是希望各位前輩可以再指導我一下,謝謝大家。
作者:
oobird
時間:
2010-10-28 16:08
你應該po你的文件,想幫你的人才幫得上手。
難道你要別人參照你的圖去建個檔案?
作者:
sandra_wang
時間:
2010-10-28 17:25
謝謝樓上的超級版主提醒!!
已經補上了!!
作者:
Hsieh
時間:
2010-10-28 18:08
本帖最後由 Hsieh 於 2010-10-28 19:56 編輯
回復
5#
sandra_wang
妳的範例的middle好像應該只有一筆才對
Sub Ex()
Dim A As Range, d As Object, Col As Integer, s As Long, r As Long, k As Integer, Mystr As String
Dim ky As Variant
Set d = CreateObject("Scripting.Dictionary")
Set A = Range([M1], [M1].End(xlToRight))
A.Resize(10, A.Count) = ""
Col = 13
For k = 8 To 10
If Application.Count(Columns(k)) > 0 Then
For Each A In Columns(k).SpecialCells(xlCellTypeConstants, 1)
For i = 1 To A
s = s + 1
r = A.Row
Mystr = Replace(Cells(1, k), "數量", "_") & s
d(Mystr) = Application.Transpose(Cells(r, 2).Resize(, 4))
Next
Next
For Each ky In d.keys
Cells(1, Col) = ky
Cells(3, Col).Resize(4, 1) = d(ky)
Col = Col + 1
Next
End If
s = 0: d.RemoveAll
Next
End Sub
複製代碼
作者:
sandra_wang
時間:
2010-10-29 15:06
回覆#6 Hsieh 超級版主~
謝謝你提供我這個答案,因為有些我還是看不是很懂,但是我自己有調整後再試了一下!
因為我有三種產品需要這樣的排列,CPU,HDD,Memory
但是我自己改過之後,CPU的排列我可以順利跑出來,可是HDD和Memory的部份就跑不出來,
可以請樓上的超級版主幫我看看我哪裡錯了嗎?(我改過的部分有用紅色的字體標示)
我有附上檔案,請幫我看"問題part2"的附件
作者:
sandra_wang
時間:
2010-10-29 15:30
回覆#6 Hsieh 超級版主~
可以請你幫看看"我的問題part2",
我的CPU本來可以跑出來,現在Priority 3 & Vendor的資料又跑不出來了,會出現#N/A。
其他HDD&Memory的資料我要怎麼調整它才會跑到橘色跟淺綠藍色的位置呢?
謝謝你!!
作者:
GBKEE
時間:
2010-10-29 17:09
回復
8#
sandra_wang
每一程序是依據,每各個案所量身訂製的 .不一定套用的上.
請要說明一下差異是在哪裡, 檔案是如此龐大我找得眼花也看不出來如何幫你.
第一個問題 另有一解請參考
Sub Ex()
Dim Rng(1 To 2) As Range, i%, ii%, C%, T%, E
With Sheet1
.Range("M1", .Range("M1").End(xlToRight)).EntireColumn.Clear
Set Rng(1) = .Range("L3", .Range("L3").End(xlDown))
C = 1
For i = 8 To 10
T = 1 '欄位數量->歸零
For Each E In .Range(.Cells(1, i), .Cells(Rows.Count, i).End(xlUp)).SpecialCells(xlCellTypeConstants).Cells
If Val(E) > 0 Then
For ii = 1 To Val(E)
Set Rng(2) = Rng(1).Offset(, C)
.Cells(1, Rng(2).Column) = Replace(.Cells(1, i), "數量", "_" & T)
Rng(2).Value = Application.Transpose(.Cells(E.Row, "b").Resize(, 4))
Rng(2).Interior.ColorIndex = E.Interior.ColorIndex
C = C + 1 '往右加1欄 Rng(1).Offset(, C)
T = T + 1
Next
End If
Next
Next
End With
End Sub
複製代碼
作者:
Hsieh
時間:
2010-10-29 19:35
本帖最後由 Hsieh 於 2010-10-29 19:37 編輯
回復
8#
sandra_wang
Sub Ex()
Dim A As Range
Set d = CreateObject("Scripting.Dictionary")
Set Rng = Range("CL2,CX2,DJ2")
[ED2:EL65536] = ""
r = 2
For Each A In Rng
k = 135
For i = 7 To 9
s = 1
If Application.Count(A.Offset(, i).EntireColumn) > 0 Then
Cells(r, 134).Resize(5, 1) = Application.Transpose(Array(A, A.Offset(1, 1), A.Offset(1, 2), A.Offset(1, 3), A.Offset(1, 4)))
For Each b In A.Offset(, i).EntireColumn.SpecialCells(xlCellTypeConstants, 1)
For j = 1 To b
Mystr = Cells(3, b.Column) & "_" & s
s = s + 1
d(Mystr) = Application.Transpose(Cells(b.Row, A.Column + 1).Resize(, 4))
Next
Next
For Each ky In d.keys
Cells(r, k) = ky: Cells(r + 1, k).Resize(4, 1) = d(ky)
k = k + 1
Next
d.RemoveAll
End If
Next
r = r + 12
Next
End Sub
複製代碼
作者:
sandra_wang
時間:
2010-11-4 09:48
謝謝#9 & #10你們的幫忙
作者:
sandra_wang
時間:
2010-11-9 15:17
謝謝樓上兩位的回覆!!
感激~~
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)