2016-11-22 105 views
0

我想創建一個宏看起來在「0」的列,其中有:改變細胞值

  • 它與細胞值的一半替換爲「0」上述
  • 它替換以上及其一半的單元格的值

我試圖記錄是這樣的:

Sub Macro14() 
' Macro14 Macro 
' 
ActiveCell.FormulaR1C1 = "=R[-1]C/2" 
Range("N57").Select 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ 
    xlNone, SkipBlanks:=False, Transpose:=False 
Range("N56").Select 
Application.CutCopyMode = False 
Selection.ClearContents 
Range("N57").Select 
Selection.Copy 
Range("N56").Select 
ActiveSheet.Paste 
ActiveSheet.Paste 
Application.CutCopyMode = False 
End Sub 

但我不知道如何引用給定列中包含「0」的單元格。

+0

嗨安德烈,你可能會想看看IF聲明。 http://www.excel-easy.com/vba/if-then-statement.html – maxhob17

+0

您需要觀看本系列[Excel VBA簡介](https://www.youtube.com/playlist?list=PLNIs- AWhQzckr8Dgmgb3akx_gFMnpxTN5)。這是相關的[Excel VBA簡介第5部分 - 選擇單元格(範圍,單元格,活動單元格,結束,偏移)](https://www.youtube.com/watch?v=c8reU-H1PKQ&list=PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5&index=5) – 2016-11-22 14:04:19

+0

看看'FIND'。它比循環更快,示例顯示如何找到一個值並將其替換爲另一個值。 https://msdn.microsoft.com/en-us/library/office/ff839746.aspx **提示:**要在示例中使用'c.Offset(-1)'獲得前一行值, –

回答

0

你會想循環遍歷你的列,並添加條件邏輯。用它來幫助你。

dim rNg as range 
dim rCell as range 
set rNg = ThisWorkbook.Sheets("YourSheet").Range("Your Range") 
for each rCell in rNg.Cells 
if rCell.Value = 0 Then 
     'your code 
end if 
next rCell 

這只是爲了讓你開始。學習它通過反覆試驗找出幾件事的最好方法。然而,這大部分是你所需要的。

同樣複製和粘貼就像你在上面的例子中所做的那樣是非常重要的。你應該習慣於告訴細胞有什麼值。即

ThisWookbook.Sheets("Sheet1").Range("A1").Value = ThisWorkbook.Sheets("Sheet2").Range("A1").Value 

您是新,所以這個細微差別不會太大相關性,但,當你進入了VBA性能更大的腳本將是一個signifcant問題,那麼。

1

你的問題有點不清楚,但這可能對你有幫助。

Sub Ncolumn() 
    For Each Rng In Range("N1:N60") ' Change range to suit 
     If Rng.Value = "0" Then Rng.Value = Cells(Rng.Row - 1, Rng.Column).Value/2 
    Next Rng 
End Sub