Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在下面的所有空白单元格中粘贴单元格的值,然后移动到一个新的值中,重复Excel VBA宏中的过程_Vba_Excel - Fatal编程技术网

在下面的所有空白单元格中粘贴单元格的值,然后移动到一个新的值中,重复Excel VBA宏中的过程

在下面的所有空白单元格中粘贴单元格的值,然后移动到一个新的值中,重复Excel VBA宏中的过程,vba,excel,Vba,Excel,我试图做一些类似于我在这里发现的一个问题: 基本上,它试图将它滚动的第一个值粘贴在它下面的所有空白空间中,直到另一个值粘贴到它下面的所有空白空间中,重复该过程,直到它到达包含最后一个数据项的行的单元格。 我想通过为excel工作表创建宏,使其适合我的excel工作表。以下是迄今为止最合适的代码: Sub fillBlanks() With Worksheets("Sheet1") With .Range(.Cells(2, "B"), .Cells(Rows.Count, "B")

我试图做一些类似于我在这里发现的一个问题:

基本上,它试图将它滚动的第一个值粘贴在它下面的所有空白空间中,直到另一个值粘贴到它下面的所有空白空间中,重复该过程,直到它到达包含最后一个数据项的行的单元格。

我想通过为excel工作表创建宏,使其适合我的excel工作表。以下是迄今为止最合适的代码:

Sub fillBlanks()
  With Worksheets("Sheet1")
    With .Range(.Cells(2, "B"), .Cells(Rows.Count, "B").End(xlUp))
      With .Offset(0, -1).SpecialCells(xlCellTypeBlanks)
        .FormulaR1C1 = "=R[-1]C"
      End With
      With .Offset(0, -1)
        .Value = .Value
      End With
    End With
  End With
End Sub
我似乎找不到一种方法来调整它,使其只搜索B列,如果下面没有空格,则忽略粘贴值

在此图像中,值为000400020004。我希望避免宏将0002值粘贴到第二个0004值中

请问我能得到一些帮助吗

谢谢


艾丹。

除了您的相关链接中列出的内容之外,我还有其他建议;您可以找到工作表的最后一行,并通过B列中的单元格循环,同时比较值

Dim i as Integer, LR as Long

LR=Cells(Rows.Count, "B").End(xlUp).Row

For i = 2 to LR

If Cells(i,2).Value="" Then
    Cells(i-1,2).Copy Cells(i,2)
    Else
    End If

Next i

尝试选择所需的范围,然后运行以下操作:

副标题()


这将适用于任何J*K选择。

此代码利用
查找
填充
快速查找包含值的下一行,然后填充其间的所有内容:

Public Sub FillGaps()

    Dim wrkSht As Worksheet
    Dim rFindCells As Range
    Dim rFillColumn As Range
    Dim sFirstAddress As String
    Dim rPrevious As Range

    Set wrkSht = ThisWorkbook.Worksheets("Sheet1")

    Set rFillColumn = wrkSht.Columns(2)

    With rFillColumn
        Set rFindCells = .Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlNext)
        If Not rFindCells Is Nothing Then
            sFirstAddress = rFindCells.Address
            Do
                Set rPrevious = rFindCells
                Set rFindCells = .FindNext(rFindCells)

                If rFindCells.Row <> rPrevious.Row + 1 And rFindCells.Row > rPrevious.Row Then
                    wrkSht.Range(rPrevious, rFindCells.Offset(-1)).FillDown
                End If

            Loop While rFindCells.Address <> sFirstAddress
        End If
    End With

End Sub
Public子FillGaps()
Dim wrkSht As工作表
暗淡的rFindCells作为范围
Dim RFill列作为范围
Dim sFirstAddress作为字符串
暗淡的前一个范围
Set wrkSht=此工作簿。工作表(“表1”)
设置rFillColumn=wrkSht.Columns(2)
带填充柱
设置rFindCells=.Find(内容:=“*”,搜索顺序:=xlByRows,搜索方向:=xlNext)
如果不是,那么rFindCells什么都不是
sFirstAddress=rFindCells.Address
做
设置rPrevious=rFindCells
设置rFindCells=.FindNext(rFindCells)
如果rFindCells.Row rpevious.Row+1和rFindCells.Row>rpevious.Row,则
wrkSht.Range(上一个,rFindCells.Offset(-1)).FillDown
如果结束
在rFindCells.Address SfirsAddress时循环
如果结束
以
端接头

是J和K、x和y值吗?现在更新为J和K,但是的,粘贴此内容时,您的代码似乎没有任何作用。另外,您的代码不是在减少x值,不是在减少y值吗?它不是真正的x和y,而是单元格(行、列),您是否在运行代码之前选择(突出显示)要运行的范围?我收到一个错误:“对象不支持此属性或方法。”在这行代码上:
单元格(I-1、2)。复制单元格(I、2)。粘贴
是,抱歉,我不在电脑前:)非常感谢@艾丹豪厄尔:不用担心;很高兴你成功了!是的,这是一个非常有用的修复程序,能够自动完成一些需要数周时间手动完成的事情。
Public Sub FillGaps()

    Dim wrkSht As Worksheet
    Dim rFindCells As Range
    Dim rFillColumn As Range
    Dim sFirstAddress As String
    Dim rPrevious As Range

    Set wrkSht = ThisWorkbook.Worksheets("Sheet1")

    Set rFillColumn = wrkSht.Columns(2)

    With rFillColumn
        Set rFindCells = .Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlNext)
        If Not rFindCells Is Nothing Then
            sFirstAddress = rFindCells.Address
            Do
                Set rPrevious = rFindCells
                Set rFindCells = .FindNext(rFindCells)

                If rFindCells.Row <> rPrevious.Row + 1 And rFindCells.Row > rPrevious.Row Then
                    wrkSht.Range(rPrevious, rFindCells.Offset(-1)).FillDown
                End If

            Loop While rFindCells.Address <> sFirstAddress
        End If
    End With

End Sub