Подскажите как это сделать) !нужно выбрать все значения кроме "пусто" Из того что сумел нарыть построил это, но оно не работает--> [vba]
Код
Private Sub CommandButton1_Click() Dim w1, w3 As Worksheet Dim vItem, avArr, li As Long Set w1 = Workbooks("1.xlsm").Worksheets(1) Set w3 = Workbooks("1.xlsm").Worksheets(2) iLastRow = w1.Cells(Rows.Count, 1).End(xlUp).Row If w1.FilterMode Then w1.ShowAllData Set r = Range(w1.Cells(3, 9), w1.Cells(iLastRow, 9)) ReDim avArr(1 To iLastRow, 1 To 1) With New Collection On Error Resume Next For Each vItem In r If vItem <> "" Then .Add vItem, CStr(vItem) If Err = 0 Then li = li + 1: avArr(li, 1) = vItem Else: Err.Clear End If End If Next End With ' If li Then w3.Cells(1, 1).Resize(li).Value = avArr If li Then w1.Cells(2, 1).AutoFilter Field:=9, Criteria1:=avArr(), Operator:=xlFilterValues End Sub
[/vba]
Подскажите как это сделать) !нужно выбрать все значения кроме "пусто" Из того что сумел нарыть построил это, но оно не работает--> [vba]
Код
Private Sub CommandButton1_Click() Dim w1, w3 As Worksheet Dim vItem, avArr, li As Long Set w1 = Workbooks("1.xlsm").Worksheets(1) Set w3 = Workbooks("1.xlsm").Worksheets(2) iLastRow = w1.Cells(Rows.Count, 1).End(xlUp).Row If w1.FilterMode Then w1.ShowAllData Set r = Range(w1.Cells(3, 9), w1.Cells(iLastRow, 9)) ReDim avArr(1 To iLastRow, 1 To 1) With New Collection On Error Resume Next For Each vItem In r If vItem <> "" Then .Add vItem, CStr(vItem) If Err = 0 Then li = li + 1: avArr(li, 1) = vItem Else: Err.Clear End If End If Next End With ' If li Then w3.Cells(1, 1).Resize(li).Value = avArr If li Then w1.Cells(2, 1).AutoFilter Field:=9, Criteria1:=avArr(), Operator:=xlFilterValues End Sub
Sub example_5() Dim f With Range("A1", Cells(Rows.Count, 1).End(xlUp)) 'одномерный массив без пустых значений из столбца f = Split(Replace(Join(Filter(Split("~" & Join(Application.Transpose(.Value), "~|~") & "~", "|"), _ "~~", False), "|"), "~", ""), "|") .AutoFilter 1, f, 7 End With End Sub
[/vba]
попробуйте как-то так: [vba]
Код
Sub example_5() Dim f With Range("A1", Cells(Rows.Count, 1).End(xlUp)) 'одномерный массив без пустых значений из столбца f = Split(Replace(Join(Filter(Split("~" & Join(Application.Transpose(.Value), "~|~") & "~", "|"), _ "~~", False), "|"), "~", ""), "|") .AutoFilter 1, f, 7 End With End Sub
[/vba] Но чуя большие возможности твоего решения (:, подскажи плз--> Как фильтровать все совпадения введенные через textbox, как если бы я все делал вручную через автофильтр. Думал, что можно все провернуть через массив значений, но такой фокус не работает, а твой метод вообще не понятен мне)
nilem, Огромное спасибо работает прекрасно и не понятно как (: однако, секунду назад методом научного тыка решил проблему так [vba]
[/vba] Но чуя большие возможности твоего решения (:, подскажи плз--> Как фильтровать все совпадения введенные через textbox, как если бы я все делал вручную через автофильтр. Думал, что можно все провернуть через массив значений, но такой фокус не работает, а твой метод вообще не понятен мне)WeRiX
Хм... нет мне нужно что-то вроде онлайн поиска по первым введенным буквам, чтобы он отображал все подходящие критерии, а не только одно. поэтому я уперся в массив значений, сам мудрил от сложного)
Хм... нет мне нужно что-то вроде онлайн поиска по первым введенным буквам, чтобы он отображал все подходящие критерии, а не только одно. поэтому я уперся в массив значений, сам мудрил от сложного)WeRiX
nilem, просто спасибище тебе) выручил. проще некуда аж стыдно) Сразу вспомнился анекдот
Цитата
На крупном предприятии произошла поломка, все производство остановилось. Директор бегает, рвет на себе волосы, никто не может починить, предприятие несет убытки.
Вызывают специалиста. Он подходит к нужному месту и ударяет по какой-то железяке молотком. Все снова ожило, производство сдвинулось с «точки невозврата».
Директор счастлив, жмет специалисту руку. Тот благодарит за заказ и протягивает счет — 1000 евро.
Директор в недоумении: «Как, ты же один раз всего ударил?» Специалист, спокойно: «Все верно — 1 евро за удар молотком, 999 — за знание куда и как правильно ударить.»
nilem, просто спасибище тебе) выручил. проще некуда аж стыдно) Сразу вспомнился анекдот
Цитата
На крупном предприятии произошла поломка, все производство остановилось. Директор бегает, рвет на себе волосы, никто не может починить, предприятие несет убытки.
Вызывают специалиста. Он подходит к нужному месту и ударяет по какой-то железяке молотком. Все снова ожило, производство сдвинулось с «точки невозврата».
Директор счастлив, жмет специалисту руку. Тот благодарит за заказ и протягивает счет — 1000 евро.
Директор в недоумении: «Как, ты же один раз всего ударил?» Специалист, спокойно: «Все верно — 1 евро за удар молотком, 999 — за знание куда и как правильно ударить.»