返回列表 上一主題 發帖

如何將横列資料轉為直列並編號

如何將横列資料轉為直列並編號


請問如何將上方横列從左到右的訂單+編號,以公式變成右邊直列從上到下的方式呈現
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時使用尋找>特殊目標>空格,發現並非全為空格。
但我不知道醬會不會影響………


測試檔.rar (10.51 KB)
*宅女一枚無誤*

(輸入編號12154) google網址:https://hcm19522.blogspot.com/
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

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


執行結果:



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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 8# hcm19522


   h大~~~~你也好厲害喔!!!
*宅女一枚無誤*

TOP

本帖最後由 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"),),"") 55-4156.rar (14.56 KB)
1

評分人數

    • ML089: 太利害了金錢 + 5
google"EXCEL迷"  blog  或google網址:https://hcm19522.blogspot.com/

TOP

回復 6# Hsieh


   H大~~~~你實在是太厲害了!!!還真的完全解決了我的一大問題耶!!!!超感謝你的~~~~~~~~~~~~
*宅女一枚無誤*

TOP

回復 5# msmplay

兩種方式
1.執行ex程序寫入P,Q欄
2.寫成自定義函數,陣列公式在R,S欄
   轉置表格.zip (20.82 KB)
學海無涯_不恥下問

TOP

回復 4# Hsieh

H大~~~~那請問VBA有解ㄇ?因為我沒有頭緒其實
*宅女一枚無誤*

TOP

回復 3# msmplay
這種問題不建議使用函數來解
應該採用VBA輔助較為省事
學海無涯_不恥下問

TOP

回復 2# ML089

M大~~~不同列互不影響,以同列為檢查為主,謝謝你~~~~~
*宅女一枚無誤*

TOP

        靜思自在 : 改變自己是自救,影響別人是救人。
返回列表 上一主題