Excel女士用上一个值和下一个值的平均值替换值

问题描述:

我正在使用Excel中的每小时天气数据以及相应的记录的温度值。Excel女士用上一个值和下一个值的平均值替换值

某些值未被记录,而是在电子表格中显示为“M”。例如,A32 = 28,A33 = M,A34 = 30。我想用公式替换该“M”以获取前一个值和下一个值的平均值。我知道如何手动执行此操作,但是我很难编写宏来查找电子表格中的所有M,然后按照上面所述自动替换它。

我的主要障碍是越来越擅长使用正确的值来替换“M”。

这里是我的代码

Sub MReplace() 
' 
' MReplace Macro 
' 

' 
ActiveCell.Select 
Cells.Find(What:="M", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _ 
    , SearchFormat:=False).Activate 
Cells.FindNext(After:=ActiveCell).Activate 
ActiveCell.Offset(-8, 1).Range("A1").Select 
Cells.Find(What:="M", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True _ 
    , SearchFormat:=False).Activate 
Cells.FindNext(After:=ActiveCell).Activate 
ActiveCell.Replace What:="M", Replacement:="[****This is what I am having difficulty with****]", LookAt:=xlWhole, _ 
    SearchOrder:=xlByRows, MatchCase:=True, SearchFormat:=False, _ 
    ReplaceFormat:=False 
Cells.Find(What:="M", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
    xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True _ 
    , SearchFormat:=False).Activate 
End Sub 

我听说过的东西,你可以把该代码,可以解决选定的单元格。我认为它是cell(),但我不确定。也许这是让它更好地工作的一种方式?

+0

欢迎来到SO。一般来说,SO不是我的网站的代码。如果您尝试过任何东西,请将其张贴在原始帖子中,以便我们可以帮助解决特定问题。如果你表明你已经尝试过,你更有可能获得帮助。 –

+0

感谢您的提示! –

试试这个代码:

Sub MReplace() 
Dim ws As Worksheet 
Dim cel As Range 
Dim firstAddress As String 

Set ws = ActiveSheet 

Set cel = ws.Range("A:A").Find("M") 

If Not cel Is Nothing Then 
    firstAddress = cel.Address 
    Do 
     cel.Value = (cel.Offset(1) + cel.Offset(-1))/2 
     Set cel = ws.Range("A:A").FindNext(cel) 
     hr = False 
     If Not cel Is Nothing Then 
      If cel.Address <> firstAddress Then 
       hr = True 
      End If 
     End If 
    Loop While hr 
End If 


End Sub 

它通过循环含“M”的所有单元格,并与平均一个在右边和左边的一个替换它。由于没有列在左侧,因此它会出现在第一列中的任何错误。

+0

我正在查看的数据是作为一个大数字列导入的,所以我会改变它,使第13行中的(,1)和(,-1)代表(1,)和(-1)?非常感谢@scott –

+0

@LucasT对不起,我认为这是一张桌子。请参阅编辑 –

+0

@LucasT这是否适合您?如果是这样,请标记为正确。只有你能做到这一点。它会回答这个问题。点击答案上的绿色复选标记。如果没有,那么它做错了什么,所以我可以修复它。 –