中国教程网论坛's Archiver

qyj123 发表于 2007-8-9 20:55

根据A列条件自动变换计算公式

单元格B1=2,C1=3,D1=4,如A1=A则E1=B1+C1+D1;A2=B则E1=B1+C1*D1;A3=C则E1=B1+2*C1*3+D1;A4=D则E1=(B1+C1)*5+D1等等,不用IF函数,是否有查表的方法,谢谢各位大侠万忘指教!

zhangditony 发表于 2007-8-9 21:59

问题不是很清楚,如果A1=A,A2=B,A3=C,A4=D这四个条件都满足,或者满足其中的两个以上,E1应该等于什么呢?

qyj123 发表于 2007-8-10 07:14

不好意思!是A1=A,A1=B,A1=C,A1=D....

zhangditony 发表于 2007-8-10 08:54

方法一:
可以变换一下思路,将A1由A--D的选项,变为1-4的选项,然后可以利用CHOOSE函数求解。
E1=CHOOSE(A1,B1+C1+D1,B1+C1*D1,B1+2*C1*3+D1,(B1+C1)*5+D1)
另:A1单元格可以设置数据-有效性中的“序列”。利用下拉菜单选择。
方法二:
利用添加辅助列的方式

[[i] 本帖最后由 zhangditony 于 2007-8-10 09:47 编辑 [/i]]

qyj123 发表于 2007-8-10 12:41

谢谢大侠指教!但是第一方案类似IF方法不利于公式的增加,第二方法H列中结果是算好手工填进去的吗?如是根据A列条件能自动查找I列中公式算出结果那便是理想的.谢谢指教!

zhangditony 发表于 2007-8-10 13:22

H列单元格输入的就是公式,I列是我给你做的演示,意思是H列输入的内容。

qyj123 发表于 2007-8-10 17:07

还有疑问?当A.B.C.D.E列数据不断向下扩充时E列中数据并不等于公式计算结果.

zhangditony 发表于 2007-8-10 17:16

一个公式里引用的单元格包括绝对引用,相对引用。我给你的vlookup函数中的第二个参数是:G1:H4,是相对引用,会随着单元格的变化而变化。所以你如果将E1的公式复制到E2,E2中VLOOKUP的第二个参数自动变为G2:H5.
结论是根据实际情况调整。如果只取G1:H4范围的数据,可以将引用方式改变为绝对:$G$2:$H$5,这样再复制公式时,引用范围就不会随之改变。还有不明白的,可以发个附件上来,我帮你改。

qyj123 发表于 2007-8-10 20:20

怎样把EXCEL表格传给您?QQ?我的452707808

zhangditony 发表于 2007-8-10 23:23

[quote]原帖由 [i]qyj123[/i] 于 2007-8-10 20:20 发表 [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=1860991&ptid=106323][img]http://bbs.jcwcn.com/images/common/back.gif[/img][/url]
怎样把EXCEL表格传给您?QQ?我的452707808 [/quote]
你的表已经给你改了,因为你要求不用IF函数,所以我做了辅助列,把各行的每组数据(B,C,D)按照不同的计算方法(A-F)进行了运算,然后利用HLOOKUP函数根据A列的数据进行相应的选择。
可以根据实际需要添加新的公式(G,H...),然后将E列公式(=HLOOKUP(A2,$I:$N,ROW(),0))中的第二个参数($I:$N)进行相应修改。

qyj123 发表于 2007-8-11 12:48

谢!是一个好方法,但会使文件体积很大,是否有象指针一样直接调用公式?

qyj123 发表于 2007-8-11 15:46

求教:我的EXCEL中函数中的分搁符由","变成";"?

我的EXCEL中函数中的分搁符由","变成";"?

tiger88 发表于 2007-8-15 22:16

谢谢,长见识了

qyj123 发表于 2007-8-16 22:51

能做到吗?求教?

zhangditony 发表于 2007-8-16 23:01

用宏应该是一个解决的方法。

qyj123 发表于 2007-8-20 23:04

有办法吗?帮忙编写一个宏行吗?

zhangditony 发表于 2007-8-21 23:28

Sub 算法选择()

Dim i As Integer
Dim j As Integer

'A = "B+C+D"
'B = "B*C+D"
'C = "(B+2)*(C+2)"
'D = "(B+C)*2+D"
'E = "(B+2*D)*(C+2*D)"
'F = "B+C+D*3"

i = Worksheets("sheet1").Range(Range("a1"), Range("a1").End(xlDown)).Count
For j = 2 To i
    Select Case Range("a" & j)
        Case Is = "A"
        Range("e" & j).Formula = "=" & "b" & j & "+" & "c" & j & "+" & "d" & j
        Case Is = "B"
        Range("e" & j).Formula = "=" & "b" & j & "*" & "c" & j & "+" & "d" & j
        Case Is = "C"
        Range("e" & j).Formula = "=" & "(b" & j & "+2)" & "*" & "(c" & j & "+2)"
        Case Is = "D"
        Range("e" & j).Formula = "=" & "(B" & j & "+C" & j & ")" & "*2" & "+D" & j
        Case Is = "E"
        Range("e" & j).Formula = "=" & "(B" & j & "+2*" & "D" & j & ")" & "*(C" & j & "+2*D" & j & ")"
        Case Is = "F"
        Range("e" & j).Formula = "=" & "B" & j & "+C" & j & "+D" & j & "*3"
    End Select
Next
End Sub

qyj123 发表于 2007-9-3 21:24

i = Worksheets("sheet1").Range(Range("a1"), Range("a1").End(xlDown)).Count
For j = 2 To i   请帮忙解释一下. 我试过了很好.但是方法不是在A列输入而是在其它
列如H列呢?为什么要2 TO i? 谢谢!

zhangditony 发表于 2007-9-4 09:31

1.For j = 2 To i ,从第二行开始到需要建立公式的最后一行(利用原数据列A列进行判断)
2.A列输入A-F中的任一个字母,E列根据A列进行判断输入公式,楼主可根据实际需要调整。

[[i] 本帖最后由 zhangditony 于 2007-9-4 20:56 编辑 [/i]]

qyj123 发表于 2007-9-4 19:40

i = Worksheets("sheet1").Range(Range("h1"), Range("h1").End(xlDown)).Count
For j = 2 To i
    Select Case Range("h" & j)我改这样的想在H列输入但是只有地一行成功,下面的就
不会变化?请老师教我!

zhangditony 发表于 2007-9-4 21:18

[quote]原帖由 [i]qyj123[/i] 于 2007-9-4 19:40 发表 [url=http://bbs.jcwcn.com/redirect.php?goto=findpost&pid=2160060&ptid=106323][img]http://bbs.jcwcn.com/images/common/back.gif[/img][/url]
i = Worksheets("sheet1").Range(Range("h1"), Range("h1").End(xlDown)).Count
For j = 2 To i
    Select Case Range("h" & j)我改这样的想在H列输入但是只有地一行成功,下面的就
不会变化?请老师教我! [/quote]
试了一下,问题可能是H1你没有输入数据。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.