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