Страницы: 1
RSS
Извлечение первого символа из ячейки средствами VBA (ЛЕВСИМВ не подходит)
 
Знатоки подскажите. Есть столбец в несколько тысяч ячеек с разнообразными символами (буквы, цифры, разной длины). Как "объяснить" Экселю, что нужно просматривать именно ПЕРВЫЙ символ ячейки и сравнивать его с некой переменной, если не совпадает прейти на ячейку ниже, если совпал - остановить поиск и выделить данную ячейку. Пробовал в соседнем столбце вставить формулу ЛЕВСИМВ и просматривать макросом этот столбец, но файл в этом случае в размере распухает до неприличия и заметно затормаживается быстродействие. Стандартный поиск Ctr+F находит необходимый символ в каждой ячейке, где он встречается, а не только первый.
 
Формула массива.  
=ПОИСКПОЗ($C$1;ЕСЛИ(ЕОШ(ПОИСК($C$1;$A$1:$A$7));0;ЕСЛИ(ПОИСК($C$1;$A$1:$A$7)=1;$C$1;0));0)  
Показывает порядковый № ячейки из диапазона с первым символом, равным искомому.  
Здесь $A$1:$A$7 - где ищем, $C$1 - что ищем.
 
Если разговор идет только о выделении ячейки, первый символ которой равен определенному значению, то посмотрите приложенный файл с условным форматированием.  
С уважением, Александр.
 
Sh_Alex спасибо, но выделение имелось ввиду курсором.
 
vikttur, спасибо, вариант вроде подходящий, но работает только с буквой "б" почему-то. Я вставил предложенную формулу в табличку Sh_Alex и отображается номер ячейки только при букве "б" (при чем номер 1, хотя должен быть 2), в остальных случаях вообще ошибка. И будет ли формула работать, если искать цифру? Вообще идею понял, подумаю, может сам исправлю. И все же, может кто знает, как с помощью VBA проверятьв ячейке только определенный по счету символ?
 
{quote}{login=Синдбад Мореход}{date=03.12.2008 01:25}{thema=}{post}vikttur, спасибо, вариант вроде подходящий, но работает только с буквой "б" почему-то. Я вставил предложенную формулу в табличку Sh_Alex и отображается номер ячейки только при букве "б" (при чем номер 1, хотя должен быть 2), в остальных случаях вообще ошибка. И будет ли формула работать, если искать цифру? Вообще идею понял, подумаю, может сам исправлю. И все же, может кто знает, как с помощью VBA проверятьв ячейке только определенный по счету символ?{/post}{/quote}  
 
 
Попробуйте комбинацию клавиш "Ctrl+Shift+Enter" для примера Ув. Виктора! :))
 
{quote}{login=Синдбад Мореход}{date=03.12.2008 01:25}{thema=}{post}отображается номер ячейки только при букве "б" (при чем номер 1, хотя должен быть 2), в остальных случаях вообще ошибка. И будет ли формула работать, если искать цифру? {/post}{/quote}  
У "vikttur" формула массива и, как было сказано, должна вводится комбинацией клавиш "Ctrl+Shift+Enter".    
Начальные цифры будут отыскиваться в моей версии решения, если измените формат ячейки с поисковым значением на "текстовой".  
Изменив формулу в "условном форматировании" можно выделять ячейку отыскивая любой по счету символ.  
С уважением, Александр.  
P.S. Если у Вас появится необходимисть, отпишитесь. Сварганю пример.
 
dim s as string  
s=inputbox("simvol!")  
dim c as range  
set c = Range("A1:A65536").Find(s & "*",xlWhole)  
if not s is nothing then c.select
 
вообще так  
http://i006.radikal.ru/0812/86/84a2b6f363c5.jpg
 
Также для финда по xlWhole вариации:  
"*a" - заканчивается на a  
"?a*" - 2-я буква a  
"??a*" - 3-я буква а  
"a?" - начинается на a и содержит ещё 1 любую букву  
"a?*" - 2+ буквы минимум и начинается на a (например a1, a10, a12, a55, a55dd56 всё посчитается)    
"*слово*" - находит слова содержащие "слово" в любой части строки (включая начало и конец)  
"слово*" - находит ячейки начинающиеся со "слово" или просто ячейку "слово" без дополнительных букв  
 
и т.д.  
 
В хелпе вроде есть че то про это
 
Всем огромное спасибо за оперативные ответы. Буду пробовать. :)
 
Такой вариант:  
 
dim s as string  
s=inputbox("simvol!")  
dim c as range  
set c = Range("A1:A65536").Find(s & "*",xlWhole)  
if not s is nothing then c.select  
 
то что требовалось. Только не пойму, почему не работает?  
На строке  
set c = Range("A1:A65536").Find(s & "*",xlWhole)  
стопорится.
 
Dim s As Variant  
s = InputBox("simvol!")  
Dim c As Range  
Set c = Range("A1:A65536").Find(s & "*", , , xlWhole)  
If Not c Is Nothing Then c.Select  
 
почитали бы хоть синтаксис :)
 
Опа, заработало! :) Спасибо. Я в VBA не сильно рублю, на уровне редактирования кода макрорекордера. Так что, отсутствие в строке двух запятых в глаза мне не бросилось. Ещё раз спасибо.
Страницы: 1
Читают тему
Наверх