Excel 如果单元格为空,请将相邻列的值移动到上面的行

Excel 如果单元格为空,请将相邻列的值移动到上面的行,excel,vba,Excel,Vba,我有一个数据集,a列有一些空单元格。如果有一个空单元格,我想将B列中的值移到上面的行中,并清除B列中的值。我已经想出了一个代码,在a列中只有一个空单元格时执行此操作。但当a列中有两个或更多空单元格时,此代码不起作用(我的意思是将B列中的值移动到A列不为空的行;在本例中不是上面的行)。有人能帮我调整代码,以便它可以在其他情况下工作吗?谢谢 我的代码如下: Sub MoveToRow() Dim i As Integer For i = 1 To 10 If IsEmpty(Sheets("Sh

我有一个数据集,a列有一些空单元格。如果有一个空单元格,我想将B列中的值移到上面的行中,并清除B列中的值。我已经想出了一个代码,在a列中只有一个空单元格时执行此操作。但当a列中有两个或更多空单元格时,此代码不起作用(我的意思是将B列中的值移动到A列不为空的行;在本例中不是上面的行)。有人能帮我调整代码,以便它可以在其他情况下工作吗?谢谢

我的代码如下:

Sub MoveToRow()
Dim i As Integer
For i = 1 To 10


If IsEmpty(Sheets("Sheet1").Range("A" & i)) = True Then
    Sheets("Sheet1").Range("B" & i).Offset(-1, 0) = Range("B" & i).Offset(-1, 0) & "/" & Range("B" & i)
    Sheets("Sheet1").Range("B" & i).Value = Empty

End If

Next i

End Sub
之前的数据集

Sunday  work1
        work2
Monday  work3
Tuesday work4
        work5
Wednesday   work6
Thursday    work7
Friday  work8
之后的数据集

Sunday  work1/work2

Monday  work3
Tuesday work4/work5

Wednesday   work6
Thursday    work7
Friday  work8
数据集-不工作(因为星期日下方有两个空单元格)

数据集-如果有效

Sunday  work1/work2/work3  


Monday  work4
Tuesday work5/work6 

Wednesday   work7
Thursday    work8
Friday  work9
尝试一下:

Option Explicit

Sub MoveToRow()

Dim i As Integer
Dim ws As Worksheet
Dim r As Range
Dim count As Integer

Application.ScreenUpdating = False

Set ws = Worksheets("Sheet1")
For Each r In ws.Range(Cells(1, 1), Cells(Rows.count, 1).End(xlUp))
    If IsEmpty(r) Then
        count = count + 1
        With ws.Range(r.address)
            .Offset(-count, 1) = .Offset(-count, 1) & "/" & .Offset(0, 1)
            .Offset(0, 1).ClearContents
        End With
    Else
        count = 0
    End If
Next r

Application.ScreenUpdating = True

End Sub
如果您愿意,您也可以在其中添加一些代码来删除剩余的空行。但我将让您自己来做。:-

尝试一下:

Option Explicit

Sub MoveToRow()

Dim i As Integer
Dim ws As Worksheet
Dim r As Range
Dim count As Integer

Application.ScreenUpdating = False

Set ws = Worksheets("Sheet1")
For Each r In ws.Range(Cells(1, 1), Cells(Rows.count, 1).End(xlUp))
    If IsEmpty(r) Then
        count = count + 1
        With ws.Range(r.address)
            .Offset(-count, 1) = .Offset(-count, 1) & "/" & .Offset(0, 1)
            .Offset(0, 1).ClearContents
        End With
    Else
        count = 0
    End If
Next r

Application.ScreenUpdating = True

End Sub

如果愿意,还可以在其中添加一些代码来删除剩余的空行。但我会让你来做的。:-)

它起作用了!你太棒了!给我留下了很多要学习的东西!非常感谢你!请问如何学好VBA?对书籍或资源有什么建议吗?我说的不足以表达我的感激之情。非常感谢你@非常欢迎你!很乐意帮忙。我没有什么特别的书可以推荐,但你可以看看这里列出的一些书:并阅读一些评论。以下是一些有用的网站:1)2)。互联网上充满了帮助。:-)这很有帮助!非常感谢你!它起作用了!你太棒了!给我留下了很多要学习的东西!非常感谢你!请问如何学好VBA?对书籍或资源有什么建议吗?我说的不足以表达我的感激之情。非常感谢你@非常欢迎你!很乐意帮忙。我没有什么特别的书可以推荐,但你可以看看这里列出的一些书:并阅读一些评论。以下是一些有用的网站:1)2)。互联网上充满了帮助。:-)这很有帮助!非常感谢你!