ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创]★将公式保存在宏中★

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-12-12 08:48 | 显示全部楼层
LangQueS 发表于 2011-12-11 22:06
Sheet2的公式中引用了Sheet6,工作簿中没有这个工作表。

附件我重新上传,sheet2和sheet3有公式的行数在30000行左右

外购入库数据录入.zip

19.71 KB, 下载次数: 29

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-12 10:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 LangQueS 于 2011-12-12 11:54 编辑
lindw 发表于 2011-12-12 08:48
附件我重新上传,sheet2和sheet3有公式的行数在30000行左右


sheet2的公式如下,是在2003中做的,请在2007中测试一下:

Sub 表2公式()
Application.Calculation = xlCalculationManual       '手动重算
With Sheets("sheet2")
a = [d65536].End(xlUp).Row
    If a > 1 Then
        .Range("A2:A" & a).FormulaR1C1 = "=IF(RC[3]="""","""",VLOOKUP(RC[3],数据录入!C:C[3],4,))"
        .Range("B2:B" & a).FormulaR1C1 = _
        "=IF(RC[2]="""","""",VLOOKUP(RC[2],数据录入!C[-1]:C[1],3,))"
        .Range("C2:C" & a).FormulaR1C1 = _
        "=IF(RC[1]="""","""",VLOOKUP(RC[1],数据录入!C[-2]:C[12],15,))"
        .Range("A2:C" & a) = .Range("A2:C" & a).Value
        
        .Range("E2:E" & a).FormulaR1C1 = _
        "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],数据录入!C[-4]:C[11],16,))"
        .Range("E2:E" & a) = .Range("E2:E" & a).Value
        
        .Range("H2:H" & a).FormulaR1C1 = _
        "=IF(RC[-4]="""","""",IF(SUMIF(数据录入!C[-7],Sheet2!RC[-4],数据录入!C[2])>=0,1,-1))"
        .Range("I2:I" & a).FormulaR1C1 = "=IF(RC[-5]="""","""",1)"
        .Range("J2:J" & a).FormulaR1C1 = "=IF(RC[-6]="""","""",数据录入!R2C[13])"
        .Range("K2:K" & a).FormulaR1C1 = _
        "=IF(RC[-7]="""","""",VLOOKUP(RC[-7],数据录入!C[-10]:C[-6],5,))"
        .Range("L2:L" & a).FormulaR1C1 = _
        "=IF(RC[-8]="""","""",VLOOKUP(RC[-8],数据录入!C[-11]:C[-6],6,))"
        .Range("M2:M" & a).FormulaR1C1 = _
        "=IF(RC[-9]="""","""",VLOOKUP(RC[-9],数据录入!C[-12]:C[4],17,))"
        .Range("N2:N" & a).FormulaR1C1 = _
        "=IF(RC[-10]="""","""",VLOOKUP(RC[-10],数据录入!C[-13]:C[4],18))"
        .Range("O2:O" & a).FormulaR1C1 = _
        "=IF(RC[-11]="""","""",VLOOKUP(RC[-11],数据录入!C[-14]:C[4],19,))"
        .Range("P2:P" & a).FormulaR1C1 = _
        "=IF(RC[-12]="""","""",VLOOKUP(RC[-12],数据录入!C[-15]:C[4],20,))"
        .Range("Q2:Q" & a).FormulaR1C1 = _
        "=IF(RC[-13]="""","""",IF(RC[1]=""赊购"",""P002"",""P001""))"
        .Range("R2:R" & a).FormulaR1C1 = _
        "=IF(RC[-14]="""","""",VLOOKUP(RC[-14],数据录入!C[-17]:C[3],20,))"
        .Range("S2:S" & a).FormulaR1C1 = "=IF(RC[-15]="""","""",162)"
        .Range("H2:S" & a) = .Range("H2:S" & a).Value
        
        .Range("W2:W" & a).FormulaR1C1 = "=IF(RC[-19]="""","""",0)"
        .Range("X2:X" & a).FormulaR1C1 = "=IF(RC[-20]="""","""",0)"
        .Range("Y2:Y" & a).FormulaR1C1 = _
        "=IF(RC[-21]="""","""",IF(VLOOKUP(RC[-21],数据录入!C[-24]:C[-23],2,)=0,"""",VLOOKUP(RC[-21],数据录入!C[-24]:C[-23],2,)))"
        .Range("w2:y" & a) = .Range("w2:y" & a).Value
    End If
End With
Application.Calculation = xlCalculationAutomatic    '自动重算
End Sub

TA的精华主题

TA的得分主题

发表于 2011-12-12 11:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
LangQueS 发表于 2011-12-12 10:42
sheet2的公式如下,是在2003中做的,请在2007中测试一下:
Sub 表2公式()
Application.Calculation  ...

执行后没反应也没显示结果

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-12 11:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 LangQueS 于 2011-12-12 11:56 编辑
lindw 发表于 2011-12-12 11:03
执行后没反应也没显示结果


抱歉,错了一个字符:

If d > 1 Then

改为

If a > 1 Then


外购入库数据录入.rar

17.11 KB, 下载次数: 48

TA的精华主题

TA的得分主题

发表于 2011-12-12 14:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
LangQueS 发表于 2011-12-12 10:42
sheet2的公式如下,是在2003中做的,请在2007中测试一下:
Sub 表2公式()
Application.Calculation  ...

我测试过后,发现有几个问题需要LangQueS老师帮忙修改解决一下,谢谢
1、sheet2的数据行数如果少于5行的话会自动在A6单元格显示一数值,请查一下是什么原因。
2、sheet2中J列的问题,如果J2为1500的话则J3就为1501,J4为1502,即每多一行的值加1。
3、sheet2中K、M、O三列的单元格式发生变化了,例如K2变为1.01了,但实际应为01.01

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-12 16:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
lindw 发表于 2011-12-12 14:50
我测试过后,发现有几个问题需要LangQueS老师帮忙修改解决一下,谢谢
1、sheet2的数据行数如果少于5行的 ...

代码中的  Range("a6") = a  那一行是测试用的,删除即可。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-12 16:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-12-12 17:08 | 显示全部楼层
LangQueS 发表于 2011-12-12 16:48

2、sheet2中J列的问题,如果J2为1500的话则J3就为1501,J4为1502,即每多一行的值加1。
3、sheet2中K、M、O三列的单元格式发生变化了,例如K2变为1.01了,但实际应为01.01

只解决了第一个问题,上面两个还没解决

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-12 17:17 | 显示全部楼层
lindw 发表于 2011-12-12 17:08
2、sheet2中J列的问题,如果J2为1500的话则J3就为1501,J4为1502,即每多一行的值加1。
3、sheet2中K、M ...

你可以自己修改一下原公式,再录制到宏中即可。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-12 17:22 | 显示全部楼层
  1. Sub 公式()
  2. Application.Calculation = xlCalculationManual       '手动重算
  3. With Sheets("Sheet2")
  4. a = .Range("d65536").End(xlUp).Row
  5.     If a > 1 Then
  6.         .Range("A2:A" & a).FormulaR1C1 = "=IF(RC[3]="""","""",VLOOKUP(RC[3],数据录入!C:C[3],4,))"
  7.         .Range("B2:B" & a).FormulaR1C1 = _
  8.         "=IF(RC[2]="""","""",VLOOKUP(RC[2],数据录入!C[-1]:C[1],3,))"
  9.         .Range("C2:C" & a).FormulaR1C1 = _
  10.         "=IF(RC[1]="""","""",VLOOKUP(RC[1],数据录入!C[-2]:C[12],15,))"
  11.         .Range("A2:C" & a) = .Range("A2:C" & a).Value
  12.         
  13.         .Range("E2:E" & a).FormulaR1C1 = _
  14.         "=IF(RC[-1]="""","""",VLOOKUP(RC[-1],数据录入!C[-4]:C[11],16,))"
  15.         .Range("E2:E" & a) = .Range("E2:E" & a).Value
  16.         
  17.         .Range("H2:H" & a).FormulaR1C1 = _
  18.         "=IF(RC[-4]="""","""",IF(SUMIF(数据录入!C[-7],Sheet2!RC[-4],数据录入!C[2])>=0,1,-1))"
  19.         .Range("I2:I" & a).FormulaR1C1 = "=IF(RC[-5]="""","""",1)"
  20.         .Range("J2:J" & a).FormulaR1C1 = "=IF(RC[-6]="""","""",数据录入!R2C[13])+ROW()-2"
  21.         .Range("K2:K" & a).FormulaR1C1 = _
  22.         "=--IF(RC[-7]="""","""",VLOOKUP(RC[-7],数据录入!C[-10]:C[-6],5,))"
  23.         .Range("L2:L" & a).FormulaR1C1 = _
  24.         "=IF(RC[-8]="""","""",VLOOKUP(RC[-8],数据录入!C[-11]:C[-6],6,))"
  25.         .Range("M2:M" & a).FormulaR1C1 = _
  26.         "=--IF(RC[-9]="""","""",VLOOKUP(RC[-9],数据录入!C[-12]:C[4],17,))"
  27.         .Range("N2:N" & a).FormulaR1C1 = _
  28.         "=IF(RC[-10]="""","""",VLOOKUP(RC[-10],数据录入!C[-13]:C[4],18))"
  29.         .Range("O2:O" & a).FormulaR1C1 = _
  30.         "=--IF(RC[-11]="""","""",VLOOKUP(RC[-11],数据录入!C[-14]:C[4],19,))"
  31.         .Range("P2:P" & a).FormulaR1C1 = _
  32.         "=IF(RC[-12]="""","""",VLOOKUP(RC[-12],数据录入!C[-15]:C[4],20,))"
  33.         .Range("Q2:Q" & a).FormulaR1C1 = _
  34.         "=IF(RC[-13]="""","""",IF(RC[1]=""赊购"",""P002"",""P001""))"
  35.         .Range("R2:R" & a).FormulaR1C1 = _
  36.         "=IF(RC[-14]="""","""",VLOOKUP(RC[-14],数据录入!C[-17]:C[3],20,))"
  37.         .Range("S2:S" & a).FormulaR1C1 = "=IF(RC[-15]="""","""",162)"
  38.         .Range("H2:S" & a) = .Range("H2:S" & a).Value
  39.         
  40.         .Range("W2:W" & a).FormulaR1C1 = "=IF(RC[-19]="""","""",0)"
  41.         .Range("X2:X" & a).FormulaR1C1 = "=IF(RC[-20]="""","""",0)"
  42.         .Range("Y2:Y" & a).FormulaR1C1 = _
  43.         "=IF(RC[-21]="""","""",IF(VLOOKUP(RC[-21],数据录入!C[-24]:C[-23],2,)=0,"""",VLOOKUP(RC[-21],数据录入!C[-24]:C[-23],2,)))"
  44.         .Range("w2:y" & a) = .Range("w2:y" & a).Value
  45.     End If
  46. End With
  47. Application.Calculation = xlCalculationAutomatic    '自动重算
  48. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 08:59 , Processed in 0.044918 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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