Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA是否可以检测该列是否没有值并停止将其%制表?_Vba_Excel - Fatal编程技术网

VBA是否可以检测该列是否没有值并停止将其%制表?

VBA是否可以检测该列是否没有值并停止将其%制表?,vba,excel,Vba,Excel,在Sid的帮助下,我现在能够将表1和表2中的值匹配后的%制成表格。但是现在,我面临这个问题 下面是我目前面临的一个问题的图像 在图1中,只是将一些测试结果制成了%的表格。 经过大量的帮助,我现在可以将其制表,但如果您注意到H列之后,结果将继续制表,因为我一直设置到Z列。 我需要准备更多列的测试,这就是为什么我将set设置为Z列。我想知道的是,我是否可以清除所有#DIV/0!当没有更多的结果时 再次感谢您 后续行动: 我的代码如下所示: Sub Macro3() Dim ws As Work

在Sid的帮助下,我现在能够将表1和表2中的值匹配后的%制成表格。但是现在,我面临这个问题

下面是我目前面临的一个问题的图像

在图1中,只是将一些测试结果制成了%的表格。

经过大量的帮助,我现在可以将其制表,但如果您注意到H列之后,结果将继续制表,因为我一直设置到Z列。

我需要准备更多列的测试,这就是为什么我将set设置为Z列。我想知道的是,我是否可以清除所有#DIV/0!当没有更多的结果时

再次感谢您

后续行动: 我的代码如下所示:

Sub Macro3()

Dim ws As Worksheet
Dim wsData As String
Dim SearchText As String, Excludetext As String
Dim LastRow As Long, i As Long, j As Long
Dim MyArray() As String
Dim boolContinue As Boolean

'start making Yield_summary into %
'~~> Add/Remove the text here which you want to ignore
Excludetext = "Split,Grade,Wafer,temp,Qty. In,Qty. Out,Bin1,Bin2,Bin3,Bin4,Bin5,Bin6"

'~~> Change this to the relevant sheetname which has the data
wsData = "Sheet1"

MyArray = Split(Excludetext, ",")

Set ws = Sheets("Sheet2")
LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row

'Set Column B into %
For i = 1 To LastRow
    boolContinue = True

    For j = 0 To UBound(MyArray)
        SearchText = MyArray(j)
        If ws.Range("A" & i).Value = SearchText Then
            boolContinue = False
            Exit For
        End If
    Next j

    If boolContinue = True Then
        With ws.Range("B" & i)
            .Formula = _
            "=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,1)/" & wsData & "!B5"
            .NumberFormat = "0.00%"
        End With
    End If
Next i

'Set Column C into %
For i = 1 To LastRow
    boolContinue = True

    For j = 0 To UBound(MyArray)
        SearchText = MyArray(j)
        If ws.Range("A" & i).Value = SearchText Then
            boolContinue = False
            Exit For
        End If
    Next j

    If boolContinue = True Then
        With ws.Range("C" & i)
            .Formula = _
            "=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,2)/" & wsData & "!C5"
            .NumberFormat = "0.00%"
        End With
    End If
Next i
End sub'

如果您使用的是2007或2010,则可以使用
iferror
功能检查错误情况。用法如下所示:

=iferror(YourFunction,"")
如果函数的计算结果不是错误,则返回空字符串

如果您在2007年之前拥有Excel,那么同样的事情只会变得效率更低

=if(iserror(YourFunction),"",YourFunction)
编辑

要在只为您编写forumlas的代码中合并,请编辑:

"=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,1)/" & wsData & "!B5"
将来


另一方面,我发现在编写公式时使用CHAR(34)添加双引号要容易得多。

如果使用2007或2010,可以使用
iferror
函数检查错误情况。用法如下所示:

=iferror(YourFunction,"")
如果函数的计算结果不是错误,则返回空字符串

如果您在2007年之前拥有Excel,那么同样的事情只会变得效率更低

=if(iserror(YourFunction),"",YourFunction)
编辑

要在只为您编写forumlas的代码中合并,请编辑:

"=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
            "," & wsData & "!$A$1:$A$50,0),1,0),1,1,TRUE,""" & _
            wsData & """)),0,1)/" & wsData & "!B5"
将来

另一方面,我发现在编写公式时,使用CHAR(34)添加双引号要容易得多。

我可以从前面的问题中看出,您在单元格中添加的公式如下所示:

    With Range("B" & i)
        .Formula = _
        "=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
        ",$A$1:$A$45,0),1,0),1,1,1,'Duplicated_Sheet1')),0,1)/$B$5"
        .NumberFormat = "0.00%"
    End With
接下来,您可以检查公式是否返回错误(例如
#DIV/0!
),如果返回错误,请删除该公式,因为它没有用处:

    If IsError(Range("B" & i)) Then
        Range("B" & i).ClearContents
    End If
我可以从你之前的问题中看出,你在你的单元格中放了一个公式,如下所示:

    With Range("B" & i)
        .Formula = _
        "=OFFSET(INDIRECT(ADDRESS(INDEX(MATCH(A" & i & _
        ",$A$1:$A$45,0),1,0),1,1,1,'Duplicated_Sheet1')),0,1)/$B$5"
        .NumberFormat = "0.00%"
    End With
接下来,您可以检查公式是否返回错误(例如
#DIV/0!
),如果返回错误,请删除该公式,因为它没有用处:

    If IsError(Range("B" & i)) Then
        Range("B" & i).ClearContents
    End If

对不起,我不明白如何将它添加到我的代码中。也许我加上代码你就能明白我的意思。你的工作表里一定有公式。将“YourFunction”替换为工作表中的公式。对不起,我不知道如何将其添加到我的代码中。也许我加上代码你就能明白我的意思。你的工作表里一定有公式。将“YourFunction”替换为工作表中的公式。请仅显示相关的代码位。转储整个代码没有帮助。另外,请使用
{}
按钮将其格式化为code。请仅显示相关的代码位。转储整个代码没有帮助。另外,请使用
{}
按钮
将其格式化为code
。这是一种更好的方式,除非在编写公式后可能会更改您的值+1这是一种更好的方法,除非您的值在编写公式后可能发生更改+1.