我正在使用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
我听说过你可以放入可以解决所选单元格的代码的内容。我认为它的细胞()但我不确定。也许这是一种让它更好地运作的方法?
答案 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”的所有单元格,并将其替换为右侧的平均值和左侧的平均值。由于左侧没有列,因此第一列中的任何内容都会出错。