
Электронные таблицы и судоку
Вот текст макроса, присваивающего номера клеткам судоку по принципу номер один:
↓ ↓ ↓ ↓
Sub Имена_основным_клеткам ()
Application.Run ″Судоку_2020.xlsm! Ускорение_включить″
For i = 1 To 9
For j = 1 To 9
Cells (i +2, j + 2).Select
ActiveWorkbook.Names.Add Name:=″кле_″ & _
i & j, RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
ActiveWorkbook.Names.Add Name:=″bs..кле_″ & _
i & j, RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
Next j
Next i
Application.Run ″Судоку_2020.xlsm! Ускорение_выключить″
End Sub
↑ ↑ ↑ ↑
Скриншот этого макроса — на рисунке 2.31:

Рисунок 2.31.
Ну и, во-вторых, клетки можно именовать по принципу кле_А1, кле_А2, кле_А3 и т. д. Вот текст макроса, который присваивает имена клеткам судоку по принципу №2:
↓ ↓ ↓ ↓
Sub Имена_основным_клеткам_2 ()
Application.Run ″Судоку_2020.xlsm! Ускорение_включить″
For i = 1 To 9
For j = 1 To 9
Cells (i +2, j + 2).Select
ActiveWorkbook.Names.Add Name:=″кле_″ & _
Cells (i +2, 2) & Cells (2, j +2), RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
ActiveWorkbook.Names.Add Name:=″bs..кле_″ & _
Cells (i +2, 2) & Cells (2, j +2), RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
Next j
Next i
Application.Run ″Судоку_2020.xlsm! Ускорение_выключить″
End Sub
↑ ↑ ↑ ↑
Скриншот этого макроса покажем на рисунке 2.32.

Рисунок 2.32.
Можно объединить в одном макросе оба эти принципа (номер один и номер два). В этом случае текст макроса будет таким:
↓ ↓ ↓ ↓
Sub Имена_основным_клеткам_3 ()
Application.Run ″Судоку_2020.xlsm! Ускорение_включить″
For i = 1 To 9
For j = 1 To 9
Cells (i +2, j + 2).Select
ActiveWorkbook.Names.Add Name:=″кле_″ & _
i & j, RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
ActiveWorkbook.Names.Add Name:=″bs..кле_″ & _
i & j, RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
ActiveWorkbook.Names.Add Name:=″кле_″ & _
Cells (i +2, 2) & Cells (2, j +2), RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
ActiveWorkbook.Names.Add Name:=″bs..кле_″ & _
Cells (i +2, 2) & Cells (2, j +2), RefersToR1C1:= _
″=Основное_судоку! R″ & i +2 & ″C″ & j +2
Next j
Next i
Application.Run ″Судоку_2020.xlsm! Ускорение_выключить″
End Sub
↑ ↑ ↑ ↑
Скриншот этого макроса находится на рисунке 2.33.

Рисунок 2.33.
Как и прежде, можно вводить в макрос новые дополнительные переменные. Например, m (m=i+2), а также n (n=j+2).
В этом случае этот макрос примет следующий вид:
↓ ↓ ↓ ↓
Sub Имена_основным_клеткам_3 ()
Application.Run ″Судоку_2020.xlsm! Ускорение_включить″
For i = 1 To 9
For j = 1 To 9
m=i+2
n=j+2
Cells (m, n).Select
ActiveWorkbook.Names.Add Name:=″кле_″ & _
i & j, RefersToR1C1:= _
″=Основное_судоку! R″ & m & ″C″ & n
ActiveWorkbook.Names.Add Name:=″bs..кле_″ & _
i & j, RefersToR1C1:= _
″=Основное_судоку! R″ & m & ″C″ & n
ActiveWorkbook.Names.Add Name:=″кле_″ & _
Cells (m, 2) & Cells (2, n), RefersToR1C1:= _
″=Основное_судоку! R″ & m & ″C″ & n
ActiveWorkbook.Names.Add Name:=″bs..кле_″ & _
Cells (m, 2) & Cells (2, n), RefersToR1C1:= _
″=Основное_судоку! R″ & m & ″C″ & n
Next j
Next i
Application.Run ″Судоку_2020.xlsm! Ускорение_выключить″
End Sub
↑ ↑ ↑ ↑
Покажем скриншот этого макроса на рисунке 2.34.

Рисунок 2.34.
Вот, в принципе, и всё, что можно сказать о присвоении имен самым главным элементам основного судоку.
2.3.6. Еще несколько имен
Мы присвоили имена строкам, столбцам, квадратикам (блокам) основного судоку, а также каждой клетке основного судоку.
Но осталось еще кое-что. Есть одна клетка, которой мы пока не присвоили имя. Это клетка B2 Эксель. Раньше мы уже говорили про эту клетку, там находится количество всех заполненных на данный момент цифр судоку. Именно не сумма всех цифр внутри судоку, а их количество. В совсем пустом судоку это количество будет равно нулю, в заполненном до конца судоку это количество будет 81.
Этой клетке можно присвоить имя даже без макроса. Это имя будет простым:
КЧ
Буквы русские, прописные. Сокращение от словосочетания «контрольное число».
Можно (хотя и не обязательно) этой же ячейке также присвоить еще несколько имен и их дублеров, например
bs..КЧ
счет
bs..счет
Кстати, весь квадрат основного судоку — а это интервал ячеек Эксель от C3 до K11 — тоже должен быть с именем. Присвоим этому интервалу простое имя:
судоку
Этому имени можно не присваивать дублер с префиксом. Здесь все просто. Имя судоку будет означать одно: это квадрат 9 на 9 клеток, который нужно заполнить согласно правилам судоку.
На этом завершается присвоение имен самым важным элементам основного судоку.
Напомню, что мы присвоили имена всем строкам, столбцам, блокам и простым одиночным клеточкам основного судоку, а также квадрату, содержащему все клетки основного судоку. Наличие всех этих имен поможет нам при отгадывании судоку.
2.4. Имена на другом листе Эксель
Нам нужно создать второй лист на основном файле Эксель. Переименуем этот второй лист Эксель, присвоим ему новое имя (новый заголовок): Имена.
В этом листе можно установить ширину каждого столбца: 4 у. е. При этом каждая ячейка Эксель будет не квадратом, а прямоугольником небольшой ширины.
Перейдем на лист под названием Имена, создадим в нем столбцы указанной ширины. Мы часто будем обращаться к этому листу Эксель, а пока создадим в нем несколько имен.
Ячейке A1 этого листа присвоим имя: ast. Это первые три буквы от латинского слова «Asterisco», что означает «звездочка». Поместим в эту ячейку тот самый символ, о котором мы уже говорили ранее, он очень похож на вид зонтика сверху). Этот символ можно найти во вкладке «Вставка», в группе «Символы», там есть кнопка «Символ». Я понимаю, что этот символ не очень похож на звездочку, но в любом случае (рано или поздно) этот символ, который находится в ячейке A1 листа Эксель под названием Имена, можно будет заменить на какой-то другой, какой больше нравится. Можно заменить и на «звездочку» (*). Главное, чтобы это был просто символ, то есть не буква и не цифра. Ну и желательно, чтобы этот символ не был очень похож на какую-нибудь букву или цифру. Этот символ нам понадобится чуть позже, когда мы будем заполнять квадрат, в котором будут расположены все кандидаты для судоку. В любом случае, мы условно будем называть этот символ «звездочкой», даже если он совсем не похож на «звездочку». Теперь расскажем про использование этого символа. Если какая-то ячейка основного судоку, например, Д2 основного судоку, будет заполнена цифрой (то есть будет не пустой), тогда в квадрате с кандидатами (его мы создадим позже) все 9 клеток, в которых содержатся возможные кандидаты для этой ячейки, будут состоять из этих так называемых «звездочек». Мы эту картину уже видели во введении этой книги. Но здесь приведем еще один пример с этим символом (рисунок 2.35):

Рисунок 2.35.
На этом рисунке расположен фрагмент квадрата кандидатов. Этот фрагмент показывает только кандидаты для среднего блока кандидатов, то есть для блока №5. Хотя некоторые строки и столбцы Эксель тут скрыты, это было сделано только для того, чтобы четко было видно, к каким строкам и столбцам Эксель относится информация, изображенная на рисунке. Столбец M Эксель показывает заголовки строк судоку, строка 2 Эксель показывает заголовки столбцов судоку. Как мы уже говорили, на этом рисунке мы видим кандидаты для центрального (пятого) квадратика судоку. В основном судоку в этом квадратике есть 4 цифры, это клетки Г5, Г6, Е5 и Е6 основного судоку. Для этих клеток основного судоку уже кандидаты не нужны, а потому именно те клетки квадрата кандидатов, которые отвечают за кандидаты именно этих клеток судоку, состоят только из тех символов, которые мы назвали «звездочками».
Для ячейки A1 этого листа создадим еще одно имя, оно будет дублером имени ast, Мы не будем добавлять префикс к имени ast. Просто возьмем первые три буквы русского слова «звезда», и получится совершенно новое имя: зве. Итак, одно имя содержит три латинские буквы, второе имя — три русские буквы.
Кроме того, символ из ячейки A1 мы можем называть «звездочка», это имя не будет никак отражаться официально, это не будет отражаться в диспетчере имен или где-то еще. Просто нужно иметь в виду: если в этой книге будет звучать слово «звездочка», то это значит, что речь идет о том символе или о тех символах, которые находятся в ячейке A1 листа под названием Имена. Мы в любое время можем исправить эту информацию, заменить тот символ, что там находится сейчас, на другой символ или на другие символы. Главное, чтобы было удобно. В любом случае, «звездочка» — это содержимое именно этой ячейки.
Ячейка A2 этого же листа будет пустой. Но это будет не простая пустота, а пустота «с секретиками». Там будет следующая формула:
=″″
Это знак равенства, а вслед за ним — две кавычки подряд. Между кавычек нет ничего, просто пустота, нет даже пробела. Это очень важно. В любых других пустых ячейках нет этой формулы. И значение других пустых ячеек может быть приравнено к нулю, чего нельзя сказать про нашу ячейку A2. В нашей ячейке A2 пустота, но не простая пустота.
Эта пустота «с секретиком», или «с секретиками», будет достаточно часто использоваться в этой книге.
Можно провести эксперимент. В ячейку D1 эксель (мы пока по-прежнему находимся на листе Имена, о возвращении на лист под названием Основное_судоку будет позже сообщено дополнительно) можно ввести формулу:
=A2+A3
Мы в результате в ячейке D1 увидим сообщение об ошибке, потому что в ячейке A2 у нас не ноль и вообще не цифра. Если же в этой формуле заменить A2 на A12, то в результате мы получим ноль. В ячейке A12 формально тоже пустота, но это уже другая пустота, без всяких «секретиков».
Можно провести еще один эксперимент.
В ячейку D2 можно ввести формулу:
=ЕЧИСЛО (A2)
Мы увидим результат: сообщение «ЛОЖЬ». Это значит, что то, что находится в ячейке A2, не является числом. Правда, если мы устроим аналогичную «проверку» ячейке A12, которая пока просто пустая и не содержит вообще никаких формул, то результат будет тем же, там тоже не число.
Поэтому можно провести еще один эксперимент.
В ячейку D3 введем формулу:
=A2+0
В результате в ячейке D3 мы получим сообщение об ошибке:
#ЗНАЧ!
Но так и должно быть, это действительно ошибка. Ведь нельзя складывать число и то, что числом не является.
Если мы в ячейке D3 изменим формулу, A2 превратим в A12, тогда результатом сложения будет 0. В этом случае формула в D3 будет следующей:
=A12+0
В принципе, теперь столбец D можно удалить совсем (или просто очистить). Мы его использовали только для того, чтобы показать несколько «секретов» той пустоты, что находится в ячейке A2.
Итак, ячейка A2 содержит пустоту с «секретом» (ну или с секретиками, как было сказано ранее). Теперь надо присвоить этой ячейке имена. Первое имя будет пус (первые три буквы от русского слова «пустота». Второе имя у этой же ячейки будет vac — первые три буквы от латинского слова «vacuum», что в переводе значит «пустота».
Теперь переходим к ячейке A3. Введем туда знак апострофа, а затем два знака минус подряд (без пробелов между этими знаками). Вот что должно получиться (покажем фрагмент листа Эксель, рисунок 2.36):

Рисунок 2.36.
Что можно сказать по этому рисунку? Текущая ячейка — это ячейка A3 Эксель. Эта ячейка текущая потому, что она со всех сторон выделена окантовкой серо-зеленого цвета. Кроме того, текущий столбец Эксель (столбец A) выделен особым форматом, он более темный, чем другие столбцы. Точно то же самое можно сказать и про строку 3 — это текущая строка, и она тоже выделена особо, чуть темнее, чем остальные строки. В поле имени мы видим min, это значит, что именно такое имя присвоено этой ячейке.
Итак, нужно присвоить этой ячейке (то есть ячейке A3 Эксель) это имя (то есть имя min). Оно является сокращением от латинского слова «minima», то есть «минимум».
Присвоим этой ячейке (ячейке A3) и второе имя: мин — сокращение от русского слова «минимум». Главное — не запутаться: в Эксель есть формула, которая содержит эти же буквы и в той же последовательности.
Это формула МИН.
Она означает минимум.
В этой формуле все буквы будут заглавные, прописные. В нашем же имени все эти буквы будут строчными, маленькими.
Хотя можно придумать этой ячейке еще одно имя: кий. Бильярдный кий, действительно, очень похож на знак минуса. Это второе имя мы присваиваем исключительно для того, чтобы не путать наше имя «мин» с формулой минимума МИН.
Но если среди моих читателей есть такие люди, для кого не составит проблем схожесть имени мин с функцией МИН, то можно использовать именно имя мин вместо имени кий. Если у любой ячейки Эксель или у массива этих ячеек будет присутствовать одновременно несколько имен в Эксель, то это значит, что можно в любое время применять любое из этих имен.
Пусть еще одно имя для этой ячейки будет существенно отличаться от уже известных формул Эксель.
Тогда имя-дублер будет der — это будет сокращение от латинского слова derivari, то есть кий.
Если до этого мы содержимое ячейки A1 неофициально называли «звездочкой», то сейчас мы назовем — тоже неофициально — содержимое ячейки A3 «кием». Еще одно неофициальное имя для содержимого этой же ячейки будет «минус». Ведь имя «мин» — это сокращение именно от слова «минус».
Если «звездочка» будут встречаться в квадрате кандидатов для тех ячеек основного судоку, которым уже не нужны кандидаты, потому что эти ячейки основного судоку уже заполнены цифрами, то «кий» будет применим для тех ячеек основного судоку, которым нужен какой-то кандидат, но именно «кий» символизирует тот кандидат, который для данной ячейки судоку не нужен.
Приведем пример. Мы уже недавно показывали рисунок 2.35. Там был фрагмент квадрата кандидатов.
Продублируем этот рисунок, чтобы упростить поиск нужной информации. Дадим дубликату этого рисунка номер 2.37:

Рисунок 2.37.
Ячейки W12, X12 и Y12 Эксель (там находятся два подряд знака минус) означают, что для ячейки Г4 основного судоку цифры 1, 2 и 3 не могут быть кандидатами. Если присмотреться еще внимательней к тем клеткам Эксель, которые отведены для ячейки Г4 судоку, то станет понятно: у этой ячейки всего 2 кандидата, это цифры 4 и 6. Все остальные цифры кандидатами для этой ячейки судоку не могут быть, поэтому вместо них мы видим «минусы», они же — «кии».
Еще хочется сказать несколько слов про апостроф, который можно использовать при вводе информации в ячейку. Если в ячейку Эксель ввести сначала апостроф, а после него любую информацию, то это будет означать, что информация после апострофа будет восприниматься как текст. Это будет происходить даже в тех случаях, если после апострофа будут стоять только одни цифры. Если мы введем в ячейку Эксель апостроф, затем какой-нибудь текст, а после этого нажмем на клавишу ввода (Enter), то апостроф автоматически исчезнет из этой ячейки, но останется видимым в строке формул. Его мы можем четко увидеть на рисунке 2.36. Если бы мы сделали скриншот с экрана еще раньше, во время ввода этой информации, после ввода апострофа и двух минусов, но до нажатия на клавишу Enter, мы бы увидели этот апостроф и в ячейке, и в строке формул. Но мы вначале нажали на клавишу ввода, после чего автоматически апостроф исчез из ячейки A3, а активной ячейкой стала другая ячейка. Затем мы снова сделали ячейку A3 текущей (активной), но это сделано было только для того, чтобы показать, как при этом будет выглядеть поле имени, строка формул и сама эта ячейка. Кстати, сам апостроф так официально и называется: текстовый префикс.
Теперь перейдем к ячейке A4.
В ней должен быть всего один символ: знак вопроса.
Присвоим этой ячейке первое имя: воп. Сокращение от русского слова «вопрос».
Второе имя этой ячейки тоже будет содержать только три буквы, и это будут буквы латинского алфавита. Имя будет qua, сокращение от слова «quaestio», то есть «вопрос».
Далее следующая ячейка, A5. Содержимое этой ячейки: две буквы, русское слово да. Первое имя ячейки совпадет с содержимым этой ячейки, второе имя ячейки sic. Это слово «да», но на латинском языке.
Затем ячейка A6. Содержимое ячейки: слово нет, первое имя совпадает с содержимым ячейки. Второе имя: non. Это латинское слово «нет».
На этом пока завершим присвоение имен и заполнение ячеек на листе под названием Имена. Вот что должно получиться на этом листе (рисунок 2.38):

Рисунок 2.38.
Тут текущая ячейка: A4. В ней находится знак вопроса, его видно в этой ячейке. Видно в поле имени имя этой ячейки — три латинские буквы. Мы уже говорили про то, что если у одной и той же ячейки или у одного диапазона ячеек есть несколько имен, то в поле имени будет отображаться то имя, которое является первым по алфавиту, при этом латинские буквы расположены раньше, чем русские.
Можно изменить содержимое ячеек A1 и A3. Например, в ячейку A1 можно поместить тот символ, что максимально похож на звездочку. Это знак умножения. Его можно ввести либо с клавиатуры, либо с помощью формулы:
=СИМВОЛ (42)
Можно заменить и содержимое ячейки A3, оставив вместо двух минусов только один. Это можно сделать не только с помощью ввода знака минус с клавиатуры (если нужен только один минус, то можно обойтись и без символа апострофа), но с помощью формулы:
=СИМВОЛ (45)
После этого тот центральный фрагмент квадрата с кандидатами для основного судоку, который расположен на листе Основное_судоку (мы уже несколько раз показывали этот фрагмент), будет выглядеть так (рисунок 2.39):

Рисунок 2.39.
Правда, мы еще пока не разбирали подробно тему создания квадратов для кандидатов, ее мы рассмотрим позже.
Поэтому на данном этапе составления судоку мы не можем увидеть квадрат с кандидатами для судоку (или его фрагменты) именно в таком виде, как они показаны на рисунках 2.35, 2.37 и 2.39. Просто мы показываем эти фрагменты такими, какими они должны быть после того, как мы заполним все формулы для квадрата с кандидатами для судоку. Просто показываем, что на листе Эксель под названием Имена мы уже создали основные элементы, основные символы, которые нам вскоре пригодятся именно при составлении квадрата с кандидатами.
Просто сейчас хочется сказать, что мы сейчас создали имена разным ячейкам, многие из них пригодятся при составлении квадрата для кандидатов. Также хочется сказать о том, что если какой-то ячейке или диапазону ячеек присвоено имя, которое будет в дальнейшем использовано в формулах для других ячеек, то сразу после изменения значения этой ячейки, содержащей имя, будет происходить и автоматическое изменение всех тех ячеек, которые прямо или косвенно зависят от этой ячейки, то есть от этих имен.
Итак, формулы для ячеек квадрата с кандидатами для судоку будут состоять именно из тех имен, о которых мы говорили в данной подглавке этой книги.
На этом этапе можно завершить работу с листом Имена и перейти (вернуться) к листу под названием Основное_судоку.
2.5. Проверка данных
В Эксель имеется одна очень интересная опция: проверка данных. Мы часто будем применять эту опцию для решения судоку.
Чтобы воспользоваться этой опцией, нужно выбрать вкладку Данные, группу Работа с данными, кнопку Проверка данных. Напомню, что название любой кнопки (вместе с основными подсказками к работе с той опцией, которой соответствует эта кнопка) можно узнать, если провести «мышкой» по этой кнопке и остановить след от «мышки» на этой кнопке. На рисунке 2.40 показано, как можно найти кнопку «Проверка данных».

Рисунок 2.40.
Итак, на рисунке 2.40 наглядно показано, как можно найти кнопку Проверка данных. Кстати, на этом рисунке еще раз изображен фрагмент квадрата с кандидатами для судоку.
А теперь продолжим говорить про проверку данных.
Если вначале выделить одну или несколько ячеек, а затем нажать на кнопку «Проверка данных», то можно будет для выделенных ячеек установить определенные правила, или границы. Тут речь не о том, чтобы нарисовать границы (рамки) для ячейки, а исключительно о том, что можно заранее задать верхнюю (минимальную) и нижнюю (максимальную) границу для значений в ячейке Эксель или в группе ячеек.
Если мы выделим те ячейки, из которых состоит квадрат основного судоку (это ячейки с C3 по K11 Эксель включительно), то для этих ячеек надо указать, что в них должны быть целые числа от 1 до 9 включительно. Это же судоку, и тут других цифр не должно быть в принципе, как не должно быть там и текстовой информации.
После нажатия на кнопку «Проверка данных» мы увидим форму, которую нужно заполнить следующим образом (рисунок 2.41):

Рисунок 2.41.