Office中国论坛/Access中国论坛
标题: 判断条件后执行代码求教 [打印本页]
作者: wang1950317 时间: 2013-11-25 14:32
标题: 判断条件后执行代码求教
本帖最后由 wang1950317 于 2013-11-25 20:09 编辑
各位老师们好!在A B C列输入数据后 在D列计算结果
已知 AB两列一定有数据,C 列有时置空
想要达到的目的:
1如果C列为空,执行下面的代码:
Range("D1").Select
Selection.FormulaArray="=IF(SUM(--ISNUMBER(A1:B1)),AVERAGE(IF(ISNUMBER(A1:B1),A1:B1,RIGHT(A1:B1,LEN(A1:B1)-1)/2)),A1)"
Selection.AutoFill Destination:=Range("D1100"),Type:=xlFillDefault Range("D1100").Select
若果C列也有数据,执行下列代码:
Range("D1").Select
Selection.FormulaArray="=IF(SUM(--ISNUMBER(A1:C1)),AVERAGE(IF(ISNUMBER(A1:C1),A1:C1,RIGHT(A1:C1,LEN(A1:C1)-1)/2)),A1)"
Selection.AutoFill Destination:=Range("D1100"),Type:=xlFillDefault Range("D1:D100").Select
2 当AB(C)有数据才计算,没有数据不出现0
上面的两段代码怎样改动?
有位老师给出以下代码:
Sub Macro2()
Dim Arr, i&
[d:d].ClearContents
Arr = Sheet1.UsedRange
For i = 1 To UBound(Arr)
If Arr(i, 1) = "" Then GoTo 100
If Arr(i, 3) <> "" Then
Cells(i, 4).FormulaArray = _ "=IF(SUM(--ISNUMBER(RC[-4]:RC[-2])),AVERAGE(IF(ISNUMBER(RC[-4]:RC[-2]),RC[-4]:RC[-2],RIGHT(RC[-4]:RC[-2],LEN(RC[-4]:RC[-2])-1)/2)),RC[-4])"
Else
Cells(i, 4).FormulaArray = _
"=IF(SUM(--ISNUMBER(RC[-3]:RC[-2])),AVERAGE(IF(ISNUMBER(RC[-3]:RC[-2]),RC[-3]:RC[-2],RIGHT(RC[-3]:RC[-2],LEN(RC[-3]:RC[-2])-1)/2)),RC[-3])"
End If
100:
Next
End Sub
*****************
打开工作簿文件时有提示:“ 。。。在打开工作簿时有一个循环引用,在当前情况下,无法列出造成循环的引用。请利用编制菜单的撤销命令删除上次键入的公式,或直接编辑该公式。”继续运行后,当C为空值时,计算完全正确,但在ABC三列都有数据时计算结果均为0.请专家指教!谢谢!
[attach]52744[/attach]
作者: ganlinlao 时间: 2013-11-25 16:56
不清楚你的公式是要做什么,具体你再根据你的需要改公式。但最好不要使用数组公式
代码如下:
Private Sub CommandButton1_Click()
Dim i As Long, j As Long
j = Sheet1.UsedRange.Rows.Count
For i = 1 To j
If Cells(i, 1) = "" Or Cells(i, 2) = "" Then GoTo 100
If Cells(i, 3).Value = "" Then
Cells(i, 4).Formula = _ "=IF(SUM(--ISNUMBER(RC[-3]:RC[-2])),AVERAGE(IF(ISNUMBER(RC[-3]:RC[-2]),RC[-3]:RC[-2],RIGHT(RC[-3]:RC[-2],LEN(RC[-3]:RC[-2])-1)/2)),RC[-3])"
Else
Cells(i, 4).Formula = _ "=IF(SUM(--ISNUMBER(RC[-3]:RC[-1])),AVERAGE(IF(ISNUMBER(RC[-3]:RC[-1]),RC[-3]:RC[-1],RIGHT(RC[-3]:RC[-1],LEN(RC[-3]:RC[-1])-1)/2)),RC[-2])"
End If
100:
Next
End Sub
作者: wang1950317 时间: 2013-11-25 20:01
谢谢ganlinlao老师指教。
很抱歉,我没有把想要达到的目的说清楚。
我要达到的目的如下:在一个命令按钮中完成A B C 3列求均值的计算,计算结果放在D列:
A B C 列数据分以下几种情况:
A B C D
0.25 0.26 0.27 = Average(A1:C1)(3个数字都不带<号,取3个数的均值)
0.24 0.26 = Average(A1:B1)(2个数字都不带<号,取2个数的均值)
<0.2 <0.2 <0.2 =<0.2 (3个数全带<号)
<0.21 <0.21 =<0.21 (2个数全带<号)
如果 3个单元格中有1个或两个带<号,则取<后面的数字的一半求均值,如:
<0.6 <0.6 2.2 =(0.3+0.3+2.2)/3
0.33 0.26 <0.24 =(0.33+0.26+0.12)/3
<0.4 0.3 =(0.2+0.3)/2
(1 每一行中带<的值<后面的数字相同
2 A列 B列 不会置空,只有一部分C列没有数值)
请继续指教,谢谢!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) |
Powered by Discuz! X3.3 |