【发布时间】:2016-06-30 07:11:46
【问题描述】:
尊敬的 stackoverflow 社区
在工作中,我必须编写一个宏,它应该能够根据列中的数字隐藏行。这些可以是一个单元格中的多个数字,并且输入还应允许一次显示多个数字。
for example:
row 1: 20, 30, 15
row 2: 20
row 3: 13, 76
所以如果我输入 20、30,它应该只显示第 1 行和第 2 行)
我通常使用 Java / c# 编写代码,而且我是 VBA 新手,所以非常感谢帮助:
我的计划是显示一个输入框并将这些数字拆分为一个数组。 然后我想用一个for循环遍历每一行,其中我为每个循环添加了两个以检查是否有任何数字相等。如果没有,隐藏行。如果是这样,请显示然后我想退出每个循环并转到下一行。要退出嵌套循环,我尝试使用 do while boolean 但它似乎不起作用。
现在它只显示所有输入数字的行(示例中只有 row1)。
Sub SortingTest()
Dim numbers() As String
myNum = Application.InputBox("Enter BKPS (separate multiples by , )")
numbers = Split(myNum, ",", -1, compare)
'Userinput Vars
Dim row As Integer
row = 1
Dim saveNumber As String
'Looping Vars
Dim existingNum As String
Dim existingNumsArray() As String
Dim checkRows As Long
Dim saveElement As String
Dim done As Boolean
done = False
' Range("B3").Value = 10
' Saves the Input as Array:
For Each Element In numbers
saveNumber = Element
Cells(2, row).Value = saveNumber
row = row + 1
Next Element
Dim b As Integer
Do While done = False
For b = 1 To 100 'hardcoded, should be length of document. b == row;
existingNum = Cells(b, 3).Value
existingNumsArray = Split(existingNum, ",", -1, compare)
' loop thru input numbers
For Each Element In numbers
saveElement = Element
'loop thru given numbers
For Each inputElement In existingNumsArray
If saveElement <> inputElement Then
Rows(b).Hidden = True
ElseIf saveElement = inputElement Then
Rows(b).Hidden = False
done = True
Exit For
End If
Next
Next
Next
Loop
End Sub
【问题讨论】:
-
Excel 中没有索引为 0 的行。所以从
row=1开始。 -
谢谢!但仍然在同一行出现运行时错误。
-
嗯。它不会解决问题,但行号必须是
Cells函数中的 first 参数。 -
仅凭外观,您的数字循环中没有退出...所以在点击工作表中的最后一行后,下一个循环将出错...