|
本帖最后由 果冻控 于 2019-11-9 00:23 编辑
大家好:
我写了个宏,目前能运行,但是有关于分列与汇总有些问题,1是想按固定宽度分列,2是想另外数据量大的时候运算就会很慢。
Sub 转换汇总()
'
' Macro
'
'
Sheets("合并清单").Activate
选中合并清单标签
[AX:AX].TextToColumns DataType:=xlTextFormat
[BF:BF].TextToColumns DataType:=xlTextFormat
[BT:BT].TextToColumns DataType:=xlTextFormat
把AX,BF,BT列通过分列转换成数字
这里想多实现一个把G列的右十二位分出来放到J,之前思路是
Columns("G:G").Select
Dim a As Range
For Each a In Selection
a.Offset(0, 3) = Right(a, 12)
Next a
但是真实运行有十几万条数据很慢,现在思路想通过TextToColumns分列出右12位,或者先把J=G然后按固定宽度分列,前4个字符一列,其余一列。
然后把AX列的-替换成1,这个环节应该也能优化一下
Columns("AX:AX").Select
Selection.Replace What:="-", Replacement:="1", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, MatchByte:=False, SearchFormat:=True, ReplaceFormat:=True
然后进行筛选,把主类型的条目A到CL列复制到汇总表
Cells.Select
Cells.AutoFilter
ActiveWorkbook.Names.Add Name:="合并清单!_FilterDatabase", RefersTo:="=合并清单!$A$1:$CS$65535", Visible:=False
Range("A1:CS65536").AutoFilter Field:=48, Criteria1:=Array("主类型"), Operator:=xlFilterValues
ActiveWorkbook.Names.Add Name:="合并清单!_FilterDatabase", RefersTo:="=合并清单!$A$1:$CS$65535", Visible:=False
Columns("A:CL").Select
Selection.Copy
Sheets("汇总").Activate
Columns("A:A").Select
ActiveSheet.Paste
Sheets("合并清单").Activate
Cells.Select
Cells.AutoFilter
Sheets("汇总").Activate
End Sub
最后,汇总表的汇总金额是通过公式sumif,统计明细里单号与汇总里J列相同的条目加出来的,如果能用宏快速实现就最好了。
其实本来应该是直接匹配单号但是不知道为什么匹配出来的金额会不对,截取右11位倒是对的,也是无奈之举。。请各位老师指点。
|
|