动态图表的偏移功能导致空白单元格出现问题

时间:2014-05-01 15:13:51

标签: excel vba charts

我正在使用OFFSET函数为下图所示的表格创建动态图表。基本上点击标有"复制平均VCD值"的按钮;代码将值从另一个工作表复制到当前工作表。如果它遇到任何带有" #DIV / 0的单元格!"我准备把它放在" N / A"代替。但在这种情况下,我没有获得动态图表。如果不是N / A我做""它创建了一个动态图表但添加了垃圾值" 1"到图表上的第一组。如果我手动删除包含" N / A"的所有行,我只能获得所需的结果。在包含数据的最后一行下方(有关详细信息,请参见图像)。

https://lh6.googleusercontent.com/-OfjK6dSRQE8/U2JkdadjedI/AAAAAAAAABk/d8WDLuuC7Lk/w1068-h803-no/Offset+error.PNG

这是我用于命令按钮的代码"复制平均值VCD":

    Private Sub CommandButton2_Click()

        r = 7
        '//j increments the column number
        '//i increments the row number
        '//r is used for taking values from alternate cells(sheet3 column K) rowwise
        For j = 2 To 14
            For i = 7 To 26
                If ThisWorkbook.Sheets(3).Range("K" & r & "").Text = "#DIV/0!" Then
                    ThisWorkbook.Sheets(2).Cells(i, j).Value = "N/A"
                    Else
                    ThisWorkbook.Sheets(2).Cells(i, j).Value = ThisWorkbook.Sheets(3).Range("K" & r & "").Value
                End If
             r = r + 2
            Next i
         Next j


     End Sub

如果我添加以下代码它可以工作,但它会删除表之前和之后的整行。见图片:https://lh6.googleusercontent.com/-WiM8HN61zkM/U2Jz2J_JxjI/AAAAAAAAACw/z4i3hlakyAI/w1598-h442-no/offset+delete+row.PNG

    Private Sub CommandButton2_Click()

        r = 7
        '//j increments the column number
        '//i increments the row number
        '//r is used for taking values from alternate cells(sheet3 column K) rowwise
        For j = 2 To 14
            For i = 7 To 26
                If ThisWorkbook.Sheets(3).Range("K" & r & "").Text = "#DIV/0!" Then
                    ThisWorkbook.Sheets(2).Cells(i, j).Value = "N/A"
                    Else
                    ThisWorkbook.Sheets(2).Cells(i, j).Value = ThisWorkbook.Sheets(3).Range("K" & r & "").Value
                End If
             r = r + 2
            Next i
         Next j

Dim c As Range
Dim SrchRng

Set SrchRng = ActiveSheet.Range("B7:B26")
Do
    Set c = SrchRng.Find("N/A", LookIn:=xlValues)
    If Not c Is Nothing Then c.EntireRow.Value = ""
Loop While Not c Is Nothing

   End Sub

这是OFFSET函数我在这种情况下用于B列:

    =OFFSET('Data Summary Template'!$B$7,0,0, COUNTA('Data Summary Template'!$B$7:$B$26),1)

1 个答案:

答案 0 :(得分:0)

我无法完全复制你遇到的这个问题......我认为最初的问题必须与关于无效引用的警告有关。您应该查看并找出原因,这可能是图表中“额外”数据的原因。

如果删除N / A值似乎有效,请尝试一些操作。而不是:

Set SrchRng = ActiveSheet.Range("B7:B26")
Do
    Set c = SrchRng.Find("N/A", LookIn:=xlValues)
    If Not c Is Nothing Then c.EntireRow.Value = ""
Loop While Not c Is Nothing

这样做:

Dim tblCell as Range
Dim tbl as ListObject
Set tbl = ActiveSheet.ListObjects(1)
For each tblCell in tbl.DataBodyRange.Columns(2).Cells
    If tblCell.Value = "N/A" Then 
        tblCell.Resize(1, tbl.DataBodyRange.Columns.Count - 1).Value = vbNullString
    End If
Next