【问题标题】:Copy range of cells that contain only visible data复制仅包含可见数据的单元格范围
【发布时间】:2014-01-20 17:53:31
【问题描述】:

在 Sheet1 上,我有三列需要在其中输入数据。三列总是在同一行结束,但最后一行会随着每组数据而变化。

Sheet2 获取 Sheet1 上三列中给出的信息,并将其与公式一起应用,这些公式将其设置为某种格式,我需要将其复制并粘贴到另一个程序的 txt 文件中。

Sheet2 上的公式都包含 IF(ISBLANK) 公式,仅当在 Sheet1 上输入数据时才会填充单元格。如果在 Sheet1 上没有输入数据,则 false 参数将“”返回到单元格。

我想要 Sheet1 上的宏或控制按钮,它将在 Sheet2 上复制 A6:B500 的范围,但前提是单元格填充有来自 Sheet1 的数据,使 IF 公式为真。

这是发生了什么的代码:

表 1 已解释,并没有什么特别之处。

工作表 2 包含以下内容,从 A6 开始,每 5 个单元格向下,直到到达 A:496

=IF(ISBLANK(Sheet1!A2),"","host "&(INDIRECT(E6))&" {") 

这些公式还会继续更新 Sheet1 中单元格的位置。从 B7 到 B10 开始,有更多文本的类似公式,从工作表 1 中获取的单元格被更新,直到 B 列达到 B500,这些公式如下:

B7:  =IF(ISBLANK(Sheet1!C2),"","hardware ethernet "&(INDIRECT(E7))&";")
B8:  =IF(ISBLANK(Sheet1!B2),"","fixed-address "&(INDIRECT(E8))&";")
B9:  =IF(ISBLANK(Sheet1!A2),"","option host-name "&""""&(INDIRECT(E9))&""";")
B10: =IF(ISBLANK(Sheet1!A2),"","}")

到目前为止,我的宏看起来是这样的:

Sub CommandButton1_Click()
    Dim rng As Range
    If Not Selection Is Nothing Then
        Set rng = Sheets("Sheet2").Range("Sheet2!A6:Sheet2!B500").Cells.SpecialCells(xlCellTypeVisible)
        rng.Copy
    End If
End Sub

我遇到的问题是,无论输入什么数据,宏都会复制范围内的所有单元格,并且在我的可见数据之后有一堆空的新行。

【问题讨论】:

  • 不确定我是否完全理解您的需求。部分问题似乎是确定最后填充的行。真的?如果是这样,您可以为此目的使用UsedRange,例如maxRow = ActiveSheet.UsedRange.Rows.Count

标签: vba excel range


【解决方案1】:

您应该检查字符串的长度,而不是它们是否属于Visible 类型。可见性主要与隐藏的单元格相关。请尝试以下操作:

Sub CopyNonBlanks()
    Dim RngToCopy As Range, Cell As Range
    For Each Cell In Selection
        If Not RngToCopy Is Nothing Then
            If Len(Cell.Value) > 0 Then
                Set RngToCopy = Union(RngToCopy, Cell)
            End If
        Else
            Set RngToCopy = Cell
        End If
    Next Cell
    RngToCopy.Select 'Or .Copy
End Sub

这应该突出显示评估为"" 的单元格。看下面的截图:

希望这会有所帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
相关资源
最近更新 更多