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