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

时间:2016-01-29 21:05:59

标签: excel vba replace

我正在使用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

我听说过你可以放入可以解决所选单元格的代码的内容。我认为它的细胞()但我不确定。也许这是一种让它更好地运作的方法?

1 个答案:

答案 0 :(得分: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”的所有单元格,并将其替换为右侧的平均值和左侧的平均值。由于左侧没有列,因此第一列中的任何内容都会出错。