ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖

range赋公式缺少语句结束

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-15 13:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Again123456 发表于 2024-8-15 10:52
Formula的值是String类型,其中涉及的单元格部分是Range().Address() 也是String类型才可。如果你一定要 ...

谢谢老师,还有一个问题解决就结束了
Range("AG" & lt3).Formula = "=AE3578*250"这里怎么改写呢?
3578就是lt3的行号,想要实现的效果是aglt3=aelt3值的250倍,不需要使用range

TA的精华主题

TA的得分主题

发表于 2024-8-15 14:08 | 显示全部楼层
会飞的土豆宏宏 发表于 2024-8-15 13:53
谢谢老师,还有一个问题解决就结束了
Range("AG" & lt3).Formula = "=AE3578*250"这里怎么改写呢?
357 ...

Range("AG" & lt3).Formula = "=AE" & lt3 & "*250"

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-15 14:12 | 显示全部楼层
会飞的土豆宏宏 发表于 2024-8-15 13:53
谢谢老师,还有一个问题解决就结束了
Range("AG" & lt3).Formula = "=AE3578*250"这里怎么改写呢?
357 ...

感谢各位大佬的帮助,本人的简单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
发在这里一是给我这样的萌新提供一些参考,另一方面是防止数据丢失

TA的精华主题

TA的得分主题

发表于 2024-8-15 16:51 | 显示全部楼层
会飞的土豆宏宏 发表于 2024-8-15 14:12
感谢各位大佬的帮助,本人的简单vba改写完成了

Sub 表头工单工价()

提几个建议:
1、连续单元格赋值可以用数组一次性赋值,比如一开始的AB1:AH1赋值可以写成Range("AB1:AH1").Value = Array("工单标准值", "zpp017 1600", "差异", "zpp017 1000", "倍数", "目标价", "物料号"),后面的也可以参考这样。
2、SpecialCells方法最好加上错误处理,因为查找不到会报错1004“未找到单元格”。
3、频繁操作单元格开销大,速度慢。题注后面可以学学数组、字典对这些代码进行优化,速度还有很大提升空间。
4、第三条可以慢慢来,现在最好在第一句代码前加上:
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    end sub 前加上
    Application.ScreenUpdating = true
    Application.DisplayAlerts = true
这样也可以适当提高代码运行速度。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-2-1 14:50 , Processed in 0.020018 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表