Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2659|回复: 10

[已解决]更新后公式没了

[复制链接]
发表于 2012-11-24 08:11 | 显示全部楼层 |阅读模式
更新后公式没了 更新.rar (12.81 KB, 下载次数: 8)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-11-24 08:57 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-11-24 09:01 编辑

再定义一个数组只有1列。更新的时候只更新D列的内容就成了。
回复

使用道具 举报

发表于 2012-11-24 08:59 | 显示全部楼层
还有你的消费记录写进字典的时候,要考虑同一个人的多次消费嘛。
回复

使用道具 举报

发表于 2012-11-24 09:05 | 显示全部楼层
  1. Sub aa()
  2.     Dim A
  3.     Dim B, C
  4.     Dim d As Object, i As Integer, j As Integer
  5.     Application.ScreenUpdating = False
  6.     Set d = CreateObject("scripting.dictionary")
  7.     B = Sheets("消费").Range("a1").CurrentRegion
  8.     For i = 2 To UBound(B)
  9.         '如果同一ID有多次消费记录,则要用累加
  10.         'j = d(B(i, 1))
  11.         'd(B(i, 1)) = B(i, 3) + j
  12.         d(B(i, 1)) = B(i, 3)
  13.     Next
  14.    
  15.     With Sheets("资料")
  16.         A = .Range("a1").CurrentRegion
  17.         ReDim C(1 To UBound(A), 1 To 1)
  18.         For i = 2 To UBound(A)
  19.             'If d.exists(A(i, 2)) Then C(i, 4) = d(A(i, 2))
  20.             If d.exists(A(i, 2)) Then C(i, 1) = d(A(i, 2))
  21.         Next
  22.         .Range("d:d").ClearContents
  23.         .Range("d1").Resize(UBound(C)) = C
  24.         .Range("d1").Value = "余额"
  25.     End With
  26.     Application.ScreenUpdating = True
  27. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-11-24 09:53 | 显示全部楼层
hwc2ycy 发表于 2012-11-24 09:05

更新后,本月没有消费的会员的余额没有了
回复

使用道具 举报

发表于 2012-11-24 10:41 | 显示全部楼层
这个简单,把C列先读取D列的内容,再来更新嘛。
回复

使用道具 举报

发表于 2012-11-24 10:44 | 显示全部楼层    本楼为最佳答案   
  1. Sub aa()
  2.     Dim A
  3.     Dim B, C
  4.     Dim d As Object, i As Integer, j As Integer
  5.     Application.ScreenUpdating = False
  6.     Set d = CreateObject("scripting.dictionary")
  7.     B = Sheets("消费").Range("a1").CurrentRegion
  8.     For i = 2 To UBound(B)
  9.         '如果同一ID有多次消费记录,则要用累加
  10.         'j = d(B(i, 1))
  11.         'd(B(i, 1)) = B(i, 3) + j
  12.         d(B(i, 1)) = B(i, 3)
  13.     Next
  14.    
  15.     With Sheets("资料")
  16.         A = .Range("a1").CurrentRegion
  17.         C = .Range("d1").Resize(UBound(A)).Value
  18.         For i = 2 To UBound(A)
  19.             'If d.exists(A(i, 2)) Then C(i, 4) = d(A(i, 2))
  20.             If d.exists(A(i, 2)) Then C(i, 1) = d(A(i, 2))
  21.         Next
  22.         .Range("d:d").ClearContents
  23.         .Range("d1").Resize(UBound(C)) = C
  24.         '.Range("d1").Value = "余额"
  25.     End With
  26.     Application.ScreenUpdating = True
  27. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2012-11-24 11:02 | 显示全部楼层
hwc2ycy 发表于 2012-11-24 10:44

在请教一下,原来的代码怎么把公式都去除了,而现在的代码怎么可以保留公式呢
回复

使用道具 举报

发表于 2012-11-24 11:33 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-11-24 12:41 编辑
  1. Sub aa()
  2.     Dim A
  3.     Dim B
  4.     Dim d As Object, i As Integer
  5.     Dim strID&, strYe&
  6.     Set d = CreateObject("scripting.dictionary")
  7.     B = Sheets("消费").Range("a1").CurrentRegion
  8.     For i = 2 To UBound(B)
  9.         d(B(i, 1)) = B(i, 3)
  10.     Next
  11.     With Sheets("资料")
  12.         A = .Range("a1").CurrentRegion.Formula
  13.         For i = 2 To UBound(A)
  14.             strID = A(i, 2) * 1
  15.             strYe = A(i, 4) * 1
  16.         
  17.             If d.exists(strID) Then
  18.                 A(i, 4) = d(strID)
  19.             Else
  20.                 A(i, 4) = strYe
  21.             End If
  22.             
  23.         Next
  24.         .Range("d2:d65536").ClearContents
  25.         .Range("a1").Resize(UBound(A), UBound(A, 2)) = A
  26.     End With
  27. End Sub
复制代码
没有再加数组,直接写A1区域。
回复

使用道具 举报

发表于 2012-11-24 11:34 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-11-24 12:41 编辑

A = .Range("a1").CurrentRegion
A = .Range("a1").CurrentRegion.Formula
这两个语句的区别,你在代码里F8一下就明白了。
注意第一列的值的区别。

回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-23 15:53 , Processed in 0.387701 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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