В тази статия ще създадем макрос за извличане на делничните дни между две дати.
В този пример трябва да посочим начална и крайна дата, преди да стартираме макроса. Макросът избира стойността на началната дата от клетка J8 и стойността на крайната дата от клетка J9. След като посочите началната и крайната дата, макросът може да бъде изпълнен чрез натискане на бутона „Изпращане“ или натискане на клавишни комбинации Alt + F8.
При стартиране на макроса той ще връща делничните дни между две дати на нов лист. Ново вмъкнатият работен лист съдържа делнични дни в колона A, последвана от съответната дата в колона B. Изходната дата в колона B ще бъде във формат dd.mm.yy.
Всяка седмица ще бъде последвана от празен ред, за да се направи разлика между две последователни седмици.
Логично обяснение
В макроса използвахме функцията „Делничен ден“, за да правим разлика между делничните и уикендите. Функцията за форматиране се използва за показване на датата в необходимия формат.
Функция за делничен ден
Функцията Weekday връща цяло число, което представлява деня от седмицата.
Синтаксис
Делничен ден (Date_Value, [First_Day_Of_Week])
Date_Value посочва стойността на датата, за която искате да намерите деня от седмицата.
Първи_Ден_От_седмица посочва кой ден от седмицата да се счита за първи ден от седмицата. За вход се приема цяло число или стойността, избрана от изброяването на FirstDayOfWeek. Ако не е посочена стойност, тогава FirstDayOfWeek.Sunday се използва като стойност по подразбиране.
Стойност на изброяване |
Целочислена стойност |
Забележки |
FirstDayOfWeek.System |
0 |
Първият ден от седмицата, посочен в системните настройки |
FirstDayOfWeek.Sunday |
1 |
Неделя (по подразбиране) |
FirstDayOfWeek. понеделник |
2 |
Понеделник |
FirstDayOfWeek.Tueday |
3 |
Вторник |
FirstDayOfWeek.Wednesday |
4 |
Сряда |
FirstDayOfWeek.Четвъртък |
5 |
Четвъртък |
FirstDayOfWeek.Friday |
6 |
Петък |
FirstDayOfWeek.Subturday |
7 |
Събота |
Както се вижда от кода на макроса, използвахме седмицата (i, 2), за да посочим понеделник като първи ден от седмицата.
Функция за форматиране
Функцията Format приема израз за дата като вход и го връща като форматиран низ.
Синтаксис на функцията Format
Формат (Date_Value, формат)
Date_Value указва стойността на типа данни за дата.
Формат използва стойност на низ, за да определи какъв тип формат на датата е необходим.
Следващата таблица определя някои популярни знаци, които могат да се използват за създаване на необходимите формати за дата/час:
Персонаж |
Описание |
д |
показва деня като число без начална нула (1 - 31) |
дд |
показва деня като число с водеща нула (01 - 31) |
ddd |
показва деня като съкращение (нд - сб) |
dddd |
показва деня като пълно име (неделя - събота) |
w |
показва деня от седмицата като число (1 за неделя до 7 за събота) |
ww |
показва седмицата на годината като число (1 - 54) |
м |
показва месеца като число без начална нула (1 - 12) |
mm |
показва месеца като число с водеща нула (01 - 12) |
ммм |
показва месеца като съкращение (януари - дек.) |
Мммм |
показва месеца като пълно име на месец (януари - декември) |
q |
показва тримесечието на годината като число (1 - 4) |
y |
показва деня в годината като число (1 - 366) |
yy |
показва годината като 2 -цифрено число (00 - 99) |
yyyy |
показва годината като 4 -цифрено число (100 - 9999) |
з |
показва часа като число без водещи нули (0 - 23) |
чч |
показва часа като число с водещи нули (00 - 23) |
н |
показва минутата като число без водещи нули (0 - 59) |
nn |
показва минутата като число с водещи нули (00 - 59) |
с |
показва второто като число без водещи нули (0 - 59) |
ss |
показва втория като число с водещи нули (00 - 59) |
За да оставим празен ред в края на всяка седмица, проверихме за неделя, използвайки функцията за делнични дни и увеличихме стойността на променливата „StartingRow“ с 1, така че следващият ред да остане празен.
Както се вижда в кода на макроса, ние използвахме функцията Format два пъти по различни начини. Първо, използвахме Format (i, "ddd"), за да получим делничния ден, и второ, използвахме Format (i, "dd.mm.yy"), за да получим датата във формат dd.mm.yyyy.
Обяснение на кода
Затъмнете новия работен лист като работен лист
Задайте NewWorksheet = Работни листове.Добавяне
Горният код се използва за деклариране на името на обекта на работен лист като „NewWorksheet“. Worksheets.Add метод се използва за добавяне на новия работен лист в колекцията Worksheets. Операторът set се използва за инициализиране на декларирания обект с ново вмъкнатия лист.
За i = Начална дата до Крайна дата
Цикълът FOR се използва за цикъл от начална дата до крайна дата.
Ако Делничен ден (i, 2) <6 Тогава
Операторът IF се използва за проверка на условието и изпълнение на кода въз основа на условието. Горното условие ще провери връщането на стойността чрез функцията Weekday. Ако е по -малко от 6, условието IF връща истина и кодът в оператора IF ще се изпълни. В противен случай той ще бъде пропуснат.
Начален ред = 1
StartingRow = StartingRow + 1
Променливата StartingRow се използва за придвижване през редове на работния лист. В началото променливата се инициализира на първия ред. С всяко успешно изпълнение на оператора IF стойността на променливата се увеличава с 1, преминавайки към следващия ред в листа.
Клетки (StartingRow, 1)
Свойството клетки се използва за препратка към определена клетка в работния лист. Клетките (номер на ред, номер на колона) могат да се използват за препратка към всяка клетка в работния лист, като се въведат определен параметър и номер на колона като параметри. В кода Клетки (StartingRow, 1), 1 посочва първата колона, а променливата “StartingRow” определя номера на реда.
Човек може лесно да разбере кодовете, тъй като включих коментарите заедно с кодовете в макроса.
Моля, следвайте кода по -долу
Опция Изрично Sub ExtractWeekdays () "Деклариране на две променливи на Тип данни Дата Dim StartDate като дата, EndDate като дата" Деклариране на променлива на работния лист Dim NewWorksheet Като работен лист Dim StartingRow, i As Long "Получаване на стойности на начална дата и крайна дата от работен лист StartDate = Sheets ( "Макрос"). Диапазон ("J8"). Стойност Крайна дата = Листове ("Макро"). Обхват ("J9"). Стойност "Инициализиране на номера на началния ред за извеждане StartingRow = 1" Вмъкване на нов работен лист Задаване на нов работен лист = Работни листове. Добавяне за i = StartDate To EndDate 'Използване на метода на седмицата за проверка дали е ден на седмицата или уикенд StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Актуализиране на стойността на променливата StartingRow за преминаване към следващия ред StartingRow = StartingRow + 1 End If 'Вмъкване на празен ред за уикенда If Weekday (i, 2) = 7 Then StartingRow = StartingRow + 1 End If N ext i Set NewWorksheet = Нищо Край Sub
Ако този блог ви е харесал, споделете го с приятелите си във Facebook. Също така можете да ни следвате в Twitter и Facebook.
Ще се радваме да чуем от вас, уведомете ни как можем да подобрим работата си и да я направим по -добра за вас. Пишете ни на имейл сайта