2016-01-29 179 views
0

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

感謝您的提示! –

回答

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這是否適合您?如果是這樣,請標記爲正確。只有你能做到這一點。它會回答這個問題。點擊答案上的綠色複選標記。如果沒有,那麼它做錯了什麼,所以我可以修復它。 –