Excel精英培训网

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

[已解决]数据清洗

[复制链接]
发表于 2016-4-7 10:39 | 显示全部楼层 |阅读模式
将所有为0的数据替换为上下不为0的数据的均值。其中需要注意的是,如果出现很多0,则需要将所有的0都替换为上下的均值,即替换掉这些0的值完全相同,否则会出现替换数值不断被平均最后等于0的错误。
另外如果最后一个数据是0,没有下方数据,则这个0替换为上方数据的数值。
最佳答案
2016-4-7 11:19
  1. Sub tt()
  2.     Dim sh As Worksheet
  3.     For Each sh In Worksheets
  4.         With sh
  5.             c = .[av4].End(xlToLeft).Column '最大列(数据从第4行开始)
  6.             If c >= 2 Then
  7.                 For j = 2 To c
  8.                     avg = Application.WorksheetFunction.Average(.Range(.Cells(4, j), .Cells(65536, j).End(3)))     '本列平均值
  9.                     .Range(.Cells(4, j), .Cells(65536, j).End(3)).Replace 0, avg, lookat:=xlWhole       '本列0值用平均值取代
  10.                 Next
  11.             End If
  12.         End With
  13.     Next
  14. End Sub
复制代码

日度数据更新.rar

252.47 KB, 下载次数: 8

发表于 2016-4-7 11:19 | 显示全部楼层    本楼为最佳答案   
  1. Sub tt()
  2.     Dim sh As Worksheet
  3.     For Each sh In Worksheets
  4.         With sh
  5.             c = .[av4].End(xlToLeft).Column '最大列(数据从第4行开始)
  6.             If c >= 2 Then
  7.                 For j = 2 To c
  8.                     avg = Application.WorksheetFunction.Average(.Range(.Cells(4, j), .Cells(65536, j).End(3)))     '本列平均值
  9.                     .Range(.Cells(4, j), .Cells(65536, j).End(3)).Replace 0, avg, lookat:=xlWhole       '本列0值用平均值取代
  10.                 Next
  11.             End If
  12.         End With
  13.     Next
  14. End Sub
复制代码
回复

使用道具 举报

发表于 2016-4-7 11:21 | 显示全部楼层
请看附件。

钢材wind日度数据更新.rar

265.18 KB, 下载次数: 10

回复

使用道具 举报

 楼主| 发表于 2016-4-7 11:33 | 显示全部楼层
grf1973 发表于 2016-4-7 11:21
请看附件。

谢谢!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 17:11 , Processed in 0.285756 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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