Excel и судоку
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Excel и судоку

Андрей Евгеньевич Зайнулин

Excel и судоку





Любители судоку могут получить как минимальную, так и максимальную помощь Эксель при решении судоку.

Главные темы книги, которые помогут улучшить уровень владения в Эксель:

— создание имен для ячеек и их диапазонов, а также для формул;

— использование в именах как абсолютных, так и относительных и смешанных ссылок;

— сокращение вложений в функции ЕСЛИ без потери смысла;

— работа с макросами;


12+

Оглавление

Глава 1. Вместо введения

Данная книга пригодится не только тем, кто любит отгадывать судоку, но также и всем тем, кто хочет улучшить уровень своего владения электронными таблицами Эксель (Excel).

Основные темы, которые рассмотрены в данной книге:

· программирование в Эксель, работа с макросами;

· форматирование и условное форматирование ячеек Эксель;

· имена ячеек и групп (массивов, областей) ячеек;

· создание имен для формул в Эксель;

· создание имен для разрозненных диапазонов в Эксель;

· сокращение вложений в функции ЕСЛИ с сохранением всех задач, стоящих перед этой функцией;

· создание файла с макросами в Эксель, помогающего найти кандидаты для каждой ячейки судоку;

· фильтрация (отсеивание) ненужных кандидатов судоку;

· выделение самых главных (особых, уникальных) кандидатов судоку;

· полная или частичная автоматизация решения судоку от начала и до конца;

· работа в макросах (в редакторе VBA) с ячейками, массивами ячеек, а также с формулами, у которых уже есть свои имена в текущей книге Эксель;

· оптимизация работы с очень длинными (очень большими) формулами в Эксель;

· создание таких списков для ячеек Эксель, чтобы из них можно было выбрать нужный элемент для ввода в ячейку Эксель (создание списков для ячеек Эксель).

Конечно же, эта книга очень пригодится любителям судоку, поскольку в ней содержится информация о том, как можно решать судоку, как быстро найти нужные кандидаты для судоку.

В данной книге рассказано о том, что такое кандидаты в судоку, как кандидаты помогают в решении судоку.

Основные методы и способы решения судоку отражены в данной книге. Эксель поможет отфильтровать кандидаты судоку, убрать лишние кандидаты, оставить только нужные, перевести самые нужные кандидаты из кандидатов в основное судоку.

С помощью данной книги можно не только быстро отгадывать судоку, видеть все кандидаты судоку, но и быстро выделять самые важные кандидаты. Можно ко всем кандидатам применять несколько видов условного форматирования, что позволит особо выделить самые главные кандидаты. Эта книга послужит помощником при отгадывании судоку.

Многие программисты, улучшая свои навыки владения Эксель, получат удовольствие не сколько от разгадывания судоку, сколько от самого процесса программирования, то есть составления программ с помощью Эксель, которые помогут в отгадывании разных видов судоку.

Когда автор начал работать над этой книгой, то вначале хотел разобрать несколько видов судоку. Но когда выяснилось, что объем информации только для основного (классического) типа судоку занимает несколько сотен страниц, пришлось на этом остановиться, ограничиться в этой книге только основным видом судоку. Все судоку, рассмотренные в этой книге, объединяет одно: размер 9 на 9. Большинство судоку, которые существуют на сегодняшний день, составляются именно размером 9 на 9 клеток. Другие типы судоку будут рассмотрены в следующих книгах, которые выйдут позже. Таким образом, данная книга — только первая книга в целой серии книг по данной теме.

С точки зрения математики любое заполненное судоку — это латинский квадрат. Если говорить про судоку размером 9 на 9 — то судоку будет представлять из себя латинский квадрат размером 9 на 9. Это значит, что в каждой строке и в каждом столбце любая из цифр от 1 до 9 включительно будет содержаться только по одному разу. Кроме того, почти во всех разновидностях судоку (за редкими оригинальными исключениями) имеются маленькие квадратики размером 3 на 3, причем в каждом из этих квадратиков каждая цифра от 1 до 9 включительно встречается тоже только однажды. Эти маленькие квадратики размером 3 на 3 мы будем называть блоками. В каждом судоку 9 на 9 содержится ровно 9 блоков размером 3 на 3. Во многих видах судоку присутствуют и добавочные правила, например, диагональные судоку — это те судоку, на каждой из диагоналей которых нет повторяющихся цифр. Не только диагональные, но и многие другие виды судоку будут рассмотрены… но уже не в данной книге, а в других книгах этого же автора, которые выйдут чуть позже.

Макросы и отрывки из макросов расположены внутри следующих стрелочек:

↓ ↓ ↓ ↓

(Текст макроса или его часть)

↑ ↑ ↑ ↑

Все судоку (как неразгаданные, так и разгаданные), что использованы в данной книге, либо получены с помощью компьютера (с помощью компьютерных программ), либо составлены лично автором этой книги. Любые совпадения с теми судоку или их частями, что были когда-то опубликованы в печатном и/или электронном виде и, возможно, являются объектом чьего-то авторского права, являются случайными. Единственное исключение из этого правила — это то судоку, которое названо «самым сложным судоку в мире», оно было не раз опубликовано в открытом доступе, его автором считается Арто Инкала, математик из Финляндии. По шкале, которой обычно измеряют трудность судоку, этот судоку обычно оценивают в 11 (одиннадцать) баллов.

Основная цель данной книги — помочь не только всем любителям судоку, но и всем тем, кто хочет улучшить свои навыки владения Эксель. В книге рассказано, как можно с помощью Excel получить все кандидаты для каждой ячейки судоку, как отсечь большинство «лишних» кандидатов, как быстро найти тот кандидат — назовем его «главный» кандидат — который быстро можно перенести из таблицы с кандидатами в основное судоку. Это уже, в принципе, не совсем кандидат, потому что данный кандидат будет либо единственным для какой-то конкретной клетки (ячейки) судоку, либо все кандидаты рядом с ним будут автоматически считаться «лишними» для той ячейки судоку, в которой находится этот «главный» кандидат. «Главный» кандидат — это тот, который однозначно и немедленно должен быть перемещен из кандидатов в основное судоку. По сути, в этом и заключается работа по заполнению (или разгадыванию) судоку, а именно: нужно найти «главный» кандидат и переместить (записать) его в основное судоку. Мы в данной книге иногда этот кандидат будем называть также «уникальным», «основным», или «однозначным». Это по сути одно и то же. И означает это понятие тот кандидат, который надо переместить в основное судоку.

В данной книге будет встречаться термин «область». Мы под областью будем понимать строку, столбец или блок (маленький квадратик 3 х 3) судоку. Если какое-то утверждение будет справедливо и для каждой строки судоку, и для каждого столбца судоку, и для каждого блока (маленького квадрата 3 х 3 судоку), то мы просто употребим термин «область». Так, например, фраза «в любой области судоку каждая цифра от 1 до 9 включительно может встречаться только 1 раз» будет означать, что и в каждой строке, и в каждом столбце, и в каждом блоке судоку каждая цифра от 1 до 9 может находиться только 1 раз.

В Эксель тоже имеется понятие «область» — это интервал смежных ячеек, или же просто отдельная ячейка (иногда «область» может состоять из одной ячейки). В «область» Эксель может входить как массив, в котором есть несколько строк и несколько столбцов Эксель, так и тот массив, который содержит несколько смежных ячеек одной строки или одного столбца. В принципе, каждая область судоку является также и областью Эксель. Но не каждая область Эксель будет являться областью судоку. Область Эксель может объединять как несколько разных областей судоку, а может и вообще находиться вне квадрата, содержащего все ячейки судоку. А еще область Эксель может включать в себя несколько частей от разных областей судоку.

Существуют следующие 2 причины, по которым кандидат судоку может считаться «главным»:

1. Если в какой-то области судоку какой-то конкретный кандидат (например, единица или двойка) встречается только один раз. Рассмотрим эту ситуацию более подробно:

1.1. Если в какой-то строке судоку среди всех кандидатов нужный нам кандидат встречается только один раз. Приведем пример. Допустим, что нам нужно заполнить следующее судоку (рисунок 1.1):

Рисунок 1.1.

Это судоку, которое было изображено на рисунке 1.1, будет часто встречаться в этой книге. Поэтому давайте договоримся так: присвоим этому судоку номер, и это судоку будет называться в этой книге «судоку №1».

В данном судоку число 39 в верхнем левом углу рисунка означает, что в судоку на данном этапе заполнено ровно 39 цифр (в заполненном до конца судоку будет 81 цифра).

Правда, получается так, что буквы Е и Ё очень похожи, да и буква З (зэ) очень похожа на цифру 3 (три).

Чтобы избежать всяких неудобств, неразберихи или путаницы, связанных с похожими буквами и цифрами, изменим буквенную нумерацию строк судоку (рисунок 1.2):

Рисунок 1.2.

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

Вот какими будут кандидаты для первой (верхней) строки этого судоку (рисунок 1.3):

Рисунок 1.3.

Разобьем эту строку на три части, чтобы было не так мелко и было удобнее смотреть (рисунок 1.4):

Рисунок 1.4.

Итак, рисунок 1.4 — это три фрагмента одного листа Эксель, но на самом листе Эксель они расположены так же, как это показано на рисунке 1.3, то есть занимают 4 строки Эксель, если считать и ту строку, которая содержит заголовки столбцов судоку (речь идет о той строке, которая содержит числа 91, 1, 1, 1, 2, … 8, 9, 9, 9).

Здесь есть несколько таких кандидатов, которые появляются только один раз в первой строке (в других строках тоже есть аналогичные кандидаты, но мы здесь более подробно рассмотрим первую, или верхнюю, строку судоку). Тут есть уникальные кандидаты, то есть те, которые встречаются в строке только однажды. Это цифры 5, 7 и 3. Цифра 5 встречается в ячейке А2, это и будет главным кандидатом для этой ячейки. Цифра 7 — это главный кандидат для ячейки А7, а цифра 3 — это главный кандидат для ячейки А9.

В этой строке судоку 5 цифр уже заполнено, 4 ячейки пустые. Это значит, что для четырех пустых ячеек нужно составить список всех возможных кандидатов.

Здесь в верхнем левом углу число 91 означает, что всего в данном судоку имеется 91 кандидат. На рисунке 1.3 мы видим не все кандидаты судоку, а только их часть, то есть те кандидаты, которые имеют отношение к первой (верхней) строке судоку.

Тут круглые символы (здесь мы их в виде текста показать не можем, просто скажем, что на рисунке 1.4 этих символов достаточно много, каждый из этих символов похож на вид зонтика сверху) означают, что для данной ячейки судоку не нужны кандидаты, потому что ячейка судоку уже заполнена. Двойные знаки минус означают, что ячейка судоку пустая, кандидаты для этой ячейки должны быть, но какая-то конкретная цифра не может быть кандидатом для данной ячейки. Конечно же, и круглые символы, и двойные минусы можно заменить любыми другими символами, которые больше всего нравятся (желательно не цифрами, не буквами и не числами, а просто красивыми символами), но об этом более подробно будет рассказано в другой главе этой книги.

Рассматривая судоку №1, мы можем сказать, что не нужны кандидаты для ячеек A1, A4, A5, A6 и A8 судоку, поскольку эти ячейки судоку уже заполнены, они не пустые.

Есть и такие ячейки судоку, у которых имеется всего один кандидат. Так, например, для ячейки А2 судоку кандидатом может быть только цифра 5, поэтому все клеточки вокруг этой пятерки заполнены двойными минусами. Для ячейки А2 судоку цифра 5 — это единственный кандидат. Обычно такие кандидаты называются «голыми одиночками». Но тему «голых одиночек» мы рассмотрим чуть позже, пока мы рассматриваем только те ситуации, при которых кандидат встречается только один раз в своей области. Правда иногда бывает и так, что этот самый кандидат, который уникален для своей области, будет единственным кандидатом для своей ячейки. Другими словами, не все уникальные кандидаты в своей области могут быть «голыми одиночками», это только частный случай. Итак, иногда «голые одиночки» могут быть уникальными для какой-то области судоку. А иногда уникальные кандидаты для какой-то области могут быть и «голыми одиночками». Но все это — только частные случаи.

Если бы для какой-то ячейки судоку были бы возможны все 9 кандидатов (вряд ли, конечно, такая ситуация может возникнуть в реальности), то возможные кандидаты для этой ячейки располагались бы так, как это показано на рисунке 1.5.

Рисунок 1.5.

Рисунки 1.3, 1.4 и 1.5 — это фрагменты таблицы с кандидатами, фрагменты квадрата с кандидатами для ячеек судоку. Если, например, для какой-то ячейки судоку цифра 1 будет являться кандидатом, тогда эта единица будет располагаться исключительно в левом верхнем углу того маленького квадратика, который предназначен для всех кандидатов своей ячейки. Итак, любую цифру в таблице кандидатов можно считать кандидатом. Но если в таблице с кандидатами есть какая-то конкретная цифра, причем она встречается только однажды среди кандидатов одной строки или любой другой области судоку, тогда именно эта цифра и является не просто кандидатом для нужной нам ячейки судоку, а именно главным кандидатом. Здесь видно (рисунок 1.4), что среди всех кандидатов первой (верхней) строки судоку только один раз встречаются цифры: 5, 7 и 3. Это значит, что для тех ячеек, к которым относятся названные цифры, эти кандидаты являются «главными». Для ячейки А2 судоку «главным» кандидатом будет пятерка, для ячейки А7 судоку «главным» кандидатом будет семерка, для ячейки А9 судоку «главным» кандидатом будет тройка. Как видно, в одной строке судоку одновременно может присутствовать несколько «главных» кандидатов, но так бывает не всегда.

1.2. Если в каком-то столбце судоку нужный кандидат встречается только один раз, то этот кандидат тоже будет «главным». В том самом судоку, которое мы недавно рассматривали, можно увидеть несколько «главных» кандидатов в столбцах. Вот, например, все кандидаты первого (левого) столбца (рисунок 1.6):

Рисунок 1.6.

Этот рисунок тоже можно разбить на 3 части для удобства, чтобы данные были не такими мелкими (получим рисунок 1.7):

Рисунок 1.7.

Таким образом, если и далее в данной книге будут встречаться подобные ситуации (когда придется рисовать такие фрагменты листа Эксель, которые будут включать в себя много строк или много столбцов), мы их будем аналогичным образом разбивать для удобства восприятия.

Здесь всего однажды (только один раз во всем столбце судоку) встречаются цифры 4, 5 и 8. Эти цифры и будут главными кандидатами. Для ячейки Ж1 главным кандидатом будет четверка, для ячейки Е1 главным кандидатом будет пятерка, а для ячейки Д1 главным кандидатом будет восьмерка.

1.3. Аналогичная ситуация может возникнуть и в блоках, или маленьких квадратах (3 на 3) судоку. Если в каком-то одном блоке какой-то кандидат встречается только один раз, то этот кандидат тут же становится «главным» и должен перейти в основное судоку.

В рассматриваемом нами судоку такие кандидаты тоже есть. Покажем, например, девятый блок с кандидатами (девятый блок — это самый правый нижний блок). Кандидаты для этого блока расположены на рисунке 1.8:

Рисунок 1.8.

Итак, здесь есть три «главных» кандидата. Для ячейки Ж7 «главным» кандидатом будет двойка, для ячейки И7 «главным» кандидатом будет восьмерка, для ячейки И8 «главным» кандидатом будет единица.

Все эти варианты, перечисленные в пункте 1, можно назвать так: «скрытые одиночки». Именно так эти ситуации называются в судоку. Но, честно говоря, на рисунке 1.8 цифры 1 и 8 также одновременно являются и «голыми одиночками», поскольку эти кандидаты — единственные для своих ячеек судоку. А вот цифра 2 — это типичная «скрытая одиночка»: она единственная двойка среди всех кандидатов своего блока, но при этом она не является «голой одиночкой», поскольку у ячейки Ж7 судоку есть и другой кандидат тоже.

2. Вторая основная причина, по которой кандидат судоку автоматически становится «главным» кандидатом, достаточно проста. Если у какой-то ячейки судоку есть всего один кандидат, он тут же автоматически становится «главным». Как уже говорилось ранее, именно такой кандидат называют «голая одиночка».

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

Например, в строке 1 «голые одиночки» — это ячейки А2 и А3 судоку; в первом столбце — это ячейки Г1 и И1, в девятом блоке — это ячейки И7, И8 и К7 судоку.

Во многих издательствах используется автозамена текста, поэтому некоторые символы автоматически изменяются. Например, одиночный апостроф часто превращается в двойную кавычку, а сами двойные кавычки часто меняют свой вид, свою форму (например, простые «прямые» кавычки заменяются «парными»). Чтобы избежать автозамену, мы в данной книге сделаем замену нескольких символов.

Так, например, символ апострофа мы заменили на символ минуты (′), символ кавычек мы заменили на символ секунды (″), поскольку эти символы останутся прежними даже после автозамены, которую предлагают книжные издательства.

При вставке этих символов в редактор VBA даже не обязательно делать обратную замену, превращая знаки минут в апострофы, а знаки секунд в кавычки. И знак минуты, и знак апострофа, в редакторе VBA видятся и воспринимаются одинаково, как знак апострофа. Правда, если эти символы вставлять не в редактор VBA, а в саму ячейку Эксель или в строку формул, тогда тут уже придется делать обратную замену, надо будет заменить символы секунд простыми «прямыми» кавычками, а символы минут простым одиночным апострофом. В любом случае, мы почти ко всем текстовым вариантам формул и макросов прилагаем и их скриншоты, чтобы не возникало вопросов насчет тех или иных символов. А иногда джае показываем только одни скриншоты, без текстовых вариантов.

Приведем пример. Покажем текст одного из макросов, в котором присутствуют знаки минут и секунд:

↓ ↓ ↓ ↓

Sub Удалить_форматы_с_кандидатов ()

Range (″N3:AN29″).Select

′это мы выделили квадрат с кандидатами

Selection.FormatConditions.Delete

End Sub

↑ ↑ ↑ ↑

Скопируем этот текст, затем вставим его в редактор VBA. Мы получим вот что (рисунок 1.9):

Рисунок 1.9.

А теперь информация специально для тех моих читателей, которые, приобретя электронную (не печатную) версию моей книги, будут копировать макросы из книги в редактор VBA. Как видно из рисунка 1.9, в редакторе VBA могут образовываться лишние пустые строки. Для многих макросов эти пустые строки не помешают их нормальной работе. Но иногда может случиться и так, что некоторые строки макроса внутри редактора VBA окрасятся в красный цвет, станут неправильными, ошибочными. Это может происходить в тех случаях, если между двумя частями одной программной строки макроса, разделенной на две экранные строки, окажется пустая экранная строка. Тогда после первой экранной строки макроса будет знак подчеркивания (он на языке макросов и означает разделение одной программной строки на две части), а сразу за этой строкой окажется пустая строка, а не продолжение макроса. Данную проблему можно решить достаточно просто: нужно удалить ту пустую строку, которая окажется между двумя частями одной и той же программной строки макроса. В любом случае, при копировании текста макросов можно будет свериться с книгой, а если мешают все пустые строки (независимо от того, влияют ли они на корректную работу макроса), их лучше удалить, заодно проверить правильность остальных строк макроса.

Как уже было сказано ранее, чтобы не было проблем при преобразовании копируемого текста, мы просто рядом с текстом макроса приведем его скриншот, чтобы было четко видно, каким на самом деле должен быть макрос после решения всех проблем, связанных с автозаменой издательства. Иногда скриншот будет появляться и после текста формулы в Эксель, а не только после макроса или его фрагмента. Таким образом, только что приведенный макрос должен на самом деле выглядеть так (рисунок 1.10):

Рисунок 1.10.

Тут четко видно, что такое «прямые кавычки», что такое знак апострофа.

Здесь хотелось бы написать только несколько предложений о том, что такое программная строка. Макрос — это компьютерная программа, то есть совокупность компьютерных (программных) строк. Каждый макрос должен иметь какую-то основную цель. Программист должен иметь представление о том конечном результате, который необходимо получить после выполнения этого макроса. Обычно этот конечный результат разбивается на небольшие этапы. Эти этапы, в свою очередь, можно разделить на еще более маленькие пункты. Самый маленький пункт при этом и будет заключаться в одной программной строке. Это будет минимальная часть макроса. Обычно одна строка макроса — это такое минимальное действие, которое может выполнить компьютер. Например: объявить массив; вычислить значение какой-то функции; добавить внешнюю границу какой-то ячейке или диапазону ячеек. То есть тут речь идет о самых простых компьютерных операциях, которые можно описать одним небольшим предложением. Но часто бывает так, что одна программная строка занимает несколько экранных строк (например, это бывает в тех случаях, когда одна формула состоит из многих переменных). В этом случае придется разбивать одну программную строку на несколько экранных строк (или на несколько печатных строк, если необходимо показать текст этой программной строки на бумажном носителе). Итак, нужно отличать строку программы и экранную (печатную) строку.

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

Во время работы над этой книгой автор обратил внимание на еще одну особенность, которая тоже имеет прямое отношение к автозамене текста. В большинстве случаев математический знак минус воспринимается как короткий дефис, но после автозамены каждый знак минуса автоматически превращается в длинное тире. Как только автор этой книги обратил внимание на эту автозамену, он провел эксперимент: скопировал текст одного из макросов из электронной версии этой книги, затем вставил в редактор VBA.

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

↓ ↓ ↓ ↓

Sub Имя_строкам_судоку ()

For i = 3 To 11

Range (Cells (i, 3), Cells (i, 11)).Select

ActiveWorkbook.Names.Add Name:= ″стр_″ & i — 2, RefersToR1C1:= _

″=Основное_судоку! R″ & i & ″C3:R″ & i & ″C11″

ActiveWorkbook.Names (″стр_″ & i — 2).Comment = ″строка ″ & i — 2 & ″ судоку″

Next i

End Sub

↑ ↑ ↑ ↑

Если мы этот макрос скопируем и вставим в редактор VBA, то получим следующую информацию (рисунок 1.11):

Рисунок 1.11.

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

Здесь три строчки выделены красным цветом (я это поясняю из-за того, что мне не известно, держит ли читатель в руках черно-белый или цветной экземпляр моей книги, при этом на черно-белой версии книги не видно больших различий между красным и черным цветами). Речь идет о строках с номерами 4, 5 и 6. На самом деле «ошибка» в строке 4 (в той, что содержит символ нижнего подчеркивания) следующая: короткий минус (математический знак минуса) превратился после автоматической замены в длинное тире; эта же «ошибка» касается и строки под номером 6. А пятая строка стала «ошибочной» из-за лишней пустой строки над ней, пустые строки в листинге макроса тоже считаются строками программы. После символа подчеркивания идет продолжение той же программной строки. И это продолжение не должно быть пустой строкой (про разбивку программных строк символом подчеркивания мы поговорим чуть позже).

Вот каким должен быть этот макрос после устранения всех этих «ошибок» (рисунок 1.12):

Рисунок 1.12.

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

Эта информация приводится специально для тех моих читателей, которые, приобретя электронную версию этой книги, захотят скопировать текст основных макросов и вставить его в редактор VBA. При возникновении подобных ошибок нужно будет заменить все тире знаками минуса.

В общем, чтобы избежать возможных проблем, связанных с автозаменой текста, мы поступим так: после каждого текста макроса или его отрывка мы будем добавлять скриншоты из редактора VBA, чтобы было понятно, как эти макросы выглядят на самом деле.

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

Из-за автозамены могут возникнуть искажения не только в тексте макроса, но и в тексте тех формул, что обычно находятся не в макросах, а именно в ячейках Эксель. Здесь обычно автозамена добавляет лишние пробелы в самих формулах, причем в тех местах формул, где обычно не нужны пробелы. Поэтому заранее предупреждаю о том, что обычно в формулах Эксель пробелы не нужны вообще, даже для отделения знака амперсанд (&). Правда, если в формулах Эксель добавить пробелы по обе стороны от каждого знака амперсанд (&), то это большой ошибкой не будет считаться, формула от этого не будет являться ошибочной. А вот пробелы перед многими другими символами в формулах Эксель часто приводят к ошибкам, например, может возникнуть сообщение в стиле «Это не формула».

Но если этот знак амперсанд (&) встречается не в формулах Эксель, а в макросах на языке VBA, тогда его необходимо и слева, и справа отделять пробелами. Как было сказано ранее, некоторые формулы Эксель в данной книге дублируются рисунками, в которых изображен скриншот этих самых формул.

Макросы пишутся на языке VBA (сокращение от Visual Basic for Applications). Applications — это приложения. Под приложениями понимаются программы, входящие в MS Office. Эксель — это только одна из этих самых программ, одно из приложений. Оператор, или выражение (минимальный исполняющийся код VBA), расположенный в одной строке макроса, можно разбить на несколько экранных строк. Если в конце какой-то строки макроса содержится пробел, а за пробелом — символ нижнего подчеркивания, то это значит, что строка макроса разбита, в следующей строке макроса будет продолжение того же самого кода VBA. Так переносятся на другую строчку разные части кода одного выражения. Имеется в виду перенос на другую строчку в самом редакторе VBA. На рисунке 1.12 мы уже приводили макрос, одна из строк которого разбита с помощью символа подчеркивания, но здесь приведем еще один пример:

↓ ↓ ↓ ↓

ActiveWorkbook.Names.Add Name:=″бло_″ & k, RefersToR1C1:= _
″=Основное_судоку! R″ & i & ″C″ & j & ″:R″ & i +2 & ″C″ & j +2

↑ ↑ ↑ ↑

Как было обещано ранее, после текста с фрагментом макроса приведем скриншот (рисунок 1.13):

Рисунок 1.13.

Здесь был приведен пример всего лишь одной программной строки макроса. Она занимает две экранные строчки, две строчки на странице экрана, но это одна строка программы, потому что главный результат выполнения этой строчки прописан одним оператором на VBA (здесь главная фраза в этой длинной строчке будет Add Name, то есть: добавить имя), а смысл этой строки макроса заключается в присвоении конкретного имени одной ячейке Эксель. Именно присвоение имени — это и есть одно действие, которое выполняется этой строкой макроса. Просто так получилось, что текст этой строки макроса оказался слишком длинным, поэтому и возникла необходимость в разбивке этого текста на экранные строки. Эта строка макроса разбита на две части не только в этой книге, но и в редакторе VBA. В редакторе VBA символ нижнего подчеркивания (_) всегда означает то, что продолжение этой же программной строки будет на следующей экранной строчке. При этом сам символ нижнего подчеркивания должен быть отделен от предыдущего текста пробелом.

Но иногда бывает так, что длинные строки нельзя разделить на несколько строк в редакторе Visual Basic (точнее говоря, разделить можно, но это разделение возможно не в любом месте строки макроса). Обычно при попытке разбить программную строку в «неправильном» месте Эксель выдает сообщение об ошибке (рисунок 1.14).

Рисунок 1.14.

Если мы в редакторе VBA захотим разбить длинную строчку программы на несколько строк, но при этом забудем в конце первой строки добавить знак подчеркивания, то мы увидим другое сообщение об ошибке (рисунок 1.15):

Рисунок 1.15.

Но не всегда бывает возможность разделить одну строку кода макроса на несколько строк в редакторе Visual Basic, а количество символов в строке книги всегда ограничено. Поэтому иногда может быть и так, что одна строка в редакторе VBA может занимать несколько строк на странице книги. Такую ситуацию можно просто найти: если какая-то книжная строчка, которая является частью макроса или его фрагмента, будет начинаться не с «красной» строки, то это значит, что данная строка книги не начинает новую строку макроса (программы), а является продолжением предыдущей строки.

Просто нужно иметь в виду, что несколько книжных строк — это всего лишь одна «экранная» строка макроса, которая просто не уместилась на одной строчке страницы книги. Приведем пример:

↓ ↓ ↓ ↓

Selection.FormatConditions(Selection.FormatConditions.Count). SetFirstPriority

↑ ↑ ↑ ↑

Приведем скриншот (рисунок 1.16):

Рисунок 1.16.

Тут приведен не один макрос, а только одна его часть, одна программная строка. Если в тексте макроса книжная строка начинается не с «красной строки», то есть не имеет отступа слева, то это значит, что данная книжная строчка является продолжением предыдущей строки макроса, в редакторе VBA обе эти строки будут занимать одну строчку. В приведенном примере все именно так и происходит. Тут приведена всего лишь одна «программная» строка макроса, ее надо в редакторе VBA разместить на одной строке. Эта строка макроса разместилась на двух книжных строчках.

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

Рисунок 1.17.

Конечно, можно применять также и просто слово «меню».

Хотелось бы добавить еще несколько слов.

Если вдруг встретится точка в конце имени ячейки или диапазона ячеек, то это значит, что данная точка — просто знак препинания, но не часть имени ячейки или диапазона ячеек.

То же самое хочется сказать про кавычки, запятые и прочие знаки препинания. Если они будут встречаться в начале или в конце имен ячеек или имен диапазонов ячеек, то это просто знаки препинания, и они не являются частью этих имен.

Правда, иногда точки могут встречаться в середине имен ячеек или диапазонов Эксель и тогда эти точки уже будут являться частью имени, но об этом будет сообщено отдельно.

И еще один небольшой полезный совет. Я не люблю всякие модные словечки типа «лайфкак». По-моему, эти слова просто загрязняют великий и могучий русский язык, поэтому специально употребляю термин «полезный совет». А привел я это слово только для того, чтобы читатели не подумали, что я совсем не знаю этого слова. Итак, сам полезный совет. При копировании текста, который содержит и латинские буквы, и русские (а такое часто встречается в тексте макросов) нужно придерживаться следующего алгоритма:

1. Убедиться, что текущий язык ввода — это русский язык.

2. Скопировать нужный фрагмент, который содержит и русские, и латинские буквы.

3. Вставить нужный фрагмент в другое место.

Если во время копирования и вставки язык ввода будет другим, тогда русские буквы могут быть заменены на другие символы (в основном, на знаки вопроса).

В процессе работы над книгой я обратил внимание на еще одно проявление автозамены. Тут речь идет о пробелах. Автозамена часто добавляет ненужные пробелы, но и убирает нужные. Например, если после знака + (плюс) тут же следует пробел, а за пробелом цифра в тексте макроса, то автозамена автоматически удаляет пробел между знаком плюс и этой цифрой. Конечно, эту проблему можно решить. Например, если удалить пустую строку, расположенную сразу после строки с подобными «ошибками», то редактор VBA автоматически расставит все пробелы по правильным местам. Но на всякий случай скажу: в редакторе VBA при написании макросов знаки равно (=), плюс (+), минус (-), умножение (*), деление (/), возведение в степень (^) отделяются пробелами и слева, и справа. Если в этой книги и будут встречаться исключения из этого правила, то они будут связаны только с автозаменой издательства.

На моем канале в Rutube создан целый плейлист, где я преобразовываю макросы этой книги так, чтобы «отменить» автозамену издательства и привести эти макросы в нормальный вид. Я не буду здесь публиковать адрес плейлиста, чтобы не создавать инцидентов, связанных с законодательством о рекламе. Просто скажу, что у меня есть несколько страниц в так называемой «всемирной паутине», и в Rutube, и в дзен.

Название канала автора в рутуб: Эксель, судоку, математика…

Название канала в дзен: Эксель, судоку, артобъекты…

И в дзене, и в рутуб есть специальные подборки, которые предназначены специально для читателей этой книги. Не буду приводить адрес этих подборок, чтобы не возникало возможных проблем с законодательством о рекламе.

Ко многим видео прилагается закрепленный комментарий, в котором содержится текст нужного макроса — без автоматических правок издательства.

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

Вначале я хотел применять видео только для преобразования макросов, для «отмены» автозамены издательства. Но позже у меня возникла и другая идея — показывать на видео основные моменты, показанные в книге, в том числе и те, что не связаны с корректировкой макросов.

Как уже говорилось ранее, эта книга — только первая кинга в своей серии. Вначале я хотел в одной книге рассказать про несколько разных видов судоку, но когда выяснилось, что если писать только про основное судоку, то и так в книге будет немало страниц, и мне захотелось разбить эту достаточно большую и интересную тему на несколько книг. Поэтому можно сказать, что данная книга — это только начало, первая книга в серии.

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

Глава 2. Создание и подготовка файла

2.1. Создание файла для судоку

В самом начале нужно создать файл Эксель, и сохранить его так, чтобы это был файл с поддержкой макросов. Само название файла должно быть таким:

Судоку_2020.xlsm

Имя файла очень важно, оно будет в будущем часто использоваться в макросах, например, при запуске одного макроса из другого.

Здесь расширение файла (xlsm) означает то, что у нас имеется не простой файл Эксель, а файл с поддержкой макросов.

Даже в том случае, если возникнет необходимость в создании копий этого файла или его модификаций, нужно будет менять только конечные папки с файлом, но название файла каждый раз нужно оставлять тем же. Это очень важно.

Итак, теперь наш файл готов.

2.2. Подготовка файла

Прежде всего надо выбрать тот лист Эксель, на котором будут находиться и основное судоку, и основной квадрат с кандидатами для судоку, и несколько вспомогательных квадратов. Их тоже придется создавать. Например, отдельный квадрат для кандидатов-единиц, отдельный квадрат для тех клеток судоку, у которых есть ровно один кандидат, и так далее. Этому листу Эксель нужно присвоить имя: Основное_судоку. Хоть иногда можно встретить информацию о том, что слово «судоку» — это слово мужского рода, эта информация неверная. Слово «судоку» в русском языке — это существительное среднего рода.

Затем необходимо на этом листе изменить ширину столбцов. Это надо сделать для того, чтобы каждая ячейка Эксель превратилась из прямоугольника в квадрат. Может быть, совсем идеального квадрата не получится, но будет прямоугольник, который очень похож на квадрат. Для этого надо выделить весь лист, а затем установить ширину столбца: 3,00 у.е. (26 пиксель).

Далее можно выделить те клетки Эксель, в которых будет расположено основное судоку. Необходимо также учесть заголовки строк и столбцов судоку, о которых мы говорили во введении этой книги. Можно покрасить каждый блок (квадратик размером 3 на 3) судоку в определенный цвет.

Должна получиться вот какая картинка (рисунок 2.1):

Рисунок 2.1.

На рисунке 2.1 четко видно, в какой области листа Эксель должно располагаться основное судоку. Также видны заголовки не только строк и столбцов Эксель, но и заголовки строк и столбцов судоку.

Если для заголовков строк Эксель используются цифры, а для заголовков столбцов Эксель — буквы, то при создании заголовков строк и столбцов судоку мы будем поступать иначе: в заголовках строк будут буквы, а в заголовках столбцов — цифры.

Так, например, ячейка А1 судоку — это самая верхняя левая ячейка судоку. Она расположена в ячейке C3 Эксель. Левый столбец Эксель (столбец A), а также верхняя строка Эксель (строка 1) скрыты, но это сделано только для того, чтобы рисунок с расположением основного судоку на листе Эксель был более удобным, чтобы было четко понятно, в какой именно области Эксель расположено всё то, что изображено на рисунке. Если читатели моей книги будут использовать на своем компьютере все то, что написано в данной книге, то я хочу сразу уточнить, что скрытие столбцов и строк, которое часто применяется в книге, совершать не надо, в книге это скрытие происходит только для удобства подачи информации. Если в каких-то ситуациях появится реальная необходимость скрытия столбцов или строк Эксель, то об этом будет сообщено отдельно.

2.3. Создание имен внутри основного судоку

2.3.1. Имя для строки 1

В процессе создания файла придется очень часто применять имена. Эти имена мы будем присваивать как отдельным ячейкам, так и областям Эксель, которые состоят из нескольких ячеек. Более того, мы будем создавать имена и для формул, но об этом более подробно будет рассказано позже.

Присваивать имена будем с помощью макросов. Можно, конечно, и без макросов, но с макросами процесс создания имен будет происходить намного быстрее, гораздо проще и удобнее.

Начнем с присвоения имен строкам судоку. Первая строка будет верхней строкой. У этой строки судоку будет имя: стр_1. Аналогично, вторая строка судоку будет называться стр_2.

Сам макрос, присваивающий имена строкам судоку, можно составить в несколько этапов.

Первый этап: создание одного макроса, который присвоил бы первой строке макроса имя стр_1.

1) Нажмем на кнопку «Запись макроса» (запустим команду Запись макроса»).

Эту команду и эту кнопку можно найти во вкладке «Разработчик», в группе «Код» (рисунок 2.2):

Рисунок 2.2.

Если вкладка «Разработчик» по каким-то причинам отсутствует, ее можно добавить. Для этого нужно в меню «Файл» выбрать подменю «Параметры», а затем пункт «Настроить ленту».

Далее появятся параметры Эксель, связанные с настройкой ленты. Для добавления вкладки «Разработчик» нам понадобится правая половина всего этого огромного массива информации. Там находится список, предназначенный для добавления, удаления, переименования и изменения порядка вкладок, групп и команд.

Покажем фрагмент от правой части (из правого столбца, то есть из пункта «Основные вкладки») той информации, что входит в пункт «Настроить ленту» (рисунок 2.3):

Рисунок 2.3.

Стрелочкой выделена вкладка «Разработчик». Если флажок («галочка») возле этого пункта будет отсутствовать, то это значит, что этого пункта пока нет в перечне видимых вкладок. Иногда вкладка «Разработчик» бывает невидимой (скрытой), обычно это бывает при первом запуске Эксель и длится до тех пор, пока пользователь сам не сделает видимой эту вкладку. Итак, эта проблема решается достаточно просто, включением указанного флажка.

2) После того, как мы убедились, что у нас имеется вкладка «Разработчик», можно приступить к записи макроса. Для этого нужно выбрать команду «Запись макроса», которая находится в группе «Код». Покажем это всё на рисунке 2.4:

Рисунок 2.4.

Здесь стрелочкой выделена команда «Запись макроса». Когда мы выберем эту команду, нас спросят про имя создаваемого макроса. Присвоим ему имя: Имя_строкам_судоку.

3) Выделим строку 1 судоку, то есть самую верхнюю строку судоку. К этой строке относятся ячейки Эксель от C3 до K3 включительно.

4) Присвоим выделенному диапазону имя: стр_1. Это можно сделать двумя способами (точнее говоря, только одним — любым, на выбор — из следующих двух способов):

1: С помощью Диспетчера имен. Его (то есть диспетчер имен) можно найти так: Вкладка «Формулы», Группа «Определенные имена», кнопка «Диспетчер имен».

После нажатия на кнопку «Диспетчер имен» можно увидеть три варианта действий для каждого имени: «Создать…», «Изменить…» или «Удалить». В нашей конкретной ситуации нам нужен пункт «Создать…», ведь мы же именно создаем новое имя. Затем нужно будет заполнить графу «Имя», написав туда «стр_1» (рисунок 2.5):

Рисунок 2.5.

Как видно из рисунка 2.5, в графе «Имя» нужно ввести то имя, которые мы хотим присвоить ячейке или диапазону ячеек (в нашем случае это имя «стр_1», оно появилось не сразу при загрузке этой формы, а было введено нами с клавиатуры); в графе «Область» по умолчанию (сразу при первом появлении формы «Создание имени») введен пункт «Книга», и это значит, что вновь создаваемое имя можно будет использовать для каждого листа текущей книги. В графе «примечание» можно (при желании) записать примечание для данного имени, это поле не является обязательным. Если это поле оставить пустым, тогда мы создадим имя без примечания. В графе «Диапазон» вводится адрес ячейки или диапазона ячеек, к которым относится вновь создаваемое имя. Обычно этот пункт тоже заполнять не надо, он заполняется автоматически, он берется из той области Эксель, которую мы уже заранее предварительно выделили. Мы же недавно выделили нужный диапазон ячеек, этот диапазон и отображается здесь. Правда, при желании этот диапазон можно изменить (например, если мы вовремя поняли, что выделили не тот диапазон, или хотим по каким-то причинам изменить диапазон, выбрать другой диапазон).

Кстати, этот диапазон при необходимости можно изменить двумя способами: введя с клавиатуры адрес диапазона или нажав мышкой на квадратик (рисунок 2.6):

Рисунок 2.6.

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

В более новых версиях Эксель этот же квадратик выглядит немного иначе, в виде стрелочки, направленной вверх (рисунок 2.7):

Рисунок 2.7.

Как только мы нажмем на кнопку «OK» (которая есть в той форме, что изображена на рисунке 2.6 или 2.7, в зависимости от версии Эксель), то в нашу книгу добавится новое имя. В нашем случае это будет имя «стр_1», оно будет принадлежать диапазону ячеек Эксель, который состоит из строки 1 судоку. Напомню, строка №1 судоку — это самая верхняя строка судоку. Во всех тех судоку, о которых речь идет в данной книге, верхняя строка судоку будет расположена в строго определенном месте Эксель. Это будут ячейки Эксель с C3 по K3 включительно.

2: С помощью поля имени. Поле имени обычно находится левее строки формул. И поле имени, и строка формул обычно расположены чуть выше заголовков столбцов Эксель (рисунок 2.8).

Рисунок 2.8.

Обычно в поле имени отображается адрес текущей ячейки. Если выделен диапазон ячеек, тогда в поле имени отображается левая верхняя ячейка этого диапазона.

Если выделенный диапазон или текущая ячейка уже имеют ранее присвоенное имя, то при выделении этого диапазона или этой ячейки в поле имени будет отображаться именно это имя. Если какой-то ячейке или диапазону одновременно присвоено несколько имен, тогда в поле имени будет отображаться самое первое имя по алфавиту. Если один и тот же диапазон ячеек содержит и те имена, что начинаются с латинских букв, и те имена, что начинаются с русских букв, то в поле имени будет изображено то имя, которое начинается с латинской буквы. Одно и то же имя может содержать одновременно и латинские, и русские буквы. Это можно использовать, в частности, при создании имен с префиксами — то есть с небольшими «примечаниями».

Хотелось бы еще несколько слов сказать о том, какие есть правила для создания имен. В имени не может быть пробелов. Имя должно начинаться с буквы или знака нижнего подчеркивания, но не может начинаться с цифры.

Начиная со второго знака имени можно использовать следующие символы: буквы, цифры, точки и знаки нижнего подчеркивания. Любые другие символы запрещено использовать, в том числе и пробел. В любом случае, при попытке ввести имя, которое будет создано с нарушением правил (например, при применении недопустимого для имени символа), мы не сможем это имя добавить в список имен, а получим сообщение, включающее в себя значок Warning Message, то есть сообщение с предупреждением, это сообщение обычно содержит большой желтый треугольник с восклицательным знаком. Кроме того, все попытки создать имя с ошибкой приведут не только к сообщению с предупреждением, но и к тому, что имя с ошибкой создано не будет, на данном этапе процесс создания имени будет завершен (и отменен), новое имя с ошибкой создано не будет.

Итак, второй способ присвоения имени в Эксель связан именно с полем имени.

Если сначала выделить нужную ячейку или диапазон ячеек, а затем щёлкнуть в поле имени и ввести то самое имя, которое хотим присвоить ячейке или диапазону ячеек, а затем нажать на клавишу Enter, то получим новое имя в Эксель. Это имя встанет на смену адреса левой верхней ячейки выделенного диапазона или просто на смену адреса выделенной (то есть текущей) ячейки.

Если мы выделим какой-то диапазон ячеек и попытаемся этим способом присвоить выделенному диапазону или ячейке такое имя, которое уже принадлежит какому-то другому диапазону или ячейке, то мы просто перейдем к тому диапазону или ячейке, которым это самое имя было присвоено ранее. Другими словами, диспетчер имен можно использовать не только для создания новых имен ячеек Эксель или их диапазонов, но и для перехода к ячейкам или диапазонам с известными именами, присвоенными ранее. Кроме того, нельзя присвоить какое-то имя еще раз, если это же имя уже имеется и принадлежит другой ячейке или другому диапазону ячеек. А еще в диспетчере имен можно набирать просто адрес ячейки, например: D1 или R40. Не важно, присвоено ли этой ячейке какое-то имя или не присвоено, все равно с помощью диспетчера имен можно попасть к любой ячейке Эксель, если ввести ее адрес. Поэтому, говоря о правилах создания имен для ячеек Эксель и их диапазонов, нужно добавить еще один пункт: эти имена не должны совпадать с уже существующими адресами ячеек и их диапазонов. Например, нельзя присвоить имя S17 или AAN14.

А применительно к нашей конкретной ситуации (напомню, речь идет о том, что надо присвоить имя стр_1 первой (верхней) строке судоку) нужно поступить так: мы уже заранее выделили нужный диапазон (это строка 1 судоку, она находится в интервале от C3 до K3 Эксель), и нам осталось только одно: ввести новое название интервала стр_1 в поле имени. После этого нажимаем на клавишу Enter. Вот что должно получиться после этого (рисунок 2.9):

Рисунок 2.9.

Тут стрелочкой показано поле имени, в котором уже есть новое имя. Единственное, что можно добавить: в случае присвоения имени с помощью поля имени мы не сможем сразу же при создании нового имени создавать и примечание к этому же имени. Но при необходимости это примечание к имени можно будет добавить через тот же диспетчер имен, о котором мы говорили чуть ранее.

Небольшое отступление от основной темы. Здесь (на рисунке 2.9) в ячейке B2 Эксель мы впервые встречаем цифру. Это цифра 39, она означает количество заполненных клеток в основном судоку. Чтобы добавить эту цифру к судоку, нужно ввести в ячейку B2 Эксель следующую формулу:

= СЧЁТ (C3:K11)

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

5) Выполним команду «Остановить запись», то есть остановим запись макроса. Эту команду можно найти на вкладке «Разработчик», в группе «Код» Во время записи макроса команда «Запись макроса» превращается в команду «Остановить запись».

Хотя мы создали целый макрос, присвоили ему имя (Имя_строкам_судоку), но у нас пока есть не окончательная, а черновая, предварительная версия этого макроса. Этот макрос пока присваивает имя только первой (верхней) строке судоку. Позже мы исправим этот макрос. Необходимо сделать его таким, чтобы была возможность присвоения имени не одной строке судоку, а каждой строке. Но основной текст макроса, его «каркас», мы уже создали.

Таким образом, имя для первой (верхней) строки судоку создано.

2.3.2. Имена для остальных строк судоку

Итак, только что было создано имя для первой (верхней) строки судоку. Но всего в судоку есть не одна строка, а 9 строк. Чтобы присвоить имена каждой строке судоку, нам нужно будет изменить тот макрос, который присваивал имя первой строке судоку. Что для этого надо сделать?

1) Войдем во вкладку (в меню) Разработчик, группу «Код», выберем там подменю (кнопку, команду) Макросы. Найдем (выделим) макрос под названием Имя_строкам_судоку, нажмем на кнопку Изменить.

Мы увидим текст самого макроса. Вот это текст:

↓ ↓ ↓ ↓

Sub Имя_строкам_судоку ()

′ Имя_строкам_судоку Макрос


Range(″C3:K3″).Select

ActiveWorkbook.Names.Add Name:=″стр_1″, RefersToR1C1:= _

″=Основное_судоку! R3C3:R3C11″

ActiveWorkbook.Names(″стр_1″).Comment =″″

End Sub

↑ ↑ ↑ ↑

Далее покажем скриншот этого макроса (рисунок 2.10):

Рисунок 2.10.

Итак, уточним, из чего обычно состоит любой макрос.

Первая строка макроса начинается с оператора Sub (это означает «начало макроса»); далее следует имя макроса, а также пустые скобки.

Любой макрос в Эксель можно назвать процедурой. Процедура в Excel на языке VBA — это последовательность инструкций, расположенных в модуле, доступ к которому осуществляется через VBA.

Пустые скобки после имени макроса в Excel обозначают, что процедуре не передаётся никаких аргументов. Чисто теоретически, могут существовать и такие макросы или процедуры, которым передаются какие-то аргументы с самого начала, в этом случае после оператора Sub и названия процедуры будут находиться не пустые скобки, а скобки с какой-то информацией внутри. В данной книге мы эти варианты подробно рассматривать не будем, здесь мы только объясняем, почему почти во всех макросах сразу после имени макроса можно встретить пустые скобки.

Затем идут несколько строк макроса, которые содержат знак апострофа (′). В макросах апостроф — это то же самое, что и оператор Rem, то есть начало ремарки, комментария.

В любом макросе, созданном с помощью команды «Запись макроса», всегда будут присутствовать несколько строк с ремарками (комментариями), причем одна из этих ремарок дублирует первоначальное имя, присвоенное этому макросу. И у макроса, который мы назвали Имя_строкам_судоку, тоже в самом начале должны присутствовать эти строчки. Эти строки с ремарками (комментариями к макросу) часто бывают не нужны совсем, поэтому мы можем эти строки с ремарками удалить. Хотелось бы сообщить, что в данной книге все макросы, созданные с помощью команды «Запись макроса», будут показаны без дополнительных ремарок, которые автоматически создаются в начале макроса. Правда, при желании какие-то свои ремарки можно добавлять, причем ремарки можно помещать в любые места программы (макроса). В принципе, можно и оставить те ремарки, что создаются автоматически в самом начале (другими словами, удаление этих самых ремарок — это ритуал не обязательный, и если они не мешают, то их можно оставить).

Таким образом, текст макроса после удаления строк с ремарками (примечаниями) будет следующим:

↓ ↓ ↓ ↓

Sub Имя_строкам_судоку ()

Range(″C3:K3″).Select

ActiveWorkbook.Names.Add Name:=″стр_1″, RefersToR1C1:= _

″=Основное_судоку! R3C3:R3C11″

ActiveWorkbook.Names(″стр_1″).Comment =″″

End Sub

↑ ↑ ↑ ↑

Дублируем этот текст макроса картинкой-скриншотом (рисунок 2.11):

Рисунок 2.11.

Итак, любые макросы обычно завершаются строкой «End Sub», что означает завершение макроса. Иногда можно запрограммировать выход из программы и в середине макроса тоже (например, при выполнении определенных условий, которые прописаны в операторах If...Then, что означает в переводе на русский язык Если… Тогда), но в этом случае выход из макроса будет не «End Sub», а «Exit Sub». В любом случае, в макросе может только один раз находиться команда «End Sub», и она может присутствовать исключительно в самом конце макроса.

Предпоследняя строчка этого макроса (та, что находится чуть выше строки End Sub, добавляет комментарии, но не к самому макросу, а к тем именам в Эксель, которые присоединяет к нашему файлу этот самый макрос). Две пустые кавычки в самом конце этой строки макроса означают, что в данном случае применен пустой комментарий, можно сказать, что никакого комментария к создаваемым именам нет вообще.

Конечно же, при желании можно добавить комментарий к именам, расположенным в Эксель. Например, предпоследнюю строчку макроса (ту самую строчку, что находится чуть выше строки End Sub), можно заменить следующим образом:

↓ ↓ ↓ ↓

ActiveWorkbook.Names(″стр_1″).Comment =″строка 1 судоку″

...