VBA Excel多个elseif语句
我想为多个VBA Excel多个elseif语句,excel,vba,Excel,Vba,我想为多个elseif语句编写一个较短的代码 我的代码如下所示: Sub geography() Worksheets("Social").Rows("3:165").Hidden = True Dim cell As Range For Each cell In Range("F3:F165") If cell.Value = "GIS" Then Rows(cell.Row).EntireRow
elseif
语句编写一个较短的代码
我的代码如下所示:
Sub geography()
Worksheets("Social").Rows("3:165").Hidden = True
Dim cell As Range
For Each cell In Range("F3:F165")
If cell.Value = "GIS" Then
Rows(cell.Row).EntireRow.Hidden = False
ElseIf cell.Value = "CLIMATE" Then
Rows(cell.Row).EntireRow.Hidden = False
ElseIf cell.Value = "TRAVEL" Then
Rows(cell.Row).EntireRow.Hidden = False
ElseIf cell.Value = "TOURISM" Then
Rows(cell.Row).EntireRow.Hidden = False
ElseIf cell.Value = "WILDLIFE" Then
Rows(cell.Row).EntireRow.Hidden = False
End If
Next
End Sub
我在这里找到了一些类似的线索:
但它适用于范围而不是布尔值,就像我的例子一样
不管怎样,我根据自己的情况构建了代码:
Sub geography2()
Dim arr, res
Dim cell As Range
Dim Variable As Boolean
arr = Array(Array("GIS", False), _
Array("CLIMATE", False), _
Array("TRAVEL", False), _
Array("TOURISM", False), _
Array("WILDLIFE", False))
res = Rows(cell.Row).EntireRow.Hidden
If Not IsError(res) Then
Variable = res
End If
End Sub
但它不起作用,因为调试器指出了这一点:
res = Rows(cell.Row).EntireRow.Hidden
并说:
对象变量或未设置块变量
那么如何减少批量
elseif
语句呢?要消除多个elseif或数组,请尝试将if语句与正则表达式组合起来
确保在以下位置启用正则表达式:工具>引用>复选框:“Microsoft VBScript正则表达式5.5”
该函数将查找您提到的字符串(“GIS | CLIMATE | TRAVEL | TOURISM | WILDLIFE”),如果通过正则表达式测试,则返回True,并取消隐藏单元格
请让我知道它是否有效,如果无效,让我们尝试解决它
谢谢
Option Explicit
Dim wb As Workbook
Dim cel As Range
Dim sRng As Range
Dim regex As New RegExp
Sub foo()
Set wb = ThisWorkbook
Set sRng = wb.Sheets("Social").Range("F3:F165")
wb.Sheets("Social").Rows("3:165").Hidden = True
For Each cel In sRng
If chkexist(cel.Value, "GIS|CLIMATE|TRAVEL|TOURISM|WILDLIFE") = True Then
cel.EntireRow.Hidden = False
Else
End If
Next cel
End Sub
Private Function chkexist(ByRef chkstr As String, ByVal patstr As String) As Boolean
'function that tests str if contains regex pattern
'returns boolean
With regex
.Global = True
.Pattern = patstr
End With
chkexist = regex.Test(chkstr)
End Function
隐藏行(匹配
/选择大小写
)
版本区分大小写,而Select Case
版本不区分大小写应用程序.Match
Option Explicit
Sub geographyMatch()
Const RowNumbers As String = "3:165"
Dim Criteria As Variant
Criteria = Array("GIS", "CLIMATE", "TRAVEL", "TOURISM", "WILDLIFE")
Worksheets("Social").Rows(RowNumbers).EntireRow.Hidden = True
Dim rng As Range
Dim cel As Range
For Each cel In Worksheets("Social").Columns("F").Rows(RowNumbers)
If Not IsError(Application.Match(cel.Value, Criteria, 0)) Then
If Not rng Is Nothing Then
Set rng = Union(rng, cel)
Else
Set rng = cel
End If
End If
Next cel
If Not rng Is Nothing Then
rng.EntireRow.Hidden = False
End If
End Sub
Sub geographySelectCase()
Const RowNumbers As String = "3:165"
Worksheets("Social").Rows(RowNumbers).EntireRow.Hidden = True
Dim rng As Range
Dim cel As Range
For Each cel In Worksheets("Social").Columns("F").Rows(RowNumbers)
Select Case cel.Value
Case "GIS", "CLIMATE", "TRAVEL", "TOURISM", "WILDLIFE"
If Not rng Is Nothing Then
Set rng = Union(rng, cel)
Else
Set rng = cel
End If
End Select
Next cel
If Not rng Is Nothing Then
rng.EntireRow.Hidden = False
End If
End Sub
如果x=1或x=2或x=3,您可以执行
操作。
或者使用选择大小写,这样会更整洁一些。至于最后一个错误,单元格
从未设置过是的,您是对的。我设置了单元格范围,但仍然不起作用。代码被执行了,但没有任何结果。代码在我这方面起作用了,你能提供一个工作文件的屏幕截图吗?我相信这是需要做的一些小调整