2016-09-07 2 views
1

Я пытаюсь создать событие Worksheet_Change(), чтобы отобразить строки на основе числового значения одной ячейки.Показывать строки на основе числового значения в ячейке

У меня есть стол B13: B513. Я хочу отобразить ряд строк, равных значению в C7. Например, если C7 = 10, тогда B13: B22 будет отображаться, а остальное все равно будет скрыто.

Я видел несколько способов сделать что-то подобное, но используя «случай» для каждой опции. В моем случае у меня есть 500 вариантов. Я уверен, что есть более эффективный способ сделать это.

Я использую Excel 2010.

Заранее благодарен!

Daniel

+0

является C7 всегда ячейка с количеством строк, которые вы хотите скрыть? Ряд скрытых строк начинается с строки 13 («B13»)? –

+0

Вам нужно проверить значение в C7 'isnumeric', а затем изменить диапазон значений B13 до значения в C7 и изменить свойство' entirerow 'hidden 'для False. –

+0

@ongcaps вы проверили код в mu asnwer ниже? –

ответ

0

Код ниже на Worksheet_Change() случае, будет работать только в том случае, когда пользователь изменяет значение в ячейке «C7», вы можете изменить его легко в коде (он commeneted на какой линии).

Код Виль отобразите количество строк указано, начиная с строки 13 (в соответствии с Range B13: B513)

Private Sub Worksheet_Change(ByVal Target As Range) 

Dim WatchRange     As Range 
Dim IntersectRange    As Range 
Dim Numof_UnhideRows   As Long 
Dim UnhideRowStart    As Long 


' if you want to unhide the rows in Range(B13:B513) only when someone canges the vlues in C7 
Set WatchRange = Range("C7") 

' starting unhiding number of rows starting for row 13 
UnhideRowStart = 13 

Set IntersectRange = Intersect(Target, WatchRange) 

If Not IntersectRange Is Nothing Then 
    If IsNumeric(Target.Value) Then 
     Numof_UnhideRows = Target.Value 
     Rows(UnhideRowStart & ":" & UnhideRowStart + Numof_UnhideRows - 1).EntireRow.Hidden = False 

     MsgBox "Unhide a total of " & Numof_UnhideRows & " rows" 
    Else 
     MsgBox "Cell C7 doesn't contain a Numeric Value", vbCritical 
    End If 
Else 
    'Do Nothing Spectacular 

End If 

End Sub 
+1

Я бы использовал 'Range (" B13 "). Resize (Target.Value) .EntireRow.Hidden = False'. Личные предпочтения. –

+0

@ DarrenBartrup-Cook не стесняйтесь обновлять мой ответ, если он улучшает ответ –

+0

Я бы не сказал, что это улучшается - просто еще один способ получить тот же результат. –

Смежные вопросы