Подскажите, пожалуйста, как образом можно из всего множества записей ListBox (пока порядка 9 тыс.) находящегося на форме, оставить только те, которые будут соответствовать введенным с клавиатуры буквам, причем в строгом соответствии с порядком введенных букв. То, что здесь удалось найти, проводит отбор данных, но не так, как я описал. Спасибо.
Здравствуйте!
Подскажите, пожалуйста, как образом можно из всего множества записей ListBox (пока порядка 9 тыс.) находящегося на форме, оставить только те, которые будут соответствовать введенным с клавиатуры буквам, причем в строгом соответствии с порядком введенных букв. То, что здесь удалось найти, проводит отбор данных, но не так, как я описал. Спасибо.vigl
vigl, как то не очень вы описали. Боюсь, что масса предложенных вариантов будет снова не подходить и хорошо, если кто угадает ваши сокровенные желания. Каково условие фильтра (Содержит, начинается, заканивается, ... все это с отрицанием ..., сочетание букв или раздельно ) Куда вы вводите ваши буквы?
vigl, как то не очень вы описали. Боюсь, что масса предложенных вариантов будет снова не подходить и хорошо, если кто угадает ваши сокровенные желания. Каково условие фильтра (Содержит, начинается, заканивается, ... все это с отрицанием ..., сочетание букв или раздельно ) Куда вы вводите ваши буквы?bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Суббота, 10.02.2018, 08:50
А я то думал, что написал вполне понятно, но, увы. Сейчас все-таки, попытаюсь: Имеется форма, на форме имеется ListBox, который заполняется и отсортировывается в алфавитном порядке ФИО в количестве 8738 штук средствами VBA, TextBox для ввода искомых значений и много чего еще, не имеющее отношение к проблеме. Искать требуемую ФИО двигая имеющиеся записи, это нереально, поэтому логичнее и проще было бы организовать поиск путем отбора в списке значений в соответствии с вводимыми буквами в предназначенный для этого TextBox, при этом, если ввели букву "И", то в списке должны остаться только те фамилии, которые имеют букву "И" в начале, а не содержат ее в любом месте. Далее вводим к примеру букву "В" и в списке должны остаться значения у которых первые две буквы "ИВ" а не отбирать значение, у которых помимо введенной ранее букве "И" содержится буква "В" в любом месте слова. Далее вводим букву "А" и остаются только значения, у которых третьей буква "А" и в целом "ИВА" не наличии этой буквы в любом месте слова. и т.д., т.е. четкий и конкретный отбор в соответствии с введенным образцом.
А я то думал, что написал вполне понятно, но, увы. Сейчас все-таки, попытаюсь: Имеется форма, на форме имеется ListBox, который заполняется и отсортировывается в алфавитном порядке ФИО в количестве 8738 штук средствами VBA, TextBox для ввода искомых значений и много чего еще, не имеющее отношение к проблеме. Искать требуемую ФИО двигая имеющиеся записи, это нереально, поэтому логичнее и проще было бы организовать поиск путем отбора в списке значений в соответствии с вводимыми буквами в предназначенный для этого TextBox, при этом, если ввели букву "И", то в списке должны остаться только те фамилии, которые имеют букву "И" в начале, а не содержат ее в любом месте. Далее вводим к примеру букву "В" и в списке должны остаться значения у которых первые две буквы "ИВ" а не отбирать значение, у которых помимо введенной ранее букве "И" содержится буква "В" в любом месте слова. Далее вводим букву "А" и остаются только значения, у которых третьей буква "А" и в целом "ИВА" не наличии этой буквы в любом месте слова. и т.д., т.е. четкий и конкретный отбор в соответствии с введенным образцом.vigl
Вы просили подсказку - я вам ее дал. 90% вероятности, что правильно. Вы умышлено не читаете правил, и превращаете тему с вопросом, не стоящим выеденного яйца, в место для стёба?
Вы просили подсказку - я вам ее дал. 90% вероятности, что правильно. Вы умышлено не читаете правил, и превращаете тему с вопросом, не стоящим выеденного яйца, в место для стёба?RAN
Дорогая редакция, скажите, кто у меня за стенкой скребется, и пищит? Но это точно не мыши, потому, что, когда я гляжу в окно, мышей не видно, и, когда гляжу под диван - тоже!
Дорогая редакция, скажите, кто у меня за стенкой скребется, и пищит? Но это точно не мыши, потому, что, когда я гляжу в окно, мышей не видно, и, когда гляжу под диван - тоже! RAN
Вы просили подсказку - я вам ее дал. 90% вероятности, что правильно. Вы умышлено не читаете правил, и превращаете тему с вопросом, не стоящим выеденного яйца, в место для стёба?
я не понимаю о чем Вы пишете и что за подсказку Вы дали. вот Апострофф действительно постарался помочь, за что я ему благодарен, а Вы занимаетесь тем, в чем пытаетесь меня обвинить - превращаете тему с вопросом в место для стёба, что в очередной раз доказано Вашим сообщением от 19.22 под № 14:
Дорогая редакция, скажите, кто у меня за стенкой скребется, и пищит? Но это точно не мыши, потому, что, когда я гляжу в окно, мышей не видно, и, когда гляжу под диван - тоже!
Вы просили подсказку - я вам ее дал. 90% вероятности, что правильно. Вы умышлено не читаете правил, и превращаете тему с вопросом, не стоящим выеденного яйца, в место для стёба?
я не понимаю о чем Вы пишете и что за подсказку Вы дали. вот Апострофф действительно постарался помочь, за что я ему благодарен, а Вы занимаетесь тем, в чем пытаетесь меня обвинить - превращаете тему с вопросом в место для стёба, что в очередной раз доказано Вашим сообщением от 19.22 под № 14:
Дорогая редакция, скажите, кто у меня за стенкой скребется, и пищит? Но это точно не мыши, потому, что, когда я гляжу в окно, мышей не видно, и, когда гляжу под диван - тоже!
Да зачем мне оно нать? Нет, вы что, серьезно не понимаете сути вашего вопроса? "У меня есть то, что работает, но не так, как мне надо. Как сделать, чтобы оно работало так, как мне надо?" И вы что, действительно надеетесь получить ответ на такой вопрос?
Да зачем мне оно нать? Нет, вы что, серьезно не понимаете сути вашего вопроса? "У меня есть то, что работает, но не так, как мне надо. Как сделать, чтобы оно работало так, как мне надо?" И вы что, действительно надеетесь получить ответ на такой вопрос?RAN
Быть или не быть, вот в чем загвоздка!
Сообщение отредактировал RAN - Суббота, 10.02.2018, 19:49
[offtop] RAN, разве это стеб :-) напомню тему Вот это было незабываемо. :-) Тут ТС сперва не описал что хотел понятным языком для всех, потом исправился и словами что работает криво всего то и показал, что тот код не выполняет задуманное им. [/offtop]
По теме, мое редкое соприкосновение с SQL отучило пользовать Like, интересно на сколько в VBA быстрее/медленнее конструкция вида
[vba]
Код
ListBox1.Clear FltrLen = Len(TextBox1) StrFltr = LCase(TextBox1) For i = 0 To UBound(a) If LCase(Left(a(i), FltrLen)) = StrFltr Then
[/vba]
[offtop] RAN, разве это стеб :-) напомню тему Вот это было незабываемо. :-) Тут ТС сперва не описал что хотел понятным языком для всех, потом исправился и словами что работает криво всего то и показал, что тот код не выполняет задуманное им. [/offtop]
По теме, мое редкое соприкосновение с SQL отучило пользовать Like, интересно на сколько в VBA быстрее/медленнее конструкция вида
[vba]
Код
ListBox1.Clear FltrLen = Len(TextBox1) StrFltr = LCase(TextBox1) For i = 0 To UBound(a) If LCase(Left(a(i), FltrLen)) = StrFltr Then
RAN, хорошо. 1.вот код заполнения значения ListBox при активации формы: [vba]
Код
Private Sub UserForm_Activate()
Sheets("База").Select Dim myRange As Range, myCell As Range, myCollection As New Collection, _ myElement As Variant, i As Long
Set myRange = Range("M2:M9000")
On Error Resume Next For Each myCell In myRange myCollection.Add CStr(myCell.Value), CStr(myCell.Value) Next myCell On Error GoTo 0
For Each myElement In myCollection frmFind.lstKod.AddItem myElement Next myElement
With lstKod: iCountList = .ListCount - 1
For iCount = iCountList To 1 Step -1 For iCountTemp = iCountList To 1 Step -1 If StrComp(.List(iCountTemp), .List(iCountTemp - 1), vbTextCompare) = -1 Then .AddItem .List(iCountTemp), iCountTemp - 1 .RemoveItem iCountTemp + 1 End If Next Next End With End Sub
For iCount = iCountList To 1 Step -1 For iCountTemp = iCountList To 1 Step -1 If StrComp(.List(iCountTemp), .List(iCountTemp - 1), vbTextCompare) = -1 Then .AddItem .List(iCountTemp), iCountTemp - 1 .RemoveItem iCountTemp + 1 End If Next Next End With
Dim x, i As Long, txt As String, lt As Long, s As String If Len(txtKod.Text) = 0 Or bu = True Then Exit Sub txt = txtKod.Text: lt = Len(txtKod.Text) x = Sheets("База").Columns(13).SpecialCells(2).Value
For i = 1 To UBound(x, 1) If txt = Mid(x(i, 1), 1, lt) Then s = s & x(i, 1) & "~" Next i
lstKod.List = Split(Mid(s, 2), "~") End Sub
[/vba]
3. вот загруженная форма после отбора повторяющихся данных (обратите внимание на значения, начинающиеся с цифры 5): 4. вот результат отбора, где одно значение повторяется несколько раз, одно значение непонятно откуда взялось, а других значений вообще нет: вот в принципе и все... что Вы скажете? как это побороть? [p.s.] создав тему, я думал, что кто-то из участников обсуждения где-то видел готовое решение.
RAN, хорошо. 1.вот код заполнения значения ListBox при активации формы: [vba]
Код
Private Sub UserForm_Activate()
Sheets("База").Select Dim myRange As Range, myCell As Range, myCollection As New Collection, _ myElement As Variant, i As Long
Set myRange = Range("M2:M9000")
On Error Resume Next For Each myCell In myRange myCollection.Add CStr(myCell.Value), CStr(myCell.Value) Next myCell On Error GoTo 0
For Each myElement In myCollection frmFind.lstKod.AddItem myElement Next myElement
With lstKod: iCountList = .ListCount - 1
For iCount = iCountList To 1 Step -1 For iCountTemp = iCountList To 1 Step -1 If StrComp(.List(iCountTemp), .List(iCountTemp - 1), vbTextCompare) = -1 Then .AddItem .List(iCountTemp), iCountTemp - 1 .RemoveItem iCountTemp + 1 End If Next Next End With End Sub
For iCount = iCountList To 1 Step -1 For iCountTemp = iCountList To 1 Step -1 If StrComp(.List(iCountTemp), .List(iCountTemp - 1), vbTextCompare) = -1 Then .AddItem .List(iCountTemp), iCountTemp - 1 .RemoveItem iCountTemp + 1 End If Next Next End With
Dim x, i As Long, txt As String, lt As Long, s As String If Len(txtKod.Text) = 0 Or bu = True Then Exit Sub txt = txtKod.Text: lt = Len(txtKod.Text) x = Sheets("База").Columns(13).SpecialCells(2).Value
For i = 1 To UBound(x, 1) If txt = Mid(x(i, 1), 1, lt) Then s = s & x(i, 1) & "~" Next i
lstKod.List = Split(Mid(s, 2), "~") End Sub
[/vba]
3. вот загруженная форма после отбора повторяющихся данных (обратите внимание на значения, начинающиеся с цифры 5): 4. вот результат отбора, где одно значение повторяется несколько раз, одно значение непонятно откуда взялось, а других значений вообще нет: вот в принципе и все... что Вы скажете? как это побороть? [p.s.] создав тему, я думал, что кто-то из участников обсуждения где-то видел готовое решение.vigl
vigl, пример то можно , а то рисовать самим нет желания, а отлаживать без данных не очень получается. да и конечно второй код просто фильтрует данные без контроля на уникальность и сортировки и берет их прямо с листа.
vigl, пример то можно , а то рисовать самим нет желания, а отлаживать без данных не очень получается. да и конечно второй код просто фильтрует данные без контроля на уникальность и сортировки и берет их прямо с листа.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Суббота, 10.02.2018, 21:02
vigl, поймите, если вы не дадите небольшой пример с формой (Ваши секретные данные нам не нужны), то будем ещё две страницы слышать от Вас "не подходит", "код нерабочий" и т.п.
vigl, поймите, если вы не дадите небольшой пример с формой (Ваши секретные данные нам не нужны), то будем ещё две страницы слышать от Вас "не подходит", "код нерабочий" и т.п.Pelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816