复制仅包含可见数据的单元格范围

时间:2014-01-20 17:53:31

标签: excel vba excel-vba range

在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

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

1 个答案:

答案 0 :(得分:0)

您应该检查字符串的长度,而不是它们是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

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

enter image description here

希望这有帮助。