设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 7162|回复: 2
打印 上一主题 下一主题

判断条件后执行代码求教

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2013-11-25 14:32:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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.请专家指教!谢谢!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2013-11-25 16:56:01 | 只看该作者
不清楚你的公式是要做什么,具体你再根据你的需要改公式。但最好不要使用数组公式
代码如下:
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

点击这里给我发消息

3#
 楼主| 发表于 2013-11-25 20:01:37 | 只看该作者
谢谢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列没有数值)
请继续指教,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-23 19:31 , Processed in 0.098488 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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