2016-11-22 110 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