|
Создание каледнаря в Microsoft ExcelВ статье описана методика создания календаря на некоторый месяц некоторого года в электронной таблице Microsoft Excel (рис. 1). Рис. 1 Как видно из рис. 1, месяц и год, для которых строится календарь, указываются соответственно в ячейках Е4 и Е3. После ввода этих значений по щелчку на кнопке с надписью “Создать”: 1) в ячейке А6 выводится название месяца и номер года; 2) заполняются даты в диапазоне А8:G14 (в первом и последнем столбцах, возможно, не полностью). Щелчок на кнопке с надписью “Очистить” приводит к очистке только что указанного диапазона и ячеек Е3 и Е4. О том, как разместить на листе кнопку, оформить на ней соответствующую надпись, рассказано в статьях [1–3]. Там же описано, как создаются и “привязываются” к кнопке макросы — программы, написанные на языке программирования VBA, которые выполняются по щелчку на той или иной кнопке. Здесь же напомним, что: 1) запись Range("E3").Value (и подобные) означает значение, записанное в ячейке с адресом Е3. Это значение может использоваться в любом месте программы — в операторе присваивания (в его левой или правой частях), в условном операторе и т.д.; 2) запись Range("E3").Activate соответствует установке указателя активной ячейки (его часто называют “курсором”) на ячейку Е3. Кроме того, в языке VBA имеется возможность смещать этот указатель не на ячейку с заданным адресом, а относительно текущей ячейки (вниз на некоторое число ячеек и т.п.). Примеры такого смещения приведены ниже с комментариями. Основные этапы создания календаря следующие. 1. Считывание введенных значений года и месяца. Соответствующий код макроса: год = Range("E3").Value номер_месяца = Range("E4").Value 2. Определение числа дней в месяце, для которого строится календарь: 'Используем оператор варианта Select Case номер_месяца Case 1, 3, 5, 7, 8, 10, 12 число_дней_в_месяце = 31 Case 2 'Февраль If год Mod 4 = 0 Then6 'Год високосный число_дней_в_месяце = 29 Else число_дней_в_месяце = 28 End If Case Else число_дней_в_месяце = 30 End Select 3. Формирование и вывод текста в ячейке А (см. выше): месяц_и_год = MonthName(номер_месяца) + Str(год) + " года" Range("A6").Value = месяц_и_год Примечание. Функция MonthName возвращает название месяца по его порядковому номеру, функция Str преобразовывает число в строковое выражение. 4. Вывод сокращенных названий дней недели: Range("A8").Value = "ПН" Range("A9").Value = "ВТ" Range("A10").Value = "СР" Range("A11").Value = "ЧТ" Range("A12").Value = "ПТ" Range("A13").Value = "СБ" Range("A14").Value = "ВС" 5. Формирование полной даты 1-го числа заданного месяца в виде строковой величины (эта дата нужна для выполнения этапа 6): дата1 = "1" + "." + Str(номер_месяца) + "." + Str(год) 6. Определение номера дня недели 1-го числа заданного месяца: номер_дня_недели_1_числа_месяца = Weekday(дата1, 2) Примечание. Функция Weekday возвращает номер дня недели для даты, указанной в качестве ее первого аргумента; значение второго аргумента, равное 2, предусматривает, что отсчет дней недели начинается с понедельника. 7. Заполнение первого столбца календаря Range("B7").Activate 'Пропускаем неиспользуемые ячейки For i = 1 To номер_дня_недели_1_числа_месяца - 1 'Cмещаемся вниз на одну ячейку ActiveCell.Cells(2).Activate Next i 'Записываем числа в первый столбец 'Определяем количество дней в первом столбце количество_дней_в_первом_столбце = = 7 - номер_дня_недели_1_числа_месяца + 1 'Записываем соответствующие номера For i = 1 To количество_дней_в_первом_столбце 'Cмещаемся вниз на одну ячейку ActiveCell.Cells(2).Activate 'Записываем ActiveCell.Value = i Next i 8. Заполнение других столбцов (полных) 'Количество других полных столбцов количество_полных_столбцов = (число_дней_в_месяце - количество_дней_в_первом_столбце) \ 7 'Записываем записываемое_число = количество_дней_в_первом_столбце + 1 For j = 1 To количество_полных_столбцов 'Cмещаемся на начало соседнего столбца7 'Вверх на 7 ячеек For i = 1 To 7 ActiveCell.Cells(0).Activate Next i 'Вправо на одну ячейку ActiveCell.Cells(1, 2).Activate 'Очередной столбец For i = 1 To 7 'Cмещаемся вниз на одну ячейку ActiveCell.Cells(2).Activate 'Записываем очередное число ActiveCell.Value = записываемое_число записываемое_число = записываемое_число + 1 Next i Next j 9. Заполнение неполного столбца (при его наличии) If записываемое_число <= число_дней_в_месяце Then 'Есть неполный последний столбец 'Cмещаемся на его начало ActiveCell.Cells(-6, 2).Activate 'Заполняем последний столбец For i = 1 To число_дней_в_месяце - записываемое_число + 1 'Cмещаемся вниз на одну ячейку ActiveCell.Cells(2).Activate 'Записываем очередное число ActiveCell.Value = записываемое_число записываемое_число = записываемое_число + 1 Next i End If Весь макрос, связанный с кнопкой Создать, оформите самостоятельно. Макрос, выполняемый по щелчку на кнопке Очистить, имеет вид: Sub Очистить() Range("B6:G14").Clear Range("E3:E4").Clear Range("E3").Activate End Sub Задание для самостоятельной работы Оформите лист, на котором выводится календарь на некоторый год: Результаты работы, пожалуйста, присылайте в редакцию. Все приславшие правильно подготовленный лист Microsoft Excel с соответствующими макросами будут награждены дипломами. Литература 1. Игра “Быки и коровы” в среде Microsoft
Excel. / 2. Диков А.В. Моделирование
бросания игральной кости в электронной таблице
Microsoft Excel. / “В мир информатики” № 106
(“Информатика” 3. Игра “Крестики-нолики” в среде Microsoft Excel. / “В мир информатики” № 91 (“Информатика” № 9/2007). 4. Високосные годы. / “В мир информатики” № 17 (“Информатика” № 5/2004). 6 Строго говоря,не каждый год, номер которого кратен 4, является високосным [4]. Однако в данном случае приведенное условие может быть использовано. |