楼主: linjed
10921 7

[实际应用] 请教有关EXCEL中迭代计算的问题,用公式或VBA解决都行。 [推广有奖]

  • 0关注
  • 0粉丝

已卖:12份资源

大专生

70%

还不是VIP/贵宾

-

威望
0
论坛币
58 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3023 点
帖子
33
精华
0
在线时间
85 小时
注册时间
2010-2-12
最后登录
2021-3-7

楼主
linjed 发表于 2013-2-23 23:31:49 |AI写论文
5论坛币


8 分钟前


只在A1输入50, B1显示50,再在A1输入50,B1显示100. 即B1=A1+B1.  
当删除A1数据,B1就清零。使用EXCEL中的迭代计算。B1 的公式是:
=IF(A1="",0,IF(CELL("address")="$A$1",A1+B1,B1))  
现问题是:如果A1 输入0,或其他数值后发现有误,于是删除A1的值。但使得B1返回最近一次计算的累计数而不清0.
该如何编写公式,或者代码如何写呢?
实在没有多少论坛币,为表谢意,故悬赏5个,虽不多,但表一点心意。
望各位高手帮忙,不胜感激。

关键词:EXCEL 迭代计算 xcel exce cel address EXCEL 如何

回帖推荐

linjed 发表于7楼  查看完整内容

谢谢, 我后来在一本书上看到,用宏实现的。但是对A1这个单元格的计算,要是对(A1:A5)区域的计算,不知道怎么修改呢? Dim i Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then If Target.Value = "" Then Range("B1") = Range("B1") - i Else Range("B1") = Range("B1") + Target.Value End If End If End Sub Priv ...

本帖被以下文库推荐

沙发
积少成多123 发表于 2013-2-25 10:57:25
=IF(A1=0,0,IF(CELL("address")="$A$1",A1+B1,B1))

迭代次数设为1

藤椅
linjed 发表于 2013-2-25 13:07:51
积少成多123 发表于 2013-2-25 10:57
=IF(A1=0,0,IF(CELL("address")="$A$1",A1+B1,B1))

迭代次数设为1
谢谢您的回复。
删除A1,结果就清0了。
没能返回最近一次计算的结果。

板凳
积少成多123 发表于 2013-2-25 13:44:17
linjed 发表于 2013-2-25 13:07
谢谢您的回复。
删除A1,结果就清0了。
没能返回最近一次计算的结果。
  1. =IF(A1<>"",A1+B1,B1)
复制代码
如果删除A1的值,需要保留最近一次计算的结果这样就可以了

报纸
linjed 发表于 2013-2-26 13:05:40
积少成多123 发表于 2013-2-25 13:44
如果删除A1的值,需要保留最近一次计算的结果这样就可以了
想要能达到这种效果。例如:
A1 输入 2, B1=2
A1输入3,  B1=5
A1输入5, B1=10
把 A1的5,删除后,B1=5.

地板
TaskShare 发表于 2013-4-13 22:33:30
linjed 发表于 2013-2-26 13:05
想要能达到这种效果。例如:
A1 输入 2, B1=2
A1输入3,  B1=5
我愚见,你这个要求用公式是办不到的。只有用宏(macro)。即每次A1发生改变后,你得运行一次宏,让宏把运算结果输出到B1,这样就能行(当然是麻烦了,但我认为这是我能想到的达到你要求的做法了)。编这样的宏应该不难,如果你需要,我可以写出代码。

7
linjed 发表于 2013-4-18 13:35:57
谢谢,  我后来在一本书上看到,用宏实现的。但是对A1这个单元格的计算,要是对(A1:A5)区域的计算,不知道怎么修改呢?
Dim i
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        If Target.Value = "" Then
            Range("B1") = Range("B1") - i
        Else
            Range("B1") = Range("B1") + Target.Value
        End If
    End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        i = Target.Value
    End If
End Sub
已有 1 人评分经验 论坛币 收起 理由
客初 + 20 + 20 热心帮助其他会员

总评分: 经验 + 20  论坛币 + 20   查看全部评分

8
zen□ 发表于 2017-11-8 14:54:28
Private Sub Worksheet_Change(ByVal T As Range)
    Application.EnableEvents = False
    If T.Column = 3 And T.Row >= 2 And T.Row <= 13 Then
        T.Offset(0, 2) = T.Offset(0, 2) + T
    End If
    Application.EnableEvents = True
End Sub

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-3 11:43