[EXCEL]如何運用VBA自訂函數排序重整字串(贈點20)

2009-12-31 9:05 am
本人從事倉儲相關行業,近日要將倉儲品項建檔以方便管理,不過舊有的資料儲存方式不太友善,嘗試使用自訂函數將資料重新自動整理,目前有許多瓶頸要解決,如獲高手答覆且能順利解決,將贈送20點了表心意。

舊有資料形式
1.  CREF EGH R & FEGE EE AB & CREF EGH A
2.  EXCEY AB & EXCZY E & EXCEY E
3.  XXCERFT S & XXCERFT FC

說明:
1.此三筆資料為其中一部分舉例,原始資料約數萬筆。
2.除左方數字為索引外,右方儲存格內容記錄物品儲放的倉庫貨架編號。
3.倉庫貨架編號最長10個字母(皆為大寫字母且含空格),以字串&區隔不同編號。
4.倉庫貨架編號在同一格儲存格內最多指向三個儲位(也就是說儲存格最多有2個&,最少為0個)。

預定每筆倉庫貨架編號資料,依不同的倉儲地點,以excel文字排序方式,重新校對成有順序的資料,資料形式如下:

1.  CREF EGH A & CREF EGH R & FEGE EE AB
2.  EXCEY AB & EXCEY E & EXCZY E
3.  XXCERFT FC & XXCERFT S

ps1. 原第三移至第一、原第一移至第二、原第二移至第三
ps2. 原第三移至第二、原第二移至第三
ps3. 第一第二互換


因為資料量過於龐大(數萬筆),故希望能以vba自訂函數的方式答覆,以便快速產出資料,以利清點^_^
ps.目前的做法是將原始長字串以&區隔拆成3組(或2組)字串,然後依EXCEL排序方式A→Z,最後再合成一長字串,不過在含數排序方面就遇到瓶頸了。
更新1:

因為YAHOO自動排版問題..... " & " 其實是 " & " (and符號) " → " 其實是 " → " (右箭頭) 造成閱讀困難時分抱歉^^"

回答 (1)

2010-01-01 4:54 am
✔ 最佳答案
版大舉例可能與實況有所不同,初步寫出兩個vba,未必切合實況,請先用複製本試行,發現不妥時再修改。

vba (分列字串)

Sub mySplit()

Dim arr(1 To 65000, 1 To 10)
Dim NRow&, R&, xStr$
NRow = Cells(Rows.Count, 1).End(xlUp).Row

For R = 1 To NRow
xStr = Trim(Cells(R, 1))
If xStr = "" Then GoTo nextrow

xStr = Replace(xStr, ".", "&")
xStrs = Split(xStr, "&")

For i = 0 To UBound(xStrs)
arr(R, i + 1) = Trim(xStrs(i))
Next

nextrow:
Next

[c1].Resize(R, 10) = arr

End Sub

輸出將寫入 C~F 欄,核對無誤後,請手動刪除 A,B 欄,然後執行以下程式:

vba (每列獨立排序)

Sub mySort()

NRow = Cells(Rows.Count, 1).End(xlUp).Row
For R = 1 To NRow
Rows(R).Sort Cells(R, 1), xlAscending, Orientation:=xlLeftToRight
Next

End Sub

2009-12-31 21:13:18 補充:
上面 Sub mySort() 改用下面 vba 可能會跑快點。

Sub mySort2()

ActiveSheet.UsedRange.Rows.Sort Columns(1), xlAscending, Orientation:=xlLeftToRight

End Sub

2009-12-31 21:27:49 補充:
版大排序例子有混亂,

2.  EXCEY AB & EXCEY E & EXCZY E
依此方式
ps2. 原第三移至第二、原第二移至第三

變為
2.  EXCEY AB & EXCZY E & EXCEY E
2.   小     大     中


收錄日期: 2021-04-27 17:24:25
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20091231000015KK00412

檢視 Wayback Machine 備份