|
楼主 |
发表于 2024-8-15 14:12
|
显示全部楼层
感谢各位大佬的帮助,本人的简单vba改写完成了
Sub 表头工单工价()
Columns("T:AA").EntireColumn.Hidden = True
Columns("I:Q").EntireColumn.Hidden = True '隐藏工作表项目
Range("AB1").Formula = "工单标准值"
Range("AC1").Formula = "zpp017 1600"
Range("AD1").Formula = "差异"
Range("AE1").Formula = "zpp017 1000"
Range("AF1").Formula = "倍数"
Range("AG1").Formula = "目标价"
Range("AH1").Formula = "物料号"
Rows("1:1").AutoFilter
Dim lt1 As Long
lt1 = Sheets("数据源").Range("a83895").End(xlUp).Row
Range("A1:AH" & lt1).AutoFilter Field:=8, Criteria1:=Array("抽条", "底料复合", "面料复合"), Operator:=xlFilterValues
ActiveWorkbook.Names.Add Name:="数据源!_FilterDatabase", RefersTo:="=数据源!$A$1:$AH$" & lt1, Visible:=False '设定一个区域命名并赋值,下标错误是写法问题,两个地方要改,1.表名sheet,2.下标
Dim j As Integer
j = Rows("2:20000").SpecialCells(12).Row
Rows(j & ":" & lt1).Select '75已替代
Selection.Delete Shift:=xlShiftUp
Rows("1:1").AutoFilter '至剔除抽条复合,完善表头
Rows("1:1").AutoFilter '下面部分为物料号排序
With ActiveSheet.AutoFilter.Sort
With .SortFields
.Clear
.Add Key:=Range("D1"), Order:=xlAscending
End With
.Header = xlYes
.MatchCase = False
.SortMethod = xlPinYin
.Orientation = xlSortColumns
.Apply '排序结束
End With
Dim lt2 As Long
lt2 = Sheets("数据源").Range("a83895").End(xlUp).Row
Range("A1:AH" & lt2).AutoFilter Field:=4, Criteria1:="=07*", Operator:=xlOr, Criteria2:="=8*" '筛选7和8开头的物料
Range("AH2").Formula = "=LEFT(D2,9)"
Range("AB2").Formula = "=S2/R2"
Range("AC2").Formula = "=XLOOKUP(AH2&G2,'zpp017 1600'!A:A&'zpp017 1600'!I:I,'zpp017 1600'!K:K)" '修改中,删除了匹配过程
Range("AD2").Formula = "=AB2-AC2"
Range("Ae2").Formula = "=XLOOKUP(AH2&G2,'zpp017 1000'!A:A&'zpp017 1000'!I:I,'zpp017 1000'!K:K)"
Range("AF2").Formula = "=AC2/AE2"
Range("AG2").Formula = "=AE2*250"
Range("AB2:AH2").AutoFill Destination:=Range("AB2:AH" & lt2), Type:=xlFillDefault '至此处完成07和8头物料删除填充
Dim lt3 As Long
lt3 = Sheets("数据源").Range("a88888").End(xlUp).Row
Range("A1:AH" & lt2).AutoFilter Field:=4, Criteria1:="<>07*", Operator:=xlAnd, Criteria2:="<>8*" '筛选非数字开头物料号,也可使用xl12替代简化
lt3 = lt3 + 1
Range("AB" & lt3).Formula = "=s" & lt3 & "/r" & lt3 '使用lt3进行赋值替代
Range("AC" & lt3).Formula = "=XLOOKUP(b:b&g:g,'zpp017 1600'!A:A&'zpp017 1600'!I:I,'zpp017 1600'!K:K)" '修改为型体号
Range("AD" & lt3).Formula = "=AC" & lt3 & "-AB" & lt3 '做差
Range("AE" & lt3).Formula = "=XLOOKUP(b:b&g:g,'zpp017 1000'!A:A&'zpp017 1000'!I:I,'zpp017 1000'!K:K)"
Range("AF" & lt3).Formula = "=AC" & lt3 & "/ae" & lt3
Range("AG" & lt3).Formula = "=AE" & lt3 & "* 250" '这一步需要改写
Dim lt4 As Long
lt4 = Sheets("数据源").Range("a83895").End(xlUp).Row
Range("ab" & lt3 & ":" & "aH" & lt3).AutoFill Destination:=Range("ab" & lt3 & ":" & "aH" & lt4), Type:=xlFillDefault '至此完成非07和8开头物料填充
End Sub
发在这里一是给我这样的萌新提供一些参考,另一方面是防止数据丢失 |
|