În acest articol, vom crea o macro pentru a extrage zilele săptămânii între două date.
În acest exemplu, trebuie să specificăm data de începere și data de încheiere înainte de a rula macrocomanda. Macro alege valoarea datei de începere din celula J8 și valoarea datei de sfârșit din celula J9. După specificarea datei de început și de sfârșit, macro-ul poate fi executat apăsând butonul „Trimite” sau apăsând tastele de comandă rapidă Alt + F8.
La executarea macro-ului, acesta va reveni în timpul săptămânii între două date pe o foaie nouă. Foaia de lucru nou inserată conține zilele săptămânii în coloana A, urmată de data respectivă din coloana B. Data de ieșire din coloana B va fi în format dd.mm.yy.
Fiecare săptămână va fi urmată de un rând gol pentru a face diferența între două săptămâni consecutive.
Explicație logică
În macro, am folosit funcția Weekday pentru a face diferența între săptămâni și weekend. Funcția Format este utilizată pentru a afișa data în formatul dorit.
Funcția zilei săptămânii
Funcția Weekday returnează o valoare întreagă care reprezintă ziua săptămânii.
Sintaxă
Ziua săptămânii (Valoare_Dată, [Prima_Ziua_Of_Saptămână])
Valoare_Dată specifică valoarea datei pentru care doriți să găsiți ziua săptămânii.
First_Day_Of_Week specifică ce zi a săptămânii trebuie considerată prima zi a săptămânii. Este nevoie de o valoare întreagă sau valoarea aleasă din enumerarea FirstDayOfWeek ca intrare. Dacă nu este specificată nicio valoare, atunci FirstDayOfWeek.Sunday este utilizată ca valoare implicită.
Valoarea enumerării |
Valoare intreaga |
Observații |
FirstDayOfWeek.System |
0 |
Prima zi a săptămânii specificată în setările de sistem |
FirstDayOfWeek.Sunday |
1 |
Duminică (implicit) |
FirstDayOfWeek.Monday |
2 |
luni |
FirstDayOfWeek.Marți |
3 |
marţi |
FirstDayOfWeek.Miercuri |
4 |
miercuri |
FirstDayOfWeek.Joi |
5 |
joi |
FirstDayOfWeek.Friday |
6 |
vineri |
FirstDayOfWeek.Sâmbătă |
7 |
sâmbătă |
După cum se vede din codul macro-ului, am folosit Weekday (i, 2) pentru a specifica luni ca prima zi a săptămânii.
Funcția de formatare
Funcția Format ia o expresie de dată ca intrare și o returnează ca șir formatat.
Sintaxa funcției Format
Format (Date_Value, format)
Valoare_Dată specifică valoarea tipului de date de dată.
Format utilizează valoarea șirului pentru a specifica ce tip de format de dată este necesar.
Următorul tabel definește câteva caractere populare pe care le puteți folosi pentru a crea formatele de dată / oră necesare:
Caracter |
Descriere |
d |
afișează ziua ca un număr fără un zero de pornire (1 - 31) |
dd |
afișează ziua ca un număr cu zero zero (01 - 31) |
ddd |
afișează ziua ca prescurtare (Duminică - Sâmbătă) |
dddd |
afișează ziua ca nume complet (duminică - sâmbătă) |
w |
afișează ziua săptămânii ca număr (1 pentru duminică până la 7 pentru sâmbătă) |
ww |
afișează săptămâna anului ca număr (1 - 54) |
m |
afișează luna ca un număr fără un zero de pornire (1 - 12) |
mm |
afișează luna ca număr cu zero zero (01-12) |
mmm |
afișează luna ca prescurtare (ianuarie - dec) |
mmmm |
afișează luna ca nume de lună completă (ianuarie - decembrie) |
q |
afișează trimestrul anului ca număr (1 - 4) |
y |
afișează ziua anului ca număr (1 - 366) |
yy |
afișează anul ca un număr din 2 cifre (00 - 99) |
aaaa |
afișează anul ca un număr din 4 cifre (100 - 9999) |
h |
afișează ora ca număr fără zero zero (0 - 23) |
hh |
afișează ora ca număr cu zerouri din partea de sus (00 - 23) |
n |
afișează minutul ca un număr fără zerouri din partea de sus (0 - 59) |
nn |
afișează minutul ca număr cu zerouri din partea de sus (00 - 59) |
s |
afișează cel de-al doilea ca număr fără zero zero (0 - 59) |
ss |
afișează al doilea ca număr cu zerouri din partea de sus (00 - 59) |
Pentru a lăsa un rând necompletat la sfârșitul fiecărei săptămâni, am verificat duminica folosind funcția zilnică și incrementăm valoarea variabilei „StartRow” cu 1, astfel încât următorul rând să rămână gol.
După cum se vede în codul macro-ului, am folosit funcția Format de două ori în moduri diferite. În primul rând, am folosit Format (i, "ddd") pentru a obține ziua săptămânii și, în al doilea rând, am folosit Format (i, "dd.mm.yy") pentru a obține data în format dd.mm.yyyy.
Explicarea codului
Reduceți foaia de lucru nouă ca foaie de lucru
Setați NewWorksheet = Worksheets.Add
Codul de mai sus este utilizat pentru a declara numele obiectului Foaie de lucru ca „NewWorksheet”. Foaia de lucru. Metoda Adăugare este utilizată pentru a adăuga noua foaie de lucru în colecția de foi de lucru. Instrucțiunea Set este utilizată pentru a inițializa obiectul declarat cu foaia nou inserată.
Pentru i = StartDate To EndDate
Bucla FOR este utilizată pentru a face o buclă de la data de începere până la data de încheiere.
Dacă Weekday (i, 2) <6 Apoi
Instrucțiunea IF este utilizată pentru a verifica starea și a executa codul pe baza stării. Condiția de mai sus va verifica valoarea returnată de funcția Weekday. Dacă este mai mică de 6, condiția IF returnează adevărat și codul din instrucțiunea IF se va executa. În caz contrar, va fi omis.
StartRow = 1
StartRow = StartRow + 1
Variabila StartRow este utilizată pentru a vă deplasa printre rânduri pe foaia de lucru. La început, variabila este inițializată la primul rând. La fiecare execuție reușită a instrucțiunii IF, valoarea variabilă se mărește cu 1, trecând la rândul următor din foaie.
Celule (StartRow, 1)
Proprietatea de celule este utilizată pentru a face referire la o anumită celulă din foaia de lucru. Celulele (număr_ rând, număr_coloană) pot fi utilizate pentru a face referire la orice celulă din foaia de lucru introducând un anumit număr de rând și numărul coloanei ca parametri. În codul Cells (StartingRow, 1), 1 specifică prima coloană și variabila „StartingRow” definește numărul rândului.
Se pot înțelege cu ușurință codurile, deoarece am inclus comentarii împreună cu coduri în macro.
Vă rugăm să urmați codul de mai jos
Opțiune Explicit Sub ExtractWeekdays () „Declararea a două variabile ale tipului de date Date Dim StartDate ca dată, EndDate as Date” Declararea variabilei de foaie de lucru Dim NewWorksheet Ca foaie de lucru Dim StartRow, i As Long ”Obținerea valorilor datei de începere și a datei de sfârșit din foaia de lucru StartDate = Foi ( "Macro"). Range ("J8"). Value EndDate = Sheets ("Macro"). Range ("J9"). Value 'Inițializarea numărului rândului inițial pentru ieșire StartRow = 1' Introducerea unei noi foi de lucru Setați NewWorksheet = Foi de lucru. Adăugați pentru i = StartDate To EndDate "Folosind metoda Weekday pentru a verifica dacă este Weekday sau weekand și dacă Weekday (i, 2) <6 Apoi" Introducerea valorii pe foaia de lucru nou inserată "Metoda format este utilizată pentru formatarea valorii datei NewWorksheet.Cells ( StartingRow, 2) = Format (i, "dd.mm.yy") NewWorksheet.Cells (StartingRow, 1) = Format (i, "ddd") 'Actualizarea valorii variabilei StartRow pentru trecerea la rândul următor StartRow = StartRow + 1 End Dacă 'Se introduce rândul gol pentru weekend Dacă Ziua săptămânii (i, 2) = 7 Apoi StartRow = StartRow + 1 End If N ext i Set NewWorksheet = Nu se termină nimic Sub
Dacă ți-a plăcut acest blog, distribuie-l prietenilor tăi de pe Facebook. De asemenea, ne puteți urmări pe Twitter și Facebook.
Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți munca noastră și o putem îmbunătăți. Scrieți-ne pe site-ul de e-mail