網上有很多關于pos機編號生成,EXCEL數據處理VBA代碼自動生成太簡單的知識,也有很多人為大家解答關于pos機編號生成的問題,今天pos機之家(www.shbwcl.net)為大家整理了關于這方面的知識,讓我們一起來看下吧!
本文目錄一覽:
1、pos機編號生成
pos機編號生成
這一年來,老婆做社區團購上癮了,每周都會有一大批訂單蜂擁而至,訂單都是在微信群里接龍生成的,送貨時,就遇到了訂單打印的問題,老婆要求我對訂單進行以下處理:
1、分列:把訂單的房號和貨物清單內容分成兩列,方便查閱;
2、排序:把訂單按房號進行排序,方便鄰居來取貨時,快速查詢訂單明細。
微信接龍原始訂單格式
看到訂單格式,我就思考以下幾個問題:
1、分列問題:發現訂單中,房號與貨物清單之間,有的有空格,有的沒空格;有的有一個空格,有的有多個空格;這在EXCEL中手工操作分列處理時,要把沒有空格的加上一個分隔符,以便有可用的“分隔符號”供EXCEL軟件識別;做上述處理后,就可以在EXCEL中做“分列”操作,把訂單數據分為三列,序號1列,房號1列,貨物清單內容1列;
2、排序問題:分列后,要對訂單數據按房號進行升序排序,排序時發現問題,房號2B-4A會被排在房號2B-27H的后面,這是因為EXCEL判斷的依據是房號2B-4A的第4位字符4>房號2B-27H的第4位字符2,而不是我們以為的4<27;如果要實現正確的排序,則要在2B-4A中,4的前面補上一個0,變為2B-04A;這樣在排序時,2B-04A就會按照要求排在2B-27H的前面;做上述處理后,排序結果正確。
3、以上操作都是在EXCEL中手工完成,那么如何用VBA代碼來達成上述所要的結果呢,這時候我求助了ChatGPT。
ChatGPT能幫我們生成代碼,但首先是你的訴求信息要準確,不會被誤解,所以我們在描述功能需求時,要密切注意表達的內容要做到詳細并有確定性。
在ChatGPT中請求生成VBA代碼時,我的請求表述如下:
幫我寫一段VBA代碼,在EXCEL表中,在A列的每個單元格中,從右邊開始找到第一個英文字母,在這個英文字母后插入符號“,”;將A列中包含的空格全部刪除;將A列內容進行“分列”,“分隔符號”為”.”,將分列后的內容寫入右側相鄰的單元格;再將C列內容進行“分列”,“分隔符號“為”,”,將分列后的內容寫入C列和D列;如果C列單元格中的字符位數為5,但左起第1個字符不是“1“,則尋找單元格中的“-“符號,在”-“符號后面插入一個”0“; 如果C列單元格中的字符位數為4,則尋找單元格中的“-“符號,在”-“符號后面插入一個”0“;對C列內容按升序進行排序,對B列內容按1、2、3等差數列重新進行編號;所有有內容的單元格加上框線。
由于ChatGPT一次處理內容篇幅有限,上述300個字的訴求內容,ChatGPT處理到一半就會中止,無法完成后半部分的代碼生成,為了讓ChatGPT能生成完成的代碼,我把上述300字的訴求內容分為兩段來發送:
第一段,
幫我寫一段VBA代碼,在EXCEL表中,在A列的每個單元格中,從右邊開始找到第一個英文字母,在這個英文字母后插入符號“,”;將A列中包含的空格全部刪除;將A列內容進行“分列”,“分隔符號”為”.”,將分列后的內容寫入右側相鄰的單元格;再將C列內容進行“分列”,“分隔符號“為”,”,將分列后的內容寫入C列和D列;
第二段,
幫我寫一段VBA代碼,在EXCEL表中,如果C列單元格中的字符位數為5,但左起第1個字符不是“1“,則尋找單元格中的“-“符號,在”-“符號后面插入一個”0“; 如果C列單元格中的字符位數為4,則尋找單元格中的“-“符號,在”-“符號后面插入一個”0“;對C列內容按升序進行排序,對B列內容按1、2、3等差數列重新進行編號;所有有內容的單元格加上框線。
大家看到,上述請求內容,相比EXCEL軟件手工處理流程,增加了以下細節:
1、由于房號和后面清單內容之間時常會包含多個空格,如果以空格為分隔符號,分列時,VBA代碼會將多個空格視作多個分隔符號,最終會將內容分隔為多個空白列,這并不是我們所想的結果,因此需要先清除訂單內容中的全部空格后,才不會出現上述錯誤;
訂單內容清除空格的代碼如下:
Cells(i, "A").Value = Replace(Cells(i, "A").Value, " ", "")
2、清除全部空格后,你就會發現房號與貨物清單之間缺少分隔符號,無法實現分列操作,那么就需要在房號后面補上分隔符號,譬如“:”,這樣就可以實現讓系統自動進行房號與貨物清單的分列操作;請求內容為:從右邊開始找到第一個英文字母,在這個英文字母后插入符號“;”.
代碼如下:
Do While letterPos > 0
If Mid(cellValue, letterPos, 1) Like "[A-Za-z]" Then
Cells(i, "A").Value = Left(cellValue, letterPos) & ":" & Right(cellValue, Len(cellValue) - letterPos)
Exit Do
End If
letterPos = letterPos – 1
Loop
3、分列后,在對房號排序時發現,單數字房號,在進行降序排序時會排到雙數字房號后面,譬如2B-4A會被排序2B-27H的后面,這樣就需要在4A前插入一個0。用代碼的處理就是先判斷房號的字符位數,如果字符位數為5,就是左起第一個英文字母前加”0”;考慮到有格式如1-4B的房號,要再加個條件“左起第一個字母不為1”;那就是,如果房號字符位數為5,左起第一個字母不為1,就在-符號后面加0;還有一個條件,如果格式如1-4B的房號,就是,如果房號字符位數為4,左起第一個字母為1,就在-符號后面加0;
代碼如下:
For i = 1 To Cells(Rows.count, "C").End(xlUp).Row
'如果字符位數為 5 且左起第 1 個字符不是 "1"
If Len(Cells(i, "C").Value) = 5 And Left(Cells(i, "C").Value, 1) <> "1" Then
'尋找單元格中的 "-" 符號
Cells(i, "C").Value = Replace(Cells(i, "C").Value, "-", "-0")
'如果字符位數為 4
ElseIf Len(Cells(i, "C").Value) = 4 Then
'尋找單元格中的 "-" 符號
Cells(i, "C").Value = Replace(Cells(i, "C").Value, "-", "-0")
End If
Next i
其它的如排序、編序號、單元格加框線的操作都不難,這里不再贅述。
將訴求內容發送給ChatGPT獲得自動生成的VBA代碼
將訴求內容發給ChatGPT,ChatGPT自動生成代碼,再把生成的代碼張貼到EXCEL的開發工具菜單中的VBA對話框中,點擊運行按鈕,EXCEL自動進行數據處理,生成我們希望得到的結果。
原始訂單數據經VBA處理后提到的結果符合訴求
附錄:完整代碼如下,
Sub ModifyData()
Dim lastRow As Long
lastRow = Cells(Rows.count, "A").End(xlUp).Row
Dim i As Long
For i = 1 To lastRow
' 從右邊開始找到第一個英文字母,在這個英文字母后插入符號":"
Dim cellValue As String
cellValue = Cells(i, "A").Value
Dim letterPos As Integer
letterPos = Len(cellValue)
Do While letterPos > 0
If Mid(cellValue, letterPos, 1) Like "[A-Za-z]" Then
Cells(i, "A").Value = Left(cellValue, letterPos) & ":" & Right(cellValue, Len(cellValue) - letterPos)
Exit Do
End If
letterPos = letterPos - 1
Loop
' 將A列中包含的空格全部刪除
Cells(i, "A").Value = Replace(Cells(i, "A").Value, " ", "")
' 將A列內容進行"分列","分隔符號"為".",將分列后的內容寫入右側相鄰的單元格
Dim arr() As String
arr = Split(Cells(i, "A").Value, ".")
Cells(i, "B").Value = arr(0)
Cells(i, "C").Value = arr(1)
' 再將C列內容進行"分列","分隔符號"為":",將分列后的內容寫入C列和D列
arr = Split(Cells(i, "C").Value, ":")
Cells(i, "C").Value = arr(0)
Cells(i, "D").Value = arr(1)
Next i
'遍歷 C 列的每個單元格
For i = 1 To Cells(Rows.count, "C").End(xlUp).Row
'如果字符位數為 5 且左起第 1 個字符不是 "1"
If Len(Cells(i, "C").Value) = 5 And Left(Cells(i, "C").Value, 1) <> "1" Then
'尋找單元格中的 "-" 符號
Cells(i, "C").Value = Replace(Cells(i, "C").Value, "-", "-0")
'如果字符位數為 4
ElseIf Len(Cells(i, "C").Value) = 4 Then
'尋找單元格中的 "-" 符號
Cells(i, "C").Value = Replace(Cells(i, "C").Value, "-", "-0")
End If
Next i
'對 C 列內容按升序進行排序
With Range("C1", Cells(Rows.count, "C").End(xlUp))
.Sort Key1:=.Cells(1), Order1:=xlAscending, Header:=xlNo
End With
'對 B 列內容按 1、2、3 等差數列重新進行編號
For i = 1 To Cells(Rows.count, "B").End(xlUp).Row
Cells(i, "B").Value = i
Next i
'所有有內容的單元格加上框線
Dim rng As Range
Dim ws As Worksheet
Set ws = ThisWorkbook.ActiveSheet
For Each rng In ws.UsedRange
If Len(rng.Value) > 0 Then
rng.Borders.LineStyle = xlContinuous
End If
Next rng
End Sub
以上就是關于pos機編號生成,EXCEL數據處理VBA代碼自動生成太簡單的知識,后面我們會繼續為大家整理關于pos機編號生成的知識,希望能夠幫助到大家!









