找到一个短语,复制该行,然后在上面找到非空单元格并将该批次粘贴到新工作表上

时间:2014-05-07 13:39:08

标签: excel vba excel-vba

嗨论坛,感谢您希望能帮助我应对这一挑战。

我从某些软件接收原始数据,我需要过滤并创建报告。

所以,这里是原始数据的捕获:

http://i.imgur.com/n3wZZGC.jpg

所以我尝试做的就是写VBA来找到短语' Volume Synthetic Full Backup'然后将整行(以黄色突出显示)复制到新工作表上,然后将列A向上扫描到它找到的第一个非空单元格(粗体文本)并将其粘贴到上面提到的新工作表上,以便输出看起来像: p>

http://i.imgur.com/1TkaNon.jpg

然后冲洗并重复其余部分

任何接受者?提供啤酒和很多啤酒!

抱歉,我正在构建以下内容:

Sub Save7()
Dim NextRow As Range
Set NextRow = Range("B" & Sheets("Sheet3").UsedRange.Rows.Count + 1)
Sheet1.Range("B14:I14").Copy
Sheet3.Activate
NextRow.PasteSpecial Paste:=xlValues, Transpose:=False
Application.CutCopyMode = False
Set NextRow = Nothing

End Sub

2 个答案:

答案 0 :(得分:0)

我不是一个伟大的宏观家伙,但这里有一个关于如何实现这个目标的高层次思考:

  • 循环到A列,如果它是空白的话,复制上一行的值
  • 通过B列循环查找“Volume Synthetic Full Backup”并在找到时将整行复制到新工作表

这样您就不必尝试找到上一列A条目,这是我认为您陷入困境的地方。

答案 1 :(得分:0)

决定延长我的技能:)这将循环通过B列,直到它为空,并记住最后一个非空白列A条目是什么。对不起,如果它不漂亮。请随时帮助我学习如何做得更好!

Sub Macro1()
    Sheet1.Activate
    Range("b1").Select
    sheet3counter = 0
    ' Set Do loop to stop when an empty cell is reached.
    Do Until IsEmpty(ActiveCell)
        If Not IsEmpty(ActiveCell.Offset(0, -1)) Then
            SectionName = ActiveCell.Offset(0, -1)
        End If
        If ActiveCell.Value = "Volume Synthetic Full Backup" Then
            ActiveCell.EntireRow.Copy
            Sheet3.Activate
            Range("a1").Offset(sheet3counter, 0).Select
            With Selection
                .PasteSpecial Paste:=xlPasteValues
                .Value = SectionName
            End With
            Sheet1.Activate
            sheet3counter = sheet3counter + 1
        End If
        ActiveCell.Offset(1, 0).Select
    Loop
    'Tidy up and format Sheet3
    Application.CutCopyMode = False
    Range("a1").Select
    Sheet3.Activate
    Cells.Select
    Cells.EntireColumn.AutoFit
    Range("a1").Select
End Sub

我们在哪里见啤酒?