我一直在搜索和玩弄没有运气。我尝试将值(而非公式)从一个范围n5:n250
复制到另一个m5:m250
,但我不想覆盖m中的任何现有值(如果存在)。即,如果m5为空白,我希望我的sub将n5中的内容复制到m5。如果它已经有了价值,我希望它一个人留下。
这就是我一直没有运气的尝试:
Sub Reconcile()
Dim i As Long
For i = 5 To 250
If Not IsEmpty(Range("M" & i)) Then _
Range("M" & i) = Range("N" & i)
Next i
Worksheets("Master Task List").Range("e5:e58").ClearContents
End Sub
工作表行是第二个功能,当我点击相应的按钮时,我喜欢子功能。
我非常感谢一些帮助。
谢谢!
答案 0 :(得分:0)
您可以遍历M
列中的行,如果值等于vbNullString
,请将值设置为N
列中的值。
Sub Reconcile()
Dim i As Long
With ThisWorkbook.Worksheets(1)
For i = 5 To 250
If .Cells(i, "M") = vbNullString Then
.Cells(i, "M") = .Cells(i, "N")
End If
Next
End With
End Sub
这是使用IsEmpty
的例程。您使用Not IsEmpty
的示例。当IsEmpty = True
时,这意味着它是空的。如果您将Not
放在前面,则表示不为空。
Sub Reconcile()
Dim i As Long
With ThisWorkbook.Worksheets(1)
For i = 5 To 250
If IsEmpty(.Cells(i, "M")) Then
.Cells(i, "M") = .Cells(i, "N")
End If
Next
End With
End Sub
请注意,Worksheets(1)
仅用于说明目的。您可能需要为特定工作表更改此内容。
答案 1 :(得分:0)
你可以选出空白单元格,然后将它们移动到一个循环中
我在设置范围时添加了On Error Resume Next
,因为我不知道如果没有空白单元格,可以捕获任何其他方法来捕获错误。
Sub Reconcile()
Dim rBlanks As Range
Dim rCell As Range
With ThisWorkbook.Worksheets("Sheet1")
On Error Resume Next
Set rBlanks = .Range("M5:M250").SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rBlanks Is Nothing Then
For Each rCell In rBlanks
rCell = .Cells(rCell.Row, "N") 'Could also use 14 or rcell.Offset(,1) in place of "N"
Next rCell
Else
MsgBox "No blanks found."
End If
End With
End Sub