Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 17242|回复: 10

[已解决]VBA怎么在公式中加入变量?

[复制链接]
发表于 2012-9-25 05:08 | 显示全部楼层 |阅读模式
初学 VBA 不知道怎么加入变量,高手给指点一下
Sub y1()
Dim x As Integer
For x = 2 To 20
Range("c" & x) = "=SUMPRODUCT(($A$2:$A$20<A2)*(1/COUNTIF($A$2:$A$20,$A$2:$A$20)))+1"
End Sub
这个A2 怎么写弄城变量?
最佳答案
2012-9-25 08:34
本帖最后由 rebornxldeng 于 2012-9-25 08:55 编辑

Range("c" & x) = "=SUMPRODUCT(($A$2:$A$20< " & Range("a" & x) & ") *(1/COUNTIF($A$2:$A$20,$A$2:$A$20)))+1"
用VBA语句在单元格中写入公式实际上是以文本格式将公式内容录入单元格;
这也是最开始的双引号后面为什么会紧跟一个等号的原因.
我标蓝的部分是VBA中引用 单元格 的格式.
黄色部分是 公式的文本(中间要录入变量的话,必须在文本的开始和结尾处 使用引号)
蓝色部分会生成一个值,然后黄色部分与该值连起来共同构成一个 完整的可正确计算的 单元格公式.

再弄个简单点的示例 Range("c2") = "=sum(" & Range("c3") & "," & Range("c4") & ")"
这个知识点理解的难点在于,你是以输入公式的思想在解读,但是这个问题
实际上是在单元格中输入文本.
文本1 & 变量1 & 文本2 & 变量2 ... ... & 结束文本
另外,这个知识点了解了即可.其实并不难,实用性也很有限...因为还不如直接在单元格里写公式呢.

发表于 2012-9-25 07:23 | 显示全部楼层
Range("c" & x) = "=SUMPRODUCT(($A$2:$A$20<" & 变量 & ")*(1/COUNTIF($A$2:$A$20,$A$2:$A$20)))+1"
楼主试试,这样成不。
回复

使用道具 举报

 楼主| 发表于 2012-9-25 07:57 | 显示全部楼层
hwc2ycy 发表于 2012-9-25 07:23
Range("c" & x) = "=SUMPRODUCT(($A$2:$A$20

Range("c" & x) = "=SUMPRODUCT(($A$2:$A$20< " & Range("a" & x) & ") *(1/COUNTIF($A$2:$A$20,$A$2:$A$20)))+1"

可以运行 ,能解释下嘛 为啥 加两个引号。。后面的引号 为什么要加在括号内呢? 加外面就出错了

我才学两天 多体谅下{:051:}万分感谢
回复

使用道具 举报

发表于 2012-9-25 08:30 | 显示全部楼层
变量嘛,你加在里面工作表不会认为是变量呀,除非你把那个定义一个名称
这个方法就是一个字符串连接了。
回复

使用道具 举报

发表于 2012-9-25 08:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 rebornxldeng 于 2012-9-25 08:55 编辑

Range("c" & x) = "=SUMPRODUCT(($A$2:$A$20< " & Range("a" & x) & ") *(1/COUNTIF($A$2:$A$20,$A$2:$A$20)))+1"
用VBA语句在单元格中写入公式实际上是以文本格式将公式内容录入单元格;
这也是最开始的双引号后面为什么会紧跟一个等号的原因.
我标蓝的部分是VBA中引用 单元格 的格式.
黄色部分是 公式的文本(中间要录入变量的话,必须在文本的开始和结尾处 使用引号)
蓝色部分会生成一个值,然后黄色部分与该值连起来共同构成一个 完整的可正确计算的 单元格公式.

再弄个简单点的示例 Range("c2") = "=sum(" & Range("c3") & "," & Range("c4") & ")"
这个知识点理解的难点在于,你是以输入公式的思想在解读,但是这个问题
实际上是在单元格中输入文本.
文本1 & 变量1 & 文本2 & 变量2 ... ... & 结束文本
另外,这个知识点了解了即可.其实并不难,实用性也很有限...因为还不如直接在单元格里写公式呢.

评分

参与人数 1 +3 收起 理由
孤单无所谓 + 3 3Q我要的就是解释!我才学两天,啥都不知道.

查看全部评分

回复

使用道具 举报

发表于 2012-9-25 08:34 | 显示全部楼层
hwc2ycy 发表于 2012-9-25 08:30
变量嘛,你加在里面工作表不会认为是变量呀,除非你把那个定义一个名称
这个方法就是一个字符串连接了。

-_-他是没把引号的作用方式搞清楚... ...
回复

使用道具 举报

 楼主| 发表于 2012-9-25 08:51 | 显示全部楼层
rebornxldeng 发表于 2012-9-25 08:34
-_-他是没把引号的作用方式搞清楚... ...

吼吼 你是说 你黄色的前一段 两个引号 算一个 整体 后面的 黄的算一个 ,我用红的标起来的 是我理解错误。。 我前面黄的部分 尾巴的 “ 和 后半部分 头 看做了一个整体。。是这样么{:041:}
回复

使用道具 举报

发表于 2012-9-25 08:57 | 显示全部楼层
孤单无所谓 发表于 2012-9-25 08:51
吼吼 你是说 你黄色的前一段 两个引号 算一个 整体 后面的 黄的算一个 ,我用红的标起来的 是我理解错误。 ...

我在回帖的部分新增了一点内容.
你仔细看看.你提出的这个问题的实质是用VBA在单元格里录入文本.
只不过在录入结束后,因为该文本是以等号开头的,所以EXCEL会对文本内容进行计算,从而产生结果.

评分

参与人数 1 +3 收起 理由
孤单无所谓 + 3

查看全部评分

回复

使用道具 举报

发表于 2022-5-8 14:08 | 显示全部楼层
rebornxldeng 发表于 2012-9-25 08:34
Range("c" & x) = "=SUMPRODUCT(($A$2:$A$20< " & Range("a" & x) & ") *(1/COUNTIF($A$2:$A$20,$A$2:$A$20 ...

真棒

但是 一丢丢的小想法   就是 公式少还行  但是 多 手输就...

还有 就是如果不小心  还可以vba还原   当然  双击+或者拖动 有时候也不错
回复

使用道具 举报

发表于 2022-5-9 15:01 来自手机 | 显示全部楼层
你应该是分类求和,我习惯用sumifs,不过vba用字典更好。vba去输入公式,个人认为意义不大了。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-3 22:23 , Processed in 0.353381 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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