請問如何將上方横列從左到右的訂單+編號,以公式變成右邊直列從上到下的方式呈現
如橫列訂單的編號有2筆以上,則直列訂單自動加-1、-2……
例如:儲存格A5訂單IT97802521,共有B5、C5兩個編號,故轉到N欄訂單排列時,會自動生成IT97802521、IT97802521-1兩張訂單,O欄則帶出該訂單兩個編號,以此類推…
單一訂單的編號如果有重複,則不重複抓取,僅抓取唯一值即可。
例如:儲存格A7訂單IT96801568,雖然有三個編號,但C7號F7編號重複,故只需抓取其中1筆編號即可。故轉到N欄訂單排列時,訂單IT96801568只會有IT96801568、IT96801568-1,不會有IT96801568-2。
儲存格A15訂單IT2D800727以此類推
空白儲存格及Y無需抓取。
特別提醒,上方橫列資料是由系統抓取,發現好像空格並非空白格,應該是有無法列印字元或隱藏字元我猜,因為選取B2:J19時使用尋找>特殊目標>空格,發現並非全為空格。
但我不知道醬會不會影響………
測試檔https://drive.google.com/open?id=1LO2TY2LldC2SwbSjhrzdFGt2H_UbcnRQ
樓主試試把您的excel檔另存為"Book1.csv"(逗點分隔),
新建一個文字檔,檔名設為"gentNewOrder.vbs"
然後將下列源碼內容用記事本貼到gentNewOrder.vbs中並存檔,
把Book1.csv跟gentNewOrder.vbs放在同個目錄下,
雙擊gentNewOrder.vbs就會產出output.csv
(output.csv可以用excel軟體開啟)
Dim sysPath, sFile, oFile, objFSO, objFileS, objFileO, ii
sysPath=PathRemoveFileSpec1(WScript.ScriptFullName)
sFile = sysPath & "\Book1.csv"
oFile = sysPath & "\output.csv"
WSH.echo sysPath
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFileS = objFSO.OpenTextFile( sFile, 1)
Set objFileO = objFSO.OpenTextFile( oFile, 2,true)
objFileO.writeLine "訂單,編號"
ii=0
Do Until objFileS.AtEndOfStream
tmpLine=objFileS.ReadLine
IF ii>0 THEN '略過標題列
myArray = Split(tmpLine,chr(44))
tmpORD=myArray(0)
ordCount=0
tmpSnFound=""
FOR jj = 1 TO 9
tmpSN = myArray(jj)
IF tmpSN<>"" AND tmpSN<>"Y" AND LEN(tmpSN)>2 AND InStr(tmpSnFound,tmpSN)=0 THEN
IF ordCount>0 THEN
objFileO.writeLine tmpORD & "-" & ordCount & "," & tmpSN
ELSE
objFileO.writeLine tmpORD & "," & tmpSN
END IF
tmpSnFound= tmpSnFound & tmpSN &","
ordCount = ordCount + 1
END IF
NEXT
END IF
ii = ii + 1
Loop
objFileS.close
objFileO.close
'下列是取得當前路徑的函式不要修改它
Function PathRemoveFileSpec1(strFileName)
' 將Unix路徑 / 替換為 \
strFileName = Replace(strFileName, "/", "\")
Dim iPos
' 從路徑開始搜尋\,這樣從第一個字元到這個位置
' 就是我們所需要的
iPos = InStrRev(strFileName, "\")
' 使用Left函式保留需要的部份
PathRemoveFileSpec1 = Left(strFileName, iPos)
End Function
我想的手動的步驟是
你要做的事情
光用 Excel 基本操作應該做不到
寫寫 VBA 或許還有機會
最好的辦法
是去改
產生這個 Excel 的那隻程式