网上有很多关于pos机编号生成,EXCEL数据处理VBA代码自动生成太简单的知识,也有很多人为大家解答关于pos机编号生成的问题,今天pos机之家(www.poszjia.com)为大家整理了关于这方面的知识,让我们一起来看下吧!
本文目录一览:
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机编号生成的知识,希望能够帮助到大家!
