ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何通过VBA输入复杂的公式

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-9-1 12:42 | 显示全部楼层 |阅读模式

我想通过VBA用循环的方式,在某列的连续单元格中输入比较复杂的公式,不知如何实现,请高手指点.

公式为:IF(A3="","",IF(SEARCH("/",A3)=3,VALUE(MID(A3,12,3)),IF(SEARCH("/",A3)=2,VALUE(MID(A3,11,3)),VALUE(MID(A3,10,3)))))

RQjKPaEz.rar (183.68 KB, 下载次数: 37) 在E至O列中输入如单元格中的公式,请LONGIII老师指点,谢谢!
[此贴子已经被作者于2005-9-1 13:00:14编辑过]

TA的精华主题

TA的得分主题

发表于 2005-9-1 12:55 | 显示全部楼层

先對第一個單元格設置你的公式, 然後用AutoFill來自動填充, 可快速完成, 而不用循環方式.以下例程僅供參考:

range("c1").Formula = "=a1 & "","" & b1"

range("c1").AutoFill Destination:=Range("C1:C3")

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-9-1 13:16 | 显示全部楼层

文件已上传

在E至O列中输入如单元格中的公式,请LONGIII老师指点,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-9-1 13:56 | 显示全部楼层
如此多谢Long_III兄了。
[此贴子已经被作者于2005-9-1 15:13:24编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-9-1 15:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2005-9-1 15:36 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-9-1 15:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

就是就是,因为我是刚学,另一个数据统计汇总的宏大概要5分钟,我对数组不了解,所以用的是CELLS(),很慢的。

我先试自己改改,要是不行,还要麻烦Long_III兄了。

TA的精华主题

TA的得分主题

发表于 2005-9-1 16:10 | 显示全部楼层
To 烟雨厦江南,在我的签名处链接的帖子里有关于数组的部分例子,楼主有空可以去看看

TA的精华主题

TA的得分主题

发表于 2005-9-1 15:40 | 显示全部楼层

兄台过奖了,这样的问题不用数组做,我怕速度不行啊

TA的精华主题

TA的得分主题

发表于 2005-9-1 15:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我把你其他部分都删除了,只保留了相应的部分,你看看里面的代码,自己学习,掌握了就可以自己改 y6weq8Y6.rar (45.39 KB, 下载次数: 161)

由于数据有2000行,判断较多,运行时间约为2秒,代码如下:

Private Sub CommandButton1_Click() Dim arr Dim arr1() Dim irow%, i% Dim a, b Dim atime Dim c As Range

atime = Timer

Application.ScreenUpdating = False '关闭屏幕更新,防止闪屏及加快代码速度 irow = [a65536].End(xlUp).Row '计算A列非空得最后一行 arr = Range("a3:b" & irow) '把单元格赋值给数组

ReDim arr1(1 To irow - 2, 1 To 11) For i = 1 To irow - 2 a = Split(arr(i, 1), "-") '参考split函数哦 b = Split(a(0), "/")

arr1(i, 1) = b(0) arr1(i, 2) = b(1) arr1(i, 3) = b(2) arr1(i, 4) = a(1) arr1(i, 5) = IIf(UBound(a) > 1, a(UBound(a)), "") '前1~5列来自第一列单元格

Set c = Sheets("在线批号").Columns(1).Find(arr(i, 2), lookat:=xlWhole) If Not c Is Nothing Then arr1(i, 6) = c.Offset(0, 1) '第6列是根据批号来查找的 End If

arr1(i, 7) = Switch(arr1(i, 3) = 0, -1, arr1(i, 3) < 50, 1, arr1(i, 3) >= 50, 0) '第7列

If arr1(i, 4) = 0 Then '第8列的计算过程 arr1(i, 8) = -1 ElseIf (arr1(i, 3) / arr1(i, 4)) < (167 / 144) Then arr1(i, 8) = 1 Else arr1(i, 8) = 0 End If

arr1(i, 9) = IIf(arr1(i, 1) = "W", 1, 0) '第9列的计算过程

Set c = Sheets("在线批号").Columns(6).Find(arr1(i, 2), lookat:=xlWhole) If Not c Is Nothing Then arr1(i, 11) = c.Offset(0, 1) '第11列是根据纱种来查找的 End If

If arr1(i, 11) >= 1 Then arr1(i, 10) = 2 ElseIf arr1(i, 11) < 0 Then arr1(i, 10) = -1 ElseIf (arr1(i, 7) + arr1(i, 8)) > 0 Then arr1(i, 10) = 1 Else arr1(i, 10) = 0 '第10列的计算过程 End If

Next

Range("e3").Resize(irow - 2, 11) = arr1 '把数组赋值给单元格

Application.ScreenUpdating = True MsgBox "Already Done!Total:=" & Format(Timer - atime, "0.00") & "s" '记录运算的时间

End Sub

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 12:32 , Processed in 0.047047 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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