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