Теми статей
Обрати теми

Позбавляємося латиниці

Редакція БК
Відповідь на запитання

Позбавляємося латиниці

 

Шановна редакціє! Допоможіть вирішити таке завдання. У мене є база даних. У ній знаходиться як числова, так і текстова інформація. Причому в тексті іноді трапляються латинські літери. Відрізнити «на око» російську «о» від англійської «о» практично неможливо. А через таку плутанину неправильно працює сортування. Помиляється автофільтр. Про консолідацію даних у цьому випадку взагалі говорити не можна! Як можна вирішити цю проблему? Наперед завдячую.

В. Фірсов, м. Харків

Відповідає Микола КАРПЕНКО, канд. техн. наук, доцент кафедри прикладної математики та інформаційних технологій Харківської національної академії міського господарства

 

Переглянувши список стандартних функцій для роботи з текстом в Excel, я не зміг підібрати відповідний набір інструментів для вирішення вашого завдання. Проблема полягає в тому, що для пошуку латинських (або російських, без різниці) символів у тексті потрібно переглядати рядок за літерами. Одну конкретну літеру з текстового рядка в Excel отримати можна. А от функції, яка циклічно вибирає всі символи із заданого рядка та порівнює їх зі зразком в Excel немає. Але це — не проблема. Тому що є мова VBA, на якій можна реалізувати будь-яку функцію. У тому числі й нашу. Причому знадобиться для цього п’ять хвилин та буквально десять рядків тексту. Робимо так:

1) відкриваємо документ. Наприклад, базу даних «

БД», зображену на рис. 1;

img 1

2) викликаємо «

Сервис → Макрос → Редактор Visual Basic» (або натискуємо «Alt+F11»). З’явиться вікно редактора VBA;

3) у лівому верхньому кутку вікна редактора знаходимо віконце із заголовком «

Project»;

4) у цьому вікні підсвічуємо рядок із написом «

VBAProject(БД.xls)» (рис. 2);

img 2

5) викликаємо меню «

Insert → Module». У гілці «VBAProject(БД.xls)» з’явиться рядок «Modules», а в ньому — елемент «Module1» (рис. 2);

6) робимо подвійне клацання лівою кнопкою миші на «

Module1», щоб підсвітити його;

7) у правій частині вікна редактора VBA друкуємо такий текст:

Public Function IsLat(str As String)

str = LCase(str)

LatinAlphbet = "*[abcdefghijklmnopqrstuvwxyz]*"

If str Like LatinAlphbet Then

IsLat = True

Else

IsLat = False

End If

End Function

8) закриваємо вікно редактора VBA, повертаємося до бази даних «

БД».

Ми створили призначену для користувача функцію з ім’ям «

IsLat». До деталей її роботи не вдаватимемося. Головне зрозуміти, що вона робить. Як вихідний параметр функція отримує рядок (у тексті програми він називається «Str»). Програма переглядає кожний символ цього рядка. Результатом її роботи буде значення «ИСТИНА», якщо в тексті «Str» є хоча б одна літера латинського алфавіту. В іншому разі функція «IsLat» поверне значення «ЛОЖЬ».

Подивимося, як скористатися нашою функцією. Робимо так:

1) відкриваємо файл «

БД», до комірки «G1» друкуємо заголовок колонки, на рис. 3 це «РусЛат»;

2) стаємо на комірку «

G1», викликаємо Майстра функцій через «Вставка → Функция…». З’явиться вікно з переліком функцій;

3) у списку «

Категория:» вибираємо «Определенные пользователем»;

4) у віконці «

Выберите функцию» знаходимо «IsLat», клацаємо по ній лівою кнопкою миші;

5)  як параметр вказуємо комірку «

B2» бази «БД». Вибір адреси «B2» робимо клацанням миші на робочому листі;

6) у вікні «

Мастер функций» натискуємо «ОК»;

7) копіюємо створену функцію на всю висоту таблиці. Результат показано на рис. 3 у колонці «

G». Рядки робочого листа, в яких поле «Контрагент» містить латинські символи, позначені в колонці «РусЛат» як «ИСТИНА». На рис. 3 такими є рядки «3», «4», «9».

img 3

Залишається передрукувати ці прізвища та скопіювати їх за всією базою з використанням автофільтру. Як бачите, нічого складного.

Тепер один технічний момент. Зараз функція «

IsLat» буде доступна тільки в поточній робочій книзі. Щоб переконатися в цьому, зробіть так:

1) закрийте файл «

БД»;

2) створіть новий документ;

3) виконайте «

Вставка → Функция…», у переліку вкажіть категорію «Определенные пользователем». Функцію «IsLat» у списку ви не знайдете.

Проблему вирішити дуже просто: потрібно помістити функцію до бібліотеки, що автоматично завантажується. Наприклад, у файл «

Personal.xls». На рис. 2 цей файл є у вікні «Project». Якщо у вас його немає, зробіть так:

1) відкрийте документ;

2) виконайте команду «

Сервис → Макрос → Начать запись». З’явиться вікно, як на рис. 4;

img 4

3) у полі «

Имя макроса» уведіть будь-яку назву (на рис. 4 це символ «Т»);

4) натисніть «

ОК». Стане доступним лист Excel;

5) клацніть по будь-якій комірці робочого листа;

6) уведіть до цієї комірки будь-який символ або число;

7) виконайте «

Сервис → Макрос → Остановить запись».

Тепер ви можете викликати редактор VBA, у вікні «

Project» буде рядок «VBAProject(Personal.xls)». Усе, що залишається зробити, — додати модуль до цього проекту і ввести в нього текст функції «IsLat». Тобто тепер дії виглядатимуть так:

1) відкриваємо документ;

2)  натискуємо «

Alt+F11»;

3)  у вікні редактора VBA у області «

Project» знаходимо «VBAProject(Personal.xls)»;

4)  викликаємо меню «

Insert → Module». У гілці «VBAProject(Personal.xls)» з’явиться рядок «Modules», а в ньому елемент «Module1»;

5) вибираємо «

Module1»;

6)  у правій частині вікна редактора VBA друкуємо текст функції «

IsLat». До речі, якщо у правій частині вікна є текст створеного макроса, його можна сміливо стерти. Хоча це робити не обов’язково;

7) зберігаємо файл із вікна редактора VBA;

8) закриваємо редактор, повертаємося в Excel.

Тепер функція «

IsLat» буде доступною в будь-якій робочій книзі.

У принципі, завдання ми вирішили. Але є одна незручність: ми бачимо рядки, що містять латинські символи, але не бачимо самі ці літери. Немає нічого простішого:

1)  відкрийте вже знайомий редактор VBA («

Alt+F11»);

2)  виберіть елемент «

Module1» для «VBAProject(Personal.xls)». У правій частині вікна ви побачите текст нашої функції «IsLat». Його ми не чіпаємо;

3) у правій частині вікна редактора VBA до функції «

IsLat» (або після неї) уведіть такий текст (усього 10 рядків):

Sub ShowLat()

For Each c In Selection

For i = 1 To Len(c)

If (Asc(Mid(c, i, 1)) >= 65 And Asc(Mid(c, i, 1)) <= 90) Or _

(Asc(Mid(c, i, 1)) >= 97 And Asc(Mid(c, i, 1)) <= 122) Then

c.Characters(Start:=i, Length:=1).Font.ColorIndex = 3

End If

Next i

Next c

End Sub

4) збережіть файл із вікна VBA. Поверніться у вікно Excel;

5) у цьому вікні виділіть колонку «

B» (у ній у нас записані назви контрагентів);

6) викличте «

Сервис → Макрос → Макросы» (або («Alt+F8»). З’явиться вікно «Макрос» (рис. 5);

img 5

7) у цьому вікні виберіть «

PERSONAL.XLS!ShowLat»;

8) натисніть кнопку «

Выполнить». Латинські символи в колонці «B» стануть червоного кольору. Приємне видовище…

І останнє. Якщо ви користуєтеся макросом часто, має сенс організувати його виклик за гарячою клавішею. Для цього у вікні «

Макрос» (рис. 5) клацніть по кнопці «Параметры». У запропонованому вікні вкажіть літеру, наприклад, «L» та натисніть «ОК». Тепер макрос «ShowLat» можна викликати за комбінацією «Ctrl+L».

 

Чекаю на ваші запитання, зауваження та пропозиції на

bk@id.factor.ua, nictomkar@rambler.ru або на форумі редакції www.bk.factor.ua/forum . Успішної роботи!
App
Завантажуйте наш мобільний додаток Factor

© Factor.Media, 1995 -
Всі права захищені

Використання матеріалів без узгодження з редакцією заборонено

Ознайомитись з договором-офертою

Приєднуйтесь
Адреса
м. Харків, 61002, вул. Сумська, 106а
Ми приймаємо
ic-privat ic-visa ic-visa

Ми використовуємо cookie-файли, щоб зробити сайт максимально зручним для вас та аналізувати використання наших продуктів та послуг, щоб збільшити якість рекламних та маркетингових активностей. Дізнатися більше про те, як ми використовуємо ці файли можна тут.

Дякуємо, що читаєте нас Увійдіть і читайте далі