Найти тему

Эксель и кроссворды. Часть 2. Разбиваем слова на буквы.

Оглавление

Всем привет, меня зовут Андрей, это снова я!

Продолжаю рассказывать про то, как можно составлять кроссворды с помощью Эксель.

Напомню, первую часть по этой теме можно найти по ссылке:

Итак, продолжаем. На следующем этапе можно разбить каждое слово на буквы следующим образом:

Фрагмент листа Эксель.
Фрагмент листа Эксель.

Если мы перед этим уже заполнили столбцы до G и H, то разбивка наших ранее добавленных слов в базу данных займет не так много времени. Всю эту разбивку можно осуществить с помощью всего одного макроса.

Но прежде, чем говорить про этот макрос, нужно создать в нашем основном файле еще один лист и присвоить ему имя / заголовок "Имена". Там мы время от времени будем помещать такие имена, которые нам реально пригодятся при работе по составлению или отгадыванию кроссвордов.

В любую пустую клетку этого листа введем формулу:

=""

Все достаточно просто. Знак равенства, а также две кавычки подряд. Это будет означать, что имеется ввиду совсем пустая ячейка, которая не может быть приравнена к нулю, не является числовой ячейкой, и не содержит ни одного символа. Просто пустота. Пустая текстовая (не числовая) ячейка.

Присвоим этой ячейке имя:

emp

Все буквы латинские.

Этой же ячейке присвоим еще одно имя:

пус

Иногда бывает удобно использовать имя, содержащее русские буквы, а иногда - имя с латиницей. В Эксель одной и той же ячейке (или одному и тому же блоку данных) можно одновременно присваивать несколько имен.

После того, как мы создали этот лист и ввели нужные нам имена, можно вернуться к тому листу. который содержит слова для кроссворда, и ввести нужный нам макрос, который будет разбивать слова на буквы.

Итак, вот сам текст макроса:

Sub Разбить_слова_на_буквы()
'отключаем обновление экрана
Application.ScreenUpdating = False
'Отключаем автоматический пересчет формул
Application.Calculation = xlCalculationManual
'Отключаем отслеживание событий
Application.EnableEvents = False
'Отключаем разбиение на печатные страницы
ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False

q1 = 1 * InputBox("Введите номер первой строки")
q2 = 1 * InputBox("Введите номер последней строки")
emp_ = ThisWorkbook.Names("emp").RefersToRange.Value
For i = q1 To q2
For j = 9 To 48
If Cells(i, 8) >= j - 8 Then
Cells(i, j) = Mid(Cells(i, 7), j - 8, 1)
Else
Cells(i, j) = emp_
End If
Next j
Next i

'Возвращаем обновление экрана
Application.ScreenUpdating = True
'Возвращаем автоматический пересчет формул
Application.Calculation = xlCalculationAutomatic
'Включаем отслеживание событий
Application.EnableEvents = True
End Sub

Этот макрос предварительно спрашивает номера строк: "верхней" и "нижней" строки. В нашем случае номер верхней строки - это цифра 2 (потому что в строке 1 Эксель только заголовки, первое слово начинается со строки 2 Эксель), а номер нижней строки зависит только от того, на какой именно строке расположено наше самое "нижнее" слово. У меня к моменту написания этой статьи в базе чуть больше, чем 2000 слов, но если у кого-то есть в базе другое число слов, то нужно в качестве второй цифры ввести именно номер самой нижней строки.

Фрагмент листа Эксель.
Фрагмент листа Эксель.

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

Продолжение следует...

А на этом пока всё, всем пока, и до новых встреч.

Наука
7 млн интересуются