Добрый день! Когда то давно взял файл с макросом по поиску нужного значения в заданном столбце и переходу на другой столбец, найденной строки. Вот код: [vba]
Код
Public stolb As Integer Public stolbV As Integer Public strokaFirst As Integer
Private Sub UserForm_Initialize() stolb = 1 'задаем столбец для поиска А-1 В-2 С-3 и тд stolbV = 7 'задаем столбец для выбора А-1 В-2 С-3 и тд strokaFirst = 2 'задаем номер верхней строки, начиная с которой осуществляем поиск End Sub
Private Sub TextBox1_Change() 'очистка списка найденых элементов ListBox1.Clear 'при отсутствии символов для поиска - выход If Len(TextBox1.Value) = 0 Then Exit Sub 'вычисляем номер последней строки, до которой осуществляем поиск strokaLast = Cells(Rows.Count, stolb).End(xlUp).Row 'задаем индекс первого элемента списка ListBox1 j = 0 'переводим искомый текст в вверхний регистр textS = UCase(TextBox1.Value)
For i = strokaFirst To strokaLast 'для одного символа If Len(TextBox1.Value) = 1 Then If UCase(Left(Cells(i, stolb), 1)) = textS Then 'при совпадении добавляем элемент в список ListBox1.AddItem i ListBox1.List(j, 1) = Cells(i, stolb) 'задаем индекс для следующего элемента списка j = j + 1 End If 'для двух и более символов Else If InStr(1, UCase(Cells(i, stolb)), textS) > 0 Then 'при совпадении добавляем элемент в список ListBox1.AddItem i ListBox1.List(j, 1) = Cells(i, stolb) 'задаем индекс для следующего элемента списка j = j + 1 End If End If Next
'если найден только один эл-т, то переходим к нему If j = 1 Then Cells(ListBox1.List(0, 0), stolbV).Select End Sub
Private Sub ListBox1_Click() 'если не выбран элемент списка - выход If ListBox1.ListIndex = -1 Then Exit Sub 'переход к ячейке листа, содержащей выбранный элемент списка Cells(ListBox1.Value, stolbV).Select End Sub
[/vba] Возникла проблема с поиском по столбцу не с забитыми данными (числами), а с результатами формулы (данные из другого листа), я так понимаю в ходе работы кода обрабатываются не результаты формулы, а мне нужны именно они. Переформатировать столбец с формулами в значения не хочется, так как постоянно добавляются новые данные, в данный момент я их ввожу на одном листе, они дублируются на другом. На первом листе макрос ищет по столбцу с этими значениями, на втором нифига. Как мне кажется нужно применить какую-то функцию vba со значением Cells(i, stolb) кода, типа как в стандартном поиске в параметрах переключается область поиска с формулы, на значения. Хотя и там и так текстовые ячейки, когда руками заполнены отлично по ним ищет, а по формулам нет. Прошу подсказать.
В файле примере не работает второй поиск на вкладке Исходящих, если это непонятно. [moder]Для обтегивания кода макроса нужно топать не кнопочку # Поправил Вам[/moder]
Добрый день! Когда то давно взял файл с макросом по поиску нужного значения в заданном столбце и переходу на другой столбец, найденной строки. Вот код: [vba]
Код
Public stolb As Integer Public stolbV As Integer Public strokaFirst As Integer
Private Sub UserForm_Initialize() stolb = 1 'задаем столбец для поиска А-1 В-2 С-3 и тд stolbV = 7 'задаем столбец для выбора А-1 В-2 С-3 и тд strokaFirst = 2 'задаем номер верхней строки, начиная с которой осуществляем поиск End Sub
Private Sub TextBox1_Change() 'очистка списка найденых элементов ListBox1.Clear 'при отсутствии символов для поиска - выход If Len(TextBox1.Value) = 0 Then Exit Sub 'вычисляем номер последней строки, до которой осуществляем поиск strokaLast = Cells(Rows.Count, stolb).End(xlUp).Row 'задаем индекс первого элемента списка ListBox1 j = 0 'переводим искомый текст в вверхний регистр textS = UCase(TextBox1.Value)
For i = strokaFirst To strokaLast 'для одного символа If Len(TextBox1.Value) = 1 Then If UCase(Left(Cells(i, stolb), 1)) = textS Then 'при совпадении добавляем элемент в список ListBox1.AddItem i ListBox1.List(j, 1) = Cells(i, stolb) 'задаем индекс для следующего элемента списка j = j + 1 End If 'для двух и более символов Else If InStr(1, UCase(Cells(i, stolb)), textS) > 0 Then 'при совпадении добавляем элемент в список ListBox1.AddItem i ListBox1.List(j, 1) = Cells(i, stolb) 'задаем индекс для следующего элемента списка j = j + 1 End If End If Next
'если найден только один эл-т, то переходим к нему If j = 1 Then Cells(ListBox1.List(0, 0), stolbV).Select End Sub
Private Sub ListBox1_Click() 'если не выбран элемент списка - выход If ListBox1.ListIndex = -1 Then Exit Sub 'переход к ячейке листа, содержащей выбранный элемент списка Cells(ListBox1.Value, stolbV).Select End Sub
[/vba] Возникла проблема с поиском по столбцу не с забитыми данными (числами), а с результатами формулы (данные из другого листа), я так понимаю в ходе работы кода обрабатываются не результаты формулы, а мне нужны именно они. Переформатировать столбец с формулами в значения не хочется, так как постоянно добавляются новые данные, в данный момент я их ввожу на одном листе, они дублируются на другом. На первом листе макрос ищет по столбцу с этими значениями, на втором нифига. Как мне кажется нужно применить какую-то функцию vba со значением Cells(i, stolb) кода, типа как в стандартном поиске в параметрах переключается область поиска с формулы, на значения. Хотя и там и так текстовые ячейки, когда руками заполнены отлично по ним ищет, а по формулам нет. Прошу подсказать.
В файле примере не работает второй поиск на вкладке Исходящих, если это непонятно. [moder]Для обтегивания кода макроса нужно топать не кнопочку # Поправил Вам[/moder]rJIynbIuKOT
K-SerJC, скачал прикрепленный файл, первые три кнопки поиска работают отлично, как по цифрам, так и по тексту, последняя не работает. Думаю вы или не разрешили содержимое или заблокировали работу макросов.
Прошу отписаться ешё кого-нибудь, работает или не работает файл.
K-SerJC, скачал прикрепленный файл, первые три кнопки поиска работают отлично, как по цифрам, так и по тексту, последняя не работает. Думаю вы или не разрешили содержимое или заблокировали работу макросов.
Прошу отписаться ешё кого-нибудь, работает или не работает файл.rJIynbIuKOT
ListBox1.Value - это текст, а Вы пытаетесь засунуть его в номер строки. Преобразуйте в число Это я про переход из Листбокса на ячейку - у меня не работал в Вашем коде
А по поводу второй кнопки - Вы пытаетесь работать с 10-м столбцом, а нужно с 12-м (у Вас 2 столбца скрыты)
ListBox1.Value - это текст, а Вы пытаетесь засунуть его в номер строки. Преобразуйте в число Это я про переход из Листбокса на ячейку - у меня не работал в Вашем коде
А по поводу второй кнопки - Вы пытаетесь работать с 10-м столбцом, а нужно с 12-м (у Вас 2 столбца скрыты)_Boroda_
K-SerJC, спасибо большое, вся проблема была в том, что искал в пустом скрытом столбце и естественно ничего не находил. Скрыл его сам, дурак, ибо не умел раньше редактировать код макроса. _Boroda_, из-за своей необразованности в плане темы не понял вашего совета, лично у меня все работает согласно комментариям в коде, переходы к ячейкам верны. Спасибо за оперативную помощь, тему можно закрыть.
K-SerJC, спасибо большое, вся проблема была в том, что искал в пустом скрытом столбце и естественно ничего не находил. Скрыл его сам, дурак, ибо не умел раньше редактировать код макроса. _Boroda_, из-за своей необразованности в плане темы не понял вашего совета, лично у меня все работает согласно комментариям в коде, переходы к ячейкам верны. Спасибо за оперативную помощь, тему можно закрыть.rJIynbIuKOT