2012-10-18 19 views
1

如何创建一个宏,该宏将在一个单元格中添加一天并同时在另一个单元格中减去一天?这是我到目前为止。使用VBA进行日期更改Excel在两个不同的单元格中添加/减少

Sub ChangeDates() 

Dim cell As Range 

For Each cell In Range("B:B") 
    cell.Value = cell.Value + 1 
Next cell 

For Each cell In Range("C:C") 

    cell.Value = cell.Value - 1 

End Sub 
+0

为什么你需要VBA来做到这一点?你可以很容易地使用Excel公式。 –

+0

因为我想自动运行工作簿上的宏。 – TankTank

回答

0

抵消救援!

Sub ChangeDates() 
Dim cell As Range 
    For Each cell In Range("B:B")  
     cell.Value = cell.Value + 1 
     cell.offset(0,1).value = cell.offset(0,1).value - 1 
    Next cell 
End Sub 

你可以考虑要么看着usedrange到没有经过全体B列的迭代或放在检查,以确保细胞是另一件事不是空白...只是更快,更好的编码和阻止你有坏值,其中的细胞最初的空白...

Sub ChangeDates() 
Dim cell As Range 
    For Each cell In Intersect(Range("B:B"), ActiveSheet.UsedRange) 
     cell.Value = cell.Value + 1 
     cell.Offset(0, 1).Value = cell.Offset(0, 1).Value - 1 
    Next cell 
End Sub 
+0

谢谢你做到了。 – TankTank

+0

请查看更新后的代码...更适合您要做的事情...... –

+0

如果...例如B46是空的,而B50不是我可以用来继续更改的语句吗? – TankTank

3

我知道你已经接受了答案,但我想提供这种做法,这甚至比通过循环更快,更高效所有这些细胞。

如果你的日期在A列,然后列B将持有date +1和C列将举行date -1

Option Explicit 
Sub ChangeDates() 

Dim myRange As range 
Dim mySheet As Worksheet 

Set mySheet = Sheets("Sheet7") 'change to your sheet 

With mySheet 

    Set myRange = .range("A1:A" & .range("A" & .Rows.Count).End(xlUp).Row) 

    myRange.Offset(, 1).FormulaR1C1 = "=RC[-1]+1" 
    myRange.Offset(, 2).FormulaR1C1 = "=RC[-2]-1" 

End With 


End Sub 
+0

感谢斯科特,也有效...我非常感谢帮助。 – TankTank

+0

它的作品,是的。但关键是它要快得多。我不知道你的编程水平,但随着时间的推移,你会逐渐意识到循环往往不是最有效的解决方案。通过消除循环,我曾帮助代码从超过1个小时移动到执行到少于10分钟! –

相关问题