【问题标题】:VBA Find Blank cells in Column HeadingsVBA在列标题中查找空白单元格
【发布时间】:2017-04-05 21:24:08
【问题描述】:

希望你能帮上忙。我在下面有一段代码,它有点工作。我只是需要它做更多的事情。

它目前沿着从 A1 到 H1 的第一行。如果它找到一个空白单元格,则将单元格值复制到空白单元格的左侧,然后将此值粘贴到空白单元格中,然后继续移动。

由于范围每天都在变化,因此 A1 到 H1 是不够的。我现在需要代码沿着第一行查看,直到找到最后一个包含数据的单元格,然后查找空白并开始复制和粘贴过程。

我还需要代码,然后将 2 添加到粘贴的单元格,以便我可以执行透视并区分复制的单元格和粘贴的单元格。

我在下面提供了一张图片以便更好地理解。最终结果应该是单元格 B2 包含文本 24 - Company: Hier 2 并且 E2 包含文本 07 - Product: Family Hier 2

我的代码如下,我们非常感谢任何和所有帮助。

图 1

我的代码

Public Sub BorderForNonEmpty()
    Dim myRange As Range
    Set myRange = Sheet1.Range("A1:H1")
    For Each MyCell In myRange
        If MyCell.Text = "" Then
            MyCell.Offset(0, -1).Select
        ActiveCell.Copy
        ActiveCell.Offset(0, 1).PasteSpecial (xlPasteAll)
        End If
    Next
End Sub

【问题讨论】:

  • 您想查看最后一列。这也可能是一个录制的宏,如果你真的想进一步移动,你想停止使用 .select 和 activecell。相反,您应该明确引用单元格。

标签: vba excel copy-paste


【解决方案1】:

试试下面的代码 - cmets 指示每个重要的行在做什么:

Option Explicit

Sub FillInHeaders()

    Dim ws As Worksheet
    Dim lngRowWithHeaders As Long
    Dim rngHeader As Range
    Dim rngCell As Range

    ' get a reference to your worksheet
    Set ws = ThisWorkbook.Worksheets("SHeet1")

    ' set the row that the headers are on
    lngRowWithHeaders = 2

    ' get the range from A1 to ??1 where ?? is last column
    Set rngHeader = ws.Cells(lngRowWithHeaders, 1) _
        .Resize(1, ws.Cells(lngRowWithHeaders, ws.Columns.Count) _
        .End(xlToLeft).Column)

    ' iterate the range and look for blanks
    For Each rngCell In rngHeader
        ' if blank then ...
        If IsEmpty(rngCell.Value) Then
            ' get cell value from left and a 2
            rngCell.Value = rngCell.Offset(0, -1).Value & "2"
        End If
    Next rngCell

End Sub

【讨论】:

  • 嗨罗宾。感谢您抽出宝贵时间回复。您提供给我的代码仅填充了单元格 B2。我需要代码来继续查看。空格的标题,可以修改代码。每次都有数据的最后一列都不相同。所以我可以说它停在 Q 或 Z 之类的地方
  • 嗨 - 没问题。请参阅编辑后的代码示例。您可以设置标题所在的行。在您的原始帖子中,图片显示了第 1 行的标题,但根据您的评论,您的标题可能位于第 2 行。您需要传入正确的行,否则它不会自动找到最后一列。 HTH
  • 嗨抢我的 B2 错误。我需要咖啡。第 2 行无关紧要。所以你给我的编辑代码不起作用。前面的代码给了我我需要的 A1 到 B1 的副本,并附有 2。但它没有继续到第 1 行中的下一个空白单元格,它只是在 B1 处停止。
  • 嗨罗宾。您的代码运行良好,我的 E2 单元格填充了 .这意味着代码不起作用。再次感谢都柏林的支持和帮助:-)