Board logo

標題: 較複雜的重新排序 [打印本頁]

作者: wei9133    時間: 2018-7-19 14:54     標題: 較複雜的重新排序

這次是較複雜的重新排序
首先,先感謝在上一帖協助的各位
現在碰到一個更麻煩的排序(先前那個應該算是以2重排)
這次的有可能是9、12、15
需求一樣,先將總行數除以總數,並重新排列
以15為例,總數假定為75 (其實大概是幾百到一千,太多我不好做範例)
原本的順序應該是1~75
新的排列,我直接用excel打出來應該長這樣
圖1
[attach]29004[/attach]
1張A4紙上面可以印15格,但他是3*5 然後照順序印出
但這15格要撕開來,就會變成不照順序了(要一張一張排)

我希望的是讓他變成這樣
圖2
[attach]29005[/attach]

所以新排列應該是 (詳見附件的D欄)
1
6
11
16
21
26
31
36
41
46
51
56
61
66
71

這樣我就可以在原始資料做一個輔助列,先將用1~75排列(這個數其實不固定)
然後再加一個第二輔助列,並用第二輔助列做重新排序
以達到將原本的圖1順序改成圖2的目的
[attach]29006[/attach]

可以的話,做出來的表格有一個欄位讓我填變數的數量(A4紙要裁成9格、12格、15格)
不能的話先有15格的版本也好
感謝您的協助 m(_ _)m

附件
[attach]29007[/attach]
作者: hcm19522    時間: 2018-7-19 17:29

G1:K4=IF(MOD(ROW(A1),4)=0,"",(MOD(ROW(A1),4)-1)*5+INT(ROW(A1)/4)*15+COLUMN(A1))

G1:K4複製到G5:K20
作者: wei9133    時間: 2018-7-20 00:01

本帖最後由 wei9133 於 2018-7-20 00:03 編輯
G1:K4=IF(MOD(ROW(A1),4)=0,"",(MOD(ROW(A1),4)-1)*5+INT(ROW(A1)/4)*15+COLUMN(A1))

G1:K4複製到G5:K20
hcm19522 發表於 2018-7-19 17:29


不好意思,看樣子是我沒講清楚
我需要的最後結果應該是這張圖
[attach]29023[/attach]

原帖的圖1跟圖2是實際印出來的效果(實際印製成是吃的是文字檔,並逐行獲取,所以我希望用excel先做重新排序,以達圖2效果)
圖1圖2是我不會算只好一格一格填出來的...
作者: hcm19522    時間: 2018-7-20 09:50

回復 3# wei9133

{=INDIRECT(TEXT(SMALL(IF(M$1:Q$19>0,COLUMN(M$1:Q$19)+ROW(M$1:Q$19)/1%),ROW(A1)),"!R0C00"),)
作者: wei9133    時間: 2018-7-21 00:59

回復  wei9133

{=INDIRECT(TEXT(SMALL(IF(M$1$19>0,COLUMN(M$1$19)+ROW(M$1$19)/1%),ROW(A1)),"! ...
hcm19522 發表於 2018-7-20 09:50


你好,依照你給的公式丟進去是沒有反應或錯誤的,是我哪裡弄錯?
[attach]29040[/attach]
[attach]29041[/attach]
另外,重點不是那個陣列,是這個
[attach]29039[/attach]
要對原本順序是1~????做重新排序 (這裡先假設為75)
在這裡是以15格為準重新排

讓整疊紙撕出來的第一格位置變成依序
假設有5張紙疊在一起撕第一格的位置會是1~5,第二格會是6~10
這個部分才是要排續的重點,照原本的輸出序列第一格會是1,16,31,46,61
所以請不要管那個看起來像陣列的東西

假如看不懂我的續述的話,就考慮如何讓公式符合這張幾圖吧
[attach]29037[/attach]
[attach]29038[/attach]

感謝各位花時間觀看
作者: a5007185    時間: 2018-7-26 16:55

回復 5# wei9133


你好,
我是利用VBA的方式產生表格,
你看看這樣的設計是否有符合你的需求 : )
[attach]29072[/attach]
  1. Sub CreateForm()
  2.     Dim C&, i%, iStart%, iEnd%, J%, jStart%, jEnd%, P%, PEnd%
  3.     Range(Cells(1, 5), Cells(Cells.Rows.Count, Cells.Columns.Count)).Clear
  4.     PEnd = Range("C5") - 1
  5.     For P = 0 To PEnd
  6.         If Range("C2") = "" Then
  7.             C = 1 + P
  8.         Else
  9.             C = Range("C2") + P
  10.         End If
  11.         iStart = 2 + P * (Range("C3") + 2)
  12.         iEnd = iStart + Range("C3")
  13.         jStart = 5
  14.         jEnd = jStart + Range("C4")
  15.         For i = iStart To iEnd
  16.             For J = jStart To jEnd
  17.                 Cells(i, J) = C
  18.                 C = C + Range("C5")
  19.             Next
  20.         Next
  21.         SetFormat Range(Cells(iStart, jStart), Cells(iEnd, jEnd))
  22.     Next
  23. End Sub

  24. Sub SetFormat(R As Range)
  25.     With R
  26.         .HorizontalAlignment = xlCenter
  27.         .VerticalAlignment = xlCenter
  28.         .Borders(xlDiagonalDown).LineStyle = xlNone
  29.         .Borders(xlDiagonalUp).LineStyle = xlNone
  30.         .Borders(xlEdgeLeft).LineStyle = xlContinuous
  31.         .Borders(xlEdgeTop).LineStyle = xlContinuous
  32.         .Borders(xlEdgeBottom).LineStyle = xlContinuous
  33.         .Borders(xlEdgeRight).LineStyle = xlContinuous
  34.         .Borders(xlInsideVertical).LineStyle = xlContinuous
  35.         .Borders(xlInsideHorizontal).LineStyle = xlContinuous
  36.     End With
  37. End Sub
複製代碼

作者: wei9133    時間: 2018-7-29 02:03

你好,首先感謝你提供的方法
按下去結果是對的,不過我貼了上面那個格子圖真的是敗筆
(題外話,你的列數跟欄數實際出來的陣列多一)
[attach]29082[/attach]
因為那個是匯入程式後後因出來的效果
實際上我需要的是重新排序在同一欄中

也就是先計算總共有幾列
然後除以需求變數目前可能為(9、12、15)
然後重新排列
鑒於大家都只看首樓,所以我重發了一個帖子
[url=http://forum.twbts.com/viewthread.php?tid=20994&extra=]超鍊結[\url]
若閣下有解法還請移駕賜教

p.s.多虧你這個陣列,要不然我那個提問的數字排序就夠我嗆的了

m(_ _)m 感謝你
作者: wei9133    時間: 2018-7-29 02:43

你好,VBA的部分能否幫我增加總數欄位
表格數與總數擇1選用(可設定優先全為表格)
而總數的部分數字除以欄*列
也就是說若總數為1234 列=3 欄=5 (須先修改原本vba欄列各多1的問題)
表格數就是 =1234/(3*5)
出來的值是82.26667,無條件進位為83
這樣我只要填入總數就不用算總共幾個表格了

然後還需要將值複製到新的欄或新的活頁簿 (這裡可以直接排在D欄)
目前我用的方法是先土法煉鋼的用"=工作表1!E2" (可以看一下附件sheet1的部分)
但多了弄不起來,且無法隨著陣列變更(只能固定3*5)

[attach]29084[/attach]
樣子大概像這樣
  1. =工作表1!E2
  2. =工作表1!F2
  3. =工作表1!G2
  4. =工作表1!H2
  5. =工作表1!I2
  6. =工作表1!E3
  7. =工作表1!F3
  8. =工作表1!G3
  9. =工作表1!H3
  10. =工作表1!I3
  11. =工作表1!E4
  12. =工作表1!F4
  13. =工作表1!G4
  14. =工作表1!H4
  15. =工作表1!I4
  16. =工作表1!E6
  17. =工作表1!F6
  18. =工作表1!G6
  19. =工作表1!H6
  20. =工作表1!I6
  21. =工作表1!E7
  22. =工作表1!F7
  23. =工作表1!G7
  24. =工作表1!H7
  25. =工作表1!I7
  26. =工作表1!E8
  27. =工作表1!F8
  28. =工作表1!G8
  29. =工作表1!H8
  30. =工作表1!I8
  31. =工作表1!E10
  32. =工作表1!F10
  33. =工作表1!G10
  34. =工作表1!H10
  35. =工作表1!I10
  36. =工作表1!E11
  37. =工作表1!F11
  38. =工作表1!G11
  39. =工作表1!H11
  40. =工作表1!I11
  41. =工作表1!E12
  42. =工作表1!F12
  43. =工作表1!G12
  44. =工作表1!H12
  45. =工作表1!I12
複製代碼
順序也就是 (?依欄數而定)
第一個表格的第一層E~?
第二個表格的第一層E~?
最後的表格的第一層E~?

第一個表格的第二層E~?
第二個表格的第二層E~?
最後的表格的第二層E~?

第一個表格的最下層E~?
第二個表格的最下層E~?
最後的表格的最下層E~?

附件我有先把值放在D欄並以紅色標注,不過因為vba本身按下執行後會重製,所以我基本是用sheet1中的部分
放到主頁面是方便你理解。
[attach]29083[/attach]

麻煩你了!!
作者: a5007185    時間: 2018-7-29 11:37

回復 8# wei9133


我居然會犯這種低級錯誤,
覺得好羞恥唷~  QQ


我有修改好成你希望的方式回覆在你最新的主題當中,
請小心食用。




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