Board logo

標題: 如何將横列資料轉為直列並編號 [打印本頁]

作者: msmplay    時間: 2018-3-7 21:16     標題: 如何將横列資料轉為直列並編號

[attach]28415[/attach]
請問如何將上方横列從左到右的訂單+編號,以公式變成右邊直列從上到下的方式呈現
1. 如橫列訂單的編號有2筆以上,則直列訂單自動加-1、-2……
例如:儲存格A5訂單IT97802521,共有B5、C5兩個編號,故轉到N欄訂單排列時,會自動生成IT97802521、IT97802521-1兩張訂單,O欄則帶出該訂單兩個編號,以此類推…

2. 單一訂單的編號如果有重複,則不重複抓取,僅抓取唯一值即可。
例如:儲存格A7訂單IT96801568,雖然有三個編號,但C7號F7編號重複,故只需抓取其中1筆編號即可。故轉到N欄訂單排列時,訂單IT96801568只會有IT96801568、IT96801568-1,不會有IT96801568-2。
儲存格A15訂單IT2D800727以此類推

3. 空白儲存格及Y無需抓取。

特別提醒,上方橫列資料是由系統抓取,發現好像空格並非空白格,應該是有無法列印字元或隱藏字元我猜,因為選取B2:J19時使用尋找>特殊目標>空格,發現並非全為空格。
但我不知道醬會不會影響………


[attach]28416[/attach]
作者: ML089    時間: 2018-3-8 09:00

C2與B16編號相同
同列編號相同只取1個,但不同列編號相同要取嗎?
作者: msmplay    時間: 2018-3-8 09:18

回復 2# ML089

M大~~~不同列互不影響,以同列為檢查為主,謝謝你~~~~~
作者: Hsieh    時間: 2018-3-8 17:05

回復 3# msmplay
這種問題不建議使用函數來解
應該採用VBA輔助較為省事
作者: msmplay    時間: 2018-3-8 17:19

回復 4# Hsieh

H大~~~~那請問VBA有解ㄇ?因為我沒有頭緒其實
作者: Hsieh    時間: 2018-3-8 17:33

回復 5# msmplay

兩種方式
1.執行ex程序寫入P,Q欄
2.寫成自定義函數,陣列公式在R,S欄
  [attach]28421[/attach]
作者: msmplay    時間: 2018-3-8 22:25

回復 6# Hsieh


   H大~~~~你實在是太厲害了!!!還真的完全解決了我的一大問題耶!!!!超感謝你的~~~~~~~~~~~~
作者: hcm19522    時間: 2018-3-9 12:51

本帖最後由 hcm19522 於 2018-3-9 13:06 編輯

K2:K26{=INDIRECT(TEXT(SMALL(IF((COUNTIF(OFFSET(B$1,ROW($1:$18),,,COLUMN(A:I)),B$2:J$19)=1)*(LEN(B$2:J$19)>1),ROW(B$2:J$19)/1%+1),ROW(A1)),"!R0C00"),)&IF(T(INDIRECT(TEXT(SMALL(IF((COUNTIF(OFFSET(B$1,ROW($1:$18),,,COLUMN(A:I)),B$2:J$19)=1)*(LEN(B$2:J$19)>1),ROW(B$2:J$19)/1%+1),ROW(A1)),"!R0C00"),))=LEFT(K1,10),-COUNTIF(K$1:K1,LEFT(K1,10)&"*"),"")


二段有色字體相同

L2:L26{=IFERROR(INDIRECT(TEXT(SMALL(IF((COUNTIF(OFFSET(B$1,ROW($1:$18),,,COLUMN(A:I)),B$2:J$19)=1)*(LEN(B$2:J$19)>1),ROW(B$2:J$19)/1%+COLUMN(B:J)),ROW(A6)),"!R0C00"),),"")[attach]28426[/attach]
作者: msmplay    時間: 2018-3-9 20:25

回復 8# hcm19522


   h大~~~~你也好厲害喔!!!
作者: Andy2483    時間: 2023-12-19 10:13

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教
執行前:
[attach]37144[/attach]

執行結果:
[attach]37145[/attach]


Sub TEST()
Dim 資料陣列, 空陣列, 字典, i&, j%, 空陣列已使用列數&, 同列不重複編號數%
Set 字典 = CreateObject("Scripting.Dictionary")
資料陣列 = Range([J2], [A65536].End(xlUp))
ReDim 空陣列(1 To 10000, 1 To 2)
For i = 1 To UBound(資料陣列)
   訂單 = Trim(資料陣列(i, 1))
   同列不重複編號數 = 0
   For j = 2 To UBound(資料陣列, 2)
      If Trim(資料陣列(i, j)) = "Y" Or Trim(資料陣列(i, j)) = "" Then GoTo j01
      If 字典(Trim(資料陣列(i, j)) & i) <> "" Then
         GoTo j01
         Else
         字典(Trim(資料陣列(i, j)) & i) = "X"
      End If
      空陣列已使用列數 = 空陣列已使用列數 + 1
      同列不重複編號數 = 同列不重複編號數 + 1
      If 同列不重複編號數 = 1 Then
         空陣列(空陣列已使用列數, 1) = 訂單
         Else
         空陣列(空陣列已使用列數, 1) = 訂單 & "-" & 同列不重複編號數 - 1
      End If
      空陣列(空陣列已使用列數, 2) = Trim(資料陣列(i, j))
j01: Next
Next
[P2].Resize(空陣列已使用列數, 2) = 空陣列
End Sub
作者: hcm19522    時間: 2023-12-19 11:29

(輸入編號12154) google網址:https://hcm19522.blogspot.com/




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