Este nevoie de mult timp pentru a deschide sau a îngheța Excel? E bine. Să grăbim macro-ul. Adăugarea de butoane noi la bara de instrumente Acces rapid

Formatare condiționată (5)
Liste și intervale (5)
Macrocomenzi (proceduri VBA) (63)
Diverse (39)
Erori și erori Excel (3)

Cum să accelerați și să optimizați codul VBA


Mai devreme sau mai târziu, cei care scriu Visual Basic pentru Aplicații, apare o problemă - deși codul face viața mai ușoară și face totul automat, durează foarte mult. În acest articol, am decis să adun câteva recomandari simple, care va ajuta la accelerarea activității codului VBA, în timp ce în unele cazuri este foarte impresionant - de zeci sau chiar de mai multe ori. Accentul principal în articol este pus pe începători, prin urmare, la începutul articolului, cel mai mult metode simple optimizare. Mai multe soluții „profunde” pentru optimizarea codului sunt date la sfârșitul articolului, deoarece pentru a aplica aceste soluții, aveți nevoie de suficientă experiență în VB și imediat este posibil ca astfel de metode de optimizare să nu fie clare pentru cineva.

  1. Dacă există multe Activare și Selectare în cod, în special în cicluri, ar trebui să scăpați imediat de ele. Cum se face asta, am scris în articol: Selectați și activați - de ce sunt necesare și sunt necesare?
  2. Asigurați-vă că dezactivați în timpul execuției codului:
    • recalcularea automată a formulelor. Pentru ca formulele să nu fie recalculate cu fiecare manipulare pe foaie în timpul execuției codului - acest lucru poate încetini extrem de mult codul dacă există o mulțime de formule:

      Application.ScreenUpdating = Fals

    • Pentru orice eventualitate, dezactivați urmărirea evenimentelor. Este necesar ca Excel să nu execute nicio procedură de eveniment care ar putea fi în foaia în care se fac modificări. De regulă, acestea sunt evenimente de schimbare a celulelor, activare a foilor etc.:

      ActiveWorkbook.ActiveSheet.DisplayPageBreaks = Fals

      dacă tipărirea se face în interiorul codului, atunci este indicat să introduceți această linie imediat după linia care imprimă foaia (cu condiția ca tipărirea să nu aibă loc într-un ciclu. În acest caz, după finalizarea ciclului de imprimare).

    • Pentru orice eventualitate, puteți dezactiva afișarea informațiilor în bara de stare Excel (în ce cazuri informațiile sunt afișate acolo și de ce puteți afla în articolul: Afișați progresul). Deși acest lucru nu consumă multe resurse, uneori poate încă accelera codul:
      Application.StatusBar = False

      Application.StatusBar = False

    Principalul lucru de reținut - toate aceste proprietăți trebuie reactivate după rularea codului. În caz contrar, pot apărea probleme cu lucrul în Excel. De exemplu, dacă uitați să activați recalcularea automată a formulelor - majoritatea formulelor vor fi recalculate exclusiv prin metoda forțată - Schimb+F9. Și dacă uitați să dezactivați actualizarea ecranului - adică există șansa de a vă bloca capacitatea de a lucra pe foi și cărți. Deși în mod implicit proprietatea ScreenUpdating ar trebui să revină la True dacă a fost dezactivată în cadrul procedurii - este mai bine să nu vă bazați pe acest lucru și să vă obișnuiți să returnați toate proprietățile la locul lor forțat. De fapt, totul se rezumă la câteva rânduri:

    „Return screen update Application.ScreenUpdating = True „Return auto-recalcularea formulelor Application.Calculation = xlCalculationAutomatic „Activați urmărirea evenimentelor Application.EnableEvents = True

    Cum arată acest cod în practică? Să presupunem că trebuie să scrieți într-o buclă de 10.000 de linii de valori:

    Sub TestOptimize() "dezactivați actualizarea ecranului Application.ScreenUpdating = False "Dezactivați recalcularea automată a formulelor Application.Calculation = xlCalculationManual "Dezactivați urmărirea evenimentelor Application.EnableEvents = False "Dezactivați paginarea ActiveWorkbook.ActiveSheet.DisplayPageBreaks = Codul de filtrare a celulelor FalsemDirect" lr As Long For lr = 1 To 10000 Cells(lr, 1).Value = lr "de exemplu, numerotați liniile Următorul "Return update screen Application.ScreenUpdating = True "Return auto-recalcularea formulelor Application.Calculation = xlCalculationAutomatic „Activați aplicația de urmărire a evenimentelor. EnableEvents = True EndSub

    Întreruperile din paginile tipărite nu pot fi returnate - încetinesc în orice caz munca.

  3. Ar trebui evitate bucle precum Do While pentru a găsi ultima celulă. Începătorii fac adesea această greșeală. Este mult mai eficient și mai rapid să calculați ultima celulă de pe întreaga foaie sau într-o anumită coloană fără această buclă de frânare Do While. folosesc de obicei
    lLastRow = Cells(Rows.Count,1).End(xlUp).Row

    lLastRow = Cells(Rows.Count,1).End(xlUp).Row

    Am descris alte opțiuni pentru determinarea ultimei celule în detaliu în articol:

Pentru mai mult utilizatori experimentați VBA, voi oferi mai multe soluții pentru optimizarea codurilor în diferite situații:

  • Cel mai buna optimizare cod, dacă trebuie să lucrați direct cu celulele foii, să le procesați și, eventual, să schimbați valorile, atunci este mai rapid să faceți toată procesarea într-o matrice și să o descărcați pe foaie deodată. De exemplu, codul de mai sus pentru completarea celulelor cu numere va arăta astfel în acest caz:
    Sub TestOptimize_Array() „Direct codul pentru umplerea celulelor Dim arr, lr cat long „Amintiți-vă într-o matrice dintr-o lovitură toate valorile a 10000 de rânduri ale primei coloane arr = Cells(1, 1).Resize(10000).Value „dacă aveți nevoie de umplutură pentru două sau mai multe coloane "arr = Cells(1, 1).Resize(10000, 2).Value"sau "arr = Interval(Celele(1, 1),Culele(10000, 2)).Valoare „sau calculați automat ultima celulă și introduceți datele în matrice, pornind de la celula A3 "llastr = Cells(Rows.Count, 1).End(xlUp).Row "ultima celulă a coloanei A "arr = Interval(Cells(3, 1),Cells(llastr, 2)).Valoare Pentru lr = 1 Până la 10000 arr(lr,1) = lr „Umpleți matricea cu numere de serie Următorul „Încărcați matricea procesată înapoi pe foaia din aceleași celule Cells(1, 1).Resize(10000).Value = arr End Sub

    Sub TestOptimize_Array() „Direct codul pentru umplerea celulelor Dim arr, lr As Long „rețineți într-o matrice dintr-o lovitură toate valorile a 10000 de rânduri ale primei coloane arr = Cells(1, 1).Resize(10000). ).Valoare „(!LANG: dacă trebuie să completați două sau mai multe coloane"arr = Cells(1, 1).Resize(10000, 2).Value "sau"arr = Range(Cells(1, 1),Cells(10000, 2)).Value "sau calculați automat ultima celulă și introduceți datele în matrice, pornind de la celula A3"llastr = Cells(Rows.Count, 1).End(xlUp).Row "последняя ячейка столбца А "arr = Range(Cells(3, 1),Cells(llastr, 2)).Value For lr = 1 To 10000 arr(lr,1) = lr "заполняем массив порядковыми номерами Next "Выгружаем обработанный массив обратно на лист в те же ячейки Cells(1, 1).Resize(10000).Value = arr End Sub!}

    Dar trebuie luat în considerare aici și faptul că matrice mari poate cauza pur și simplu un depășire a memoriei. Acest lucru este cel mai relevant pentru sistemele pe 32 de biți, unde este alocată mai puțină memorie pentru VBA și Excel decât în ​​sistemele pe 64 de biți.

  • Dacă utilizați rapid IF - IIF , înlocuiți-l cu IF ... Then ... Else
  • De asemenea, este mai bine să folosiți același IF ... Then ... Else în loc de Switch() și Shoose()
  • În cele mai multe cazuri, verificarea unui șir pentru „nu este gol” este mai bună cu Len() decât o comparație directă cu gol: Len(s)=0 în loc de s = „” . Acest lucru se datorează faptului că lucrul cu șiruri este mult mai lent decât lucrul cu date numerice.
  • Nu aplicați concatenarea șirurilor în mod inutil. De exemplu, s = "AB" va fi mai rapid decât: s = "A" și "B"
  • Nu comparați direct valorile textului. Este mai bine să utilizați funcția StrComp încorporată:
    Dacă s s1, atunci va fi mai lent decât
    Dacă StrComp(s, s1, vbBinaryCompare) = 0
    și cu atât mai mult dacă comparația trebuie să nu țină seama de majuscule și minuscule:
    Dacă LCaza(e) LCaza(s1) Atunci va fi mai lent decât
    Dacă StrComp(s, s1, vbTextCompare) = 0
  • Buclele For...Next sunt în general mai rapide decât buclele Do...Loop.
  • Evitați însuşirea variabile de tip Variantă. Deși tentația este mare, acest tip necesită multă memorie și încetinește și mai mult codul. De asemenea, pentru variabilele obiect, ar trebui să evitați, dacă este posibil, fără chip tip global Obiectați și aplicați un tip de beton:

    Dim rRange ca Interval, wsSh ca Foaia de lucru

  • Dacă lucrați cu matrice, atunci puteți specifica acest lucru în mod explicit atunci când declarați:

    Dim arr() ca șir, arr2() ca lung

    dar acest lucru este numai dacă există încredere că tipurile de date strict specificate vor fi introduse în matrice

Desigur, acestea nu sunt toate trucuri și soluții pentru optimizare. Dar primul cuplu ar trebui să fie suficient. În plus, ar trebui să folosiți întotdeauna bunul simț. De exemplu, dacă codul rulează în 2 secunde, atunci probabil că nu are rost să-l optimizăm în continuare. Desigur, dacă acest cod nu este unul dintre cele care pur și simplu schimbă valoarea uneia sau a două celule.

A ajutat articolul? Distribuie link-ul prietenilor tăi! Lecții video

("Bara de jos":("textstyle":"static","textpositionstatic":"bottom","textautohide":true,"textpositionmarginstatic":0,"textpositiondynamic":"bottomleft","textpositionmarginleft":24," textpositionmarginright":24,"textpositionmargintop":24,"textpositionmarginbottom":24,"texteffect":"slide","texteffecteasing":"easeOutCubic","texteffectduration":600,"texteffectslidedirection":"left","texteffectslidedistance" :30,"texteffectdelay":500,"texteffectseparate":false,"texteffect1":"slide","texteffectslidedirection1":"dreapta","texteffectslidedistance1":120,"texteffecteasing1":"easeOutCubic","texteffectduration1":600 ,"texteffectdelay1":1000,"texteffect2":"slide","texteffectslidedirection2":"dreapta","texteffectslidedistance2":120,"texteffecteasing2":"easeOutCubic","texteffectduration2":600,"texteffectdelay2,":1500,":1500, textcss":"display:block; padding:12px; text-align:left;","textbgcss":"display:block; poziție:absolute; sus:0px; stânga:0px; lățime:100%; înălțime:100% ; culoare de fundal:#333333; opacitate:0,6; filtru:a lpha(opacity=60);","titlecss":"display:block; poziție:relativă; font:bold 14px \"Lucida Sans Unicode\",\"Lucida Grande\",sans-serif,Arial; culoare:#fff;","descriptioncss":"display:block; poziție:relativă; font:12px \"Lucida Sans Unicode\",\"Lucida Grande\",sans-serif,Arial; culoare:#fff; margin-top:8px;","buttoncss":"display:block; poziție:relativă; margin-top:8px;","texteffectresponsive":true,"texteffectresponsivesize":640,"titlecssresponsive":"font-size:12px;","descriptioncssresponsive":"display:none !important;","buttoncssresponsive": "","addgooglefonts":false,"googlefonts":"","textleftrightpercentforstatic":40))

Economiștii petrec de obicei aproximativ jumătate din timpul lor de lucru în Excel. În același timp, pentru mulți dintre noi, comunicarea cu programul dă destul de multe bătăi de cap, pentru că. performanţă operațiuni de rutină ia mult timp. Să vorbim despre cum să lucrezi mai rapid în Excel.

Practic nu există alternative la Excel. Nu este surprinzător, deoarece Excel vă permite să faceți aproape totul. Este ca un șevalet gol pentru un artist. Te așezi la el și începi să-ți pictezi poza.

Un frotiu, un alt frotiu... Trec câteva ore și... Câteva plăci mici și un grafic cu un design standard. Trist nu?

Și mi s-a întâmplat. Lucrezi, lucrezi. Deja epuizat, iar munca tocmai a început. Ce să faci cu el?

Există o ieșire! Adevărat, nu toată lumea știe despre el și, prin urmare, trebuie să rămână la serviciu, să amâne întâlnirile cu prietenii, întâlnirile cu cei dragi și pur și simplu să se epuizeze la serviciu. Nu știu despre tine, dar nu mi se potrivește, iar astăzi vă voi spune secretele mele de lucru rapid în Excel.

Interesant? Atunci să mergem!

Primul lucru de făcut este să aruncați șoarecele!

Așa ai citit bine. Pentru a lucra mai rapid în Excel, trebuie să eliminați mouse-ul. DOAR nu vă grăbiți să închideți fila, acum totul va deveni clar.

Înțeleg că șoarecele îți este foarte drag. Nu poți trăi fără ea, dar crede-mă, ea este cea care te oprește. Nu sunt nebun, doar știu mult mai convenabil și drumul rapid mutare pagini Excelși pur și simplu nu utilizați acest gadget minunat.

Este vorba despre tastele rapide care vă permit să comutați pur și simplu între pagini cu o viteză fulgerătoare, să selectați, să adăugați sau să ștergeți clădiri / coloane. În general, cunoașterea literalmente a 5-7 combinații accelerează munca cu un ordin de mărime. Multe operațiuni de navigare cu mouse-ul durează de 3-5 sau chiar de 10 ori mai mult.

Vă voi da un exemplu. Pentru a adăuga mai multe rânduri în Excel, există trei opțiuni:

  1. Opțiunea 1. Luați mouse-ul, plasați-l peste coloana corespunzătoare sau mai multe coloane, în funcție de câte coloane trebuie să introduceți. Clic Click dreapta, selectați Lipire în caseta derulantă.
  2. Opțiunea 2. Folosind butoanele din fila Acasă din grupul Celule. Din nou, selectați, accesați fila Acasă. Faceți clic pe butoanele corespunzătoare pentru a obține rezultatul.
  3. Opțiunea 3. Apăsați pentru a evidenția o coloană. Ctrl + „Spațiu”, pentru a adăuga un clic pe coloană Ctrl+'+'.

Puteți spune că economiile nu sunt mari. Într-un fel o voi face în 15-20 de secunde, în altul în 3-5. Și ce voi face cu cele 12-15 secunde eliberate? Și, în general, de câte taste rapide ai nevoie pentru a învăța să simți diferența?

Sunt de acord! Timp salvat de unul tastă rapidă nu grozav, dar toată munca noastră în Excel este o repetare monotonă a acelorași operații de sute de ori în secvențe diferite. Înseamnă că dacă o economie condiționată de o operațiune vom presupune 10 secunde. Când repeți o operație de 20-30 de ori pe zi, economisirea de la cunoașterea unei combinații de taste rapide este de 3-5 minute. Deci, cunoașterea a 10 taste rapide economisește 30-50 de minute de timp!!! Acum e tare!!!

Sfatul numărul doi urmează din primul - învață tastele rapide. Nu există atât de multe taste rapide utile, așa că după ce învățați 10-20 de combinații, veți simți rapid diferența de viteză.

"Sfat bun!" - obiectezi. „Și cum îi înveți? Stați pe un taburet în fața colegilor și recitați ca o poezie? 🙂

Nu. Desigur, nu este așa. încercați să găsiți propriul mod de a învăța tastele rapide. Ce se poate face pentru asta?

De exemplu, puteți lua o listă de taste rapide și puteți selecta 3-5 funcții cele mai utilizate. Încercați să le rezolvați, exersați cum funcționează. Obișnuiți-vă să le apăsați când aveți nevoie de ele. De-a lungul timpului, degetele vor sta pe tastatură, astfel încât să puteți comuta rapid și convenabil între foi. Ați învățat acestea - treceți la următorul, apoi altul și altul.

Și, desigur, iată o listă de comenzi rapide și taste rapide utile:

Tastele rapide vă vor ajuta cu siguranță să lucrați mai rapid în Excel. Antrenează-te în utilizarea lor și foarte rapid viteza muncii tale va crește semnificativ. Dar asta nu este tot!

Mai am câteva sfaturi în magazin. Gata? Merge!

Sfat Excel numărul TREI. Funcții și combinațiile lor pe care trebuie să le stăpânești

Poate suna banal, dar trebuie să cunoașteți funcțiile pentru a funcționa mai rapid în Excel. Sunt sigur că tu, dragul meu cititor, cunoști fluent funcționalitatea Excel și poți face rapoarte și calcule foarte interesante în Excel. Cu toate acestea, este posibil ca nu toate funcțiile să vă fie supuse și să aveți ceva pentru care să vă străduiți.

De asemenea, fiecare funcție poate avea multe caracteristici de utilizare. Deci, de exemplu, știți că funcția SUM poate adăuga valori din diferite foi de lucru din registrul dvs. de lucru fără a fi nevoie să le selectați pe fiecare individual? Acestea.

În loc de o formulă

=SUMA(Foaia1!A1; Foaia2!A1; Foaia3!A1; Foaia4!A1; Foaia5!A1; Foaia6!A1; Foaia7!A1; ... FoaiaN!A1)

Formula va arăta ca

=SUM(Foaie1:FoaieN!A1)

Pentru ce sunt toate acestea? Pe lângă funcționalitatea bogată a Excel, care se află în formulele sale standard, există multe combinații, a căror cunoaștere vă permite să rezolvați și nu sarcini standard. Deci, Excel nu are deloc o funcție MINESLI. Da, există SUMMESLI, COUNTIF, dar MINESLI nu. De asemenea, MAXIF, MEDIANIF etc., dar toate acestea se rezolvă folosind funcții de zonă. Este posibil să fi văzut când o formulă este înfășurată în bretele.

Unele funcții funcționează bine numai împreună. Despre asta vorbesc acum despre INDEX și SEARCH. S-ar părea că prostia funcționează individual, dar în perechi oferă o funcționalitate excelentă.

Ce este nevoie pentru asta? De exemplu, abonați-vă la grupul nostru în Facebookși așteptați postări noi. 😉

Vedeți și lista de formule la care vă recomand să fiți atenți:

Există multe mai multe funcții în Excel, dar le puteți rezolva deocamdată. Sunt sigur că majoritatea vă vor ajuta să lucrați mai rapid în Excel și să fiți cel puțin semnificativ mai eficient.

Sfat Excel numărul PATRU. Structura și formatarea în fișiere

Dacă ai dat peste principiile modelării, atunci știi evident că, pentru a evita erorile, este suficient să pui ordine în calcule.

Calcule confuze, acumularea și navigarea incomodă duc la faptul că chiar și autorul însuși începe să se rătăcească în dosar.

Cum poate fi evitat acest lucru? iti dau niste sfaturi:

  • Formatați fișierul. Vă permite să aveți același număr de zecimale, același font în tot documentul și limitat paleta de culori. Acum îmi place să folosesc palete de aceeași culoare, dar de tonuri diferite (albastru deschis, albastru și albastru închis). Arată foarte elegant.
  • Separați datele de intrare, calculele și rezultatele. Acest lucru nu este întotdeauna necesar, dar atunci când există o mulțime de date, prezența unei plăci de rezumat pur și simplu salvează.
  • Faceți aceleași formule după coloană sau rând. de acord că nu este foarte corect atunci când același indicator în perioade diferite este considerat diferit. În acest caz, de obicei, acest lucru nu este vizibil până când te uiți la formulă. și uneori poți uita.
  • Încercați să evitați referințele circulare și referințele la fișiere externe. Ele dau de obicei rezultate diferite diferite calculatoare. A existat un caz în care o eroare de actualizare linkuri externe a fost mai mare de 7 zerouri. Ay!
  • Simplificați și economisiți spațiu. Excel vă permite să creați câte rânduri și coloane doriți. În cei 10 ani de lucru cu programul, nu am folosit niciodată o foaie complet. Este puțin probabil să reușiți, așa că nu vă îngrădiți formule complexe. Mai bine faceți calculul în mai mulți pași.

Iată câteva sfaturi. Crede-mă, ei fac viața mai ușoară. Sunt mai puține erori, calculele sunt mai precise și mai clare. dacă aveți alte sfaturi, lăsați-le în comentarii.

In acest sfat nu sunt deloc original. În mod ironic, atingerea măiestriei depinde de tine și de cât de mult și cât de mult exersezi.

Aș dori să dau un curs intensiv de 28 de minute, după care toată lumea va ști Excel este mai bun decât știu dezvoltatorii săi, dar din păcate. Acest lucru nu se întâmplă. Munca constantă și asiduă duce la rezultate cu adevărat impresionante. De aceea, foarte curând lansăm un training Excel, care poate fi finalizat gratuit pe site-ul nostru (pentru macar primii 1000 de utilizatori).

  • tutorial

cuvânt înainte

S-a întâmplat că astăzi mulți oameni trebuie să lucreze (să scrie macrocomenzi) în VBA în Excel. Unele macrocomenzi conțin sute de linii de cod care trebuie executate în fiecare zi (săptămână, lună, trimestru și așa mai departe) și, în același timp, durează destul de mult. Se pare că procesul este automatizat și nu este necesară nicio intervenție umană, dar timpul necesar pentru a executa o macrocomandă poate dura zeci de minute, sau chiar câteva ore. Timpul, după cum se spune, este bani, iar în această postare voi încerca să grăbesc semnificativ timpul de execuție al macro-ului dvs. și, poate, acest lucru va avea un efect pozitiv asupra afacerii dvs. și, în cele din urmă, banii.

Înainte de a începe lucrul

Înainte de a ajunge direct la subiect, aș dori să vă atrag atenția asupra postării: Câteva sfaturi pentru lucrul cu VBA în Excel. În special, în blocul „Macro acceleration” există exemple utile cod care ar trebui folosit împreună cu sfaturile mele pentru a accelera munca pentru a obține rezultate maxime.

Accelerarea macro-ului

Deci, până la obiect... Pentru a accelera cu adevărat munca VBA în Ecxel, trebuie să înțelegeți că accesarea unei celule pe o foaie necesită mult timp. Dacă doriți să scrieți o valoare într-o celulă, atunci nu va dura mult timp, dar dacă trebuie să scrieți (citiți, consultați) la mii de celule, atunci va dura mult mai mult timp. Ce să faci în astfel de cazuri? Matricele vin în ajutor. Matricele sunt stocate în memorie, iar VBA efectuează operațiuni în memorie de sute sau chiar de mii de ori mai rapid. Prin urmare, dacă aveți mii, sute de mii de valori în datele dvs., atunci timpul de execuție macro poate dura de la câteva minute la câteva ore, iar dacă transferați aceste date într-o matrice, atunci execuția macro poate fi redusă la câteva secunde (minute).

Voi oferi un exemplu de cod și voi explica în comentarii ce este, va fi mai clar. În plus, unele linii de cod care nu au legătură directă cu procesul de accelerare pot fi utile.

Exemplu
Să presupunem că avem date pe „Sheet1” (“Sheet1”). Datele sunt conținute în 50 de coloane (coloanele conțin titluri) și 10.000 de rânduri. De exemplu, trebuie să introducem o valoare în ultima coloană care este egală cu valoarea din a doua coloană împărțită la valoarea din a treia coloană (începând cu a doua linie, deoarece prima conține titlul). Apoi vom lua primele 10 coloane și le vom copia în „Sheet2” (“Sheet2”), pentru procesare ulterioară (pentru alte nevoi). Deși exemplul este banal, mi se pare că poate reflecta întreaga esență a acestei postări.

„Pentru a inițializa în mod explicit variabilele, activați această opțiune „Acest lucru va ajuta la evitarea multor erori Opțiune Explicit Sub Test() „Vom accesa foile prin variabilele Dim Sheet1_WS, Sheet2_WS As Worksheet „Variabilă pentru trecerea timpului pe foaie (în matrice ) Dim i As Long" Matrice în care vor fi stocate datele noastre Dim R_data As Variant "Variabilele ultimului rând și coloană Dim FinalRow, FinalColumn As Long "Puteți inițializa foaia nu după nume, ci după numărul de serie „Set Sheet1_WS = Application.ThisWorkbook.Worksheet("Sheet1") Set Sheet1_WS = Application.ThisWorkbook.Sheets(1) Set Sheet2_WS = Application.ThisWorkbook.Sheets(2) "Căutați ultimul rând neblank din prima coloană" De asemenea, în ultimul rând, în prima coloană, nu ar trebui să existe o celulă goală. Desigur, dacă există date în acest rând. În caz contrar, ultimul rând va fi ultima celulă nevidă.FinalRow = Sheet1_WS.C ells(Rows.Count, 1).End(xlUp).Row "=10 000 "Căutați ultima coloană negoală din primul rând FinalColumn = Sheet1_WS.Cells(1, Columns.Count).End(xlToLeft). Coloana „=50 „Atribuiți intervalul de date de pe foaia 1 matricei R_data = Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn)) Pentru i = 2 To FinalRow „Efectuați operațiunile de date avem nevoie. „Verificați că nu există nicio împărțire la zero. „Se presupune că coloanele 2 și 3 sunt date numerice „În caz contrar, este necesară tratarea erorilor Dacă R_data(i, 3)<>0 Apoi R_data(i, FinalColumn) = R_data(i, 2) / R_data(i, 3) End If Next i "Copiați datele din matrice înapoi în Sheet1 "Înainte de aceasta, ștergeți datele de pe foaie (dacă există formatare sau formule, atunci este mai bine Sheet1_WS.Cells.ClearContents) Sheet1_WS.Cells.Delete Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn)) = R_data „Copiați mai întâi datele în Sheet2, copiați mai întâi 10 coloane. Sheet2_WS.Range( Sheet2_WS.Cells(1, 1), Sheet2_WS.Cells(FinalRow, 10)) = R_data „Închideți registrul de lucru și salvați-l Workbooks(Application.ThisWorkbook.Name).Close SaveChanges:=True End Sub

LA acest exemplu matricea este umplută cu intervalul specificat. Dacă avem un explicit matrice bidimensională, apoi îi puteți copia valoarea în foaie în acest fel:

Dim R_new() As Variant ............................................ ... " Specificați în mod explicit dimensiunea matricei ReDim R_new(1 To FinalRow, 1 To 50) As Variant .......................... ...... ........... Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, 50)) = R_new()

Concluzie

Majoritatea operațiunilor asupra datelor pot fi efectuate într-o matrice, în timp ce se afișează doar rezultatul pe foaie. Uneori este logic să afișați rezultatul pe o foaie, apoi să efectuați unele acțiuni (cum ar fi sortarea) și să încărcați din nou datele într-o matrice.

Pentru mine, a fost o mare surpriză să accelerez activitatea macro-ului datorită matricelor, deoarece datele de pe foi, de fapt, sunt deja o matrice bidimensională. Dar se dovedește că accesarea memoriei este mult mai rapidă decât accesarea celulelor de pe o foaie.

În viitor, am de gând să scriu sfaturi (exemple) despre cautare rapida date pe foaie, dar asta va fi o altă postare. Dacă aveți întrebări, comentarii, vă rugăm să scrieți.

Vă mulțumim pentru atenție. Dezvoltare fericită.

Periodic, se întorc la mine cu întrebări „de ce încetinește biroul”. LA acest moment se confruntă cu pornirea lentă programe Excel din Suită de birou 2007. Problema este destul de comună. Pot exista multe motive diferite și, în consecință căi diferite solutii. Pentru a nu ține toate acestea în cap, adun toate metodele pe care le-am găsit în acest articol.

Metoda unu

Iată o traducere a unui articol în limba engleză pe care l-am găsit pe Internet în procesul de căutare a unei soluții la problemă:

Problemă

Dacă Excel nu rulează deja, dublu clic pe un fișier îl lansează instantaneu, dar încărcarea fișierului pe care s-a făcut clic poate dura până la un minut.

Soluţie

În Windows XP această problemă se poate rezolva astfel:

  1. Alerga Conductor(Explorator)
  2. Selectați meniul Serviciu(Unelte)
  3. Meniul Proprietățile folderului(Opțiuni pentru foldere)
  4. fila Tipuri de fisiere(Tipuri de fisiere)
  5. Găsiți un element XLS
  6. Buton În plus(Avansat)
  7. Element din listă Deschis(deschis)
  8. Buton Schimbare...(Editați | ×...)

În caseta de dialog care apare, trebuie să faceți două modificări:

Aplicația care efectuează acțiunea:(Aplicație pentru a efectua acțiuni:)

La sfârșitul liniei, după comutatorul /e, adăugați un spațiu și "%1" (împreună cu ghilimele)

Aplicația DDE nu rulează:(Aplicația DDE nu rulează:)

Inserați text: (împreună cu paranteze)

Detalii

Am găsit o problemă după actualizarea la MS Office 2007. Tata a observat asta Foaie de calcul Excel se încarcă rapid dacă includeți calea către EXCEL.EXE pe linia de comandă. Încărcarea unui document prin DDE, așa cum face Explorer, pare să dureze mult mai mult, cel puțin dacă aplicația nu rulează deja. Modificările descrise mai sus trec calea fișierului de îndată ce aplicația este pornită. Comanda DDE rulată mai târziu este doar un comentariu și, ca linie goală, rezultând acțiunea implicită din câmpul două rânduri de mai sus. Cheie /e pare să împiedice deschiderea unui tabel gol, motiv pentru care l-am exclus mai întâi, deoarece dacă se trece un fișier, de obicei masă goală si nu se deschide. Totuși, am primit un mesaj de la o persoană ( a existat un link către o pagină de forum Microsoft care nu mai există. - nota traducătorului) folosind cheia /e, si pentru ca nici pe mine nu ma deranjeaza, iti propun sa o lasi pe loc. Dacă Excel rulează deja, următorul document va fi deschis prin DDE ca înainte. Drept urmare, doar unul procesul excel va functiona.

Cuvânt

Din nou și din nou sunt întrebat dacă știu un truc similar pentru Word. Chiar și fără trucuri, Word pornește destul de repede, dar adăugarea „%1” mi-a dat o ușoară creștere a vitezei de pornire. Nu știu exact ce este „”. Este ca un „comentar special” care are un anumit efect în ciuda faptului că este un comentariu. Am decis să copiez acest comentariu în casetă " Aplicația DDE nu rulează" și nu am observat niciun efect nedorit. Am lăsat și cheile /eși /ddeîn Linie de comanda, pur și simplu pentru că nu a găsit niciun rău de la ei.

Reveniți la starea anterioară

Dacă ați încercat aceste sugestii și nu au funcționat pentru dvs., reveniți la setări minte se poate dovedi a fi mai complicat decât vă așteptați. Se pare că fereastra în care faceți modificări adaugă întotdeauna %1 la comandă când faceți clic pe OK. Singura soluție pe care am reușit să o găsesc este să folosesc Editorul de registru. Comanda este stocată în cheia implicită din ramură: HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\Open\command

Dacă doriți, de asemenea, să returnați setarea DDE, verificați ramura adiacentă ddexecși ștergeți ramura IfExecîn întregime.

alte metode

Resursa de rețea indisponibilă

  • Verificați dacă sistemul are imprimante de rețea care sunt momentan indisponibile. Aplicații de birou la pornire, ei pot încerca să le detecteze și să aștepte mult timp pentru un răspuns.
  • În registrul din filială HKEY_CLASSES_ROOT\Applications găsiți programe care au o cale de tip în parametrii lor \\other_comp\folder\app.exe. Dacă această resursă de rețea nu este disponibilă, faceți-o disponibilă sau eliminați această opțiune. (Încercați mai întâi să adăugați un parametru șir gol la acest program NoOpenWith.)

Dimensiune mare a fișierului

Eliminați obiectele invizibile:

  1. Do backup fişier
  2. deschidel
  3. Clic ctrl+g
  4. Buton Selectați...
  5. Schimba cu obiecte
  6. Clic O.K
  7. Dacă placa Nu s-au găsit obiecte- treceți la următoarea foaie și încercați din nou
  8. Dacă îngheață, nu fi nervos, așteaptă
  9. După ce obiectele sunt selectate, ștergeți-le cu tasta Șterge pe tastatură
  10. Repetați această acțiune pe toate foile cărții.
  11. Salvați documentul și încercați cum se deschide acum

Tipul fisierului

Dacă fișierul este în format xls(format Office 2003), încercați să resalvați într-un format nou. Meniul Fișier (sigla Office) -> Salvare ca -> Registr de lucru Excel (*.xlsx). După aceea, fișierul va deveni puțin mai mic și se va deschide mai rapid în Office 2007 și 2010.

Suplimente de la terți

  1. Meniul Fişier(Sigla biroului în colțul din stânga sus)
  2. Buton Opțiuni Excel
  3. În partea stângă a ferestrei, selectați suplimente
  4. În partea de jos, din lista derulantă, selectați Suplimente COM
  5. Clic Merge...
  6. Dacă există suplimente în fereastra care se deschide, încercați să le dezactivați unul câte unul și verificați dacă există modificări ale vitezei de pornire

Pavlov Nikolay

În acest articol, aș dori să vă prezint cel mai mult tehnici eficiente lucrează în Microsoft Excel, adunat de mine în ultimii 10 ani de lucru la proiecte și de desfășurare de training-uri pe acest program minunat. Aici nu există o descriere a tehnologiilor super-complexe, dar există trucuri pentru fiecare zi - simple și eficiente, descrise fără „apă” - doar „reziduuri uscate”. Cele mai multe dintre aceste exemple nu vă vor lua mai mult de un minut sau două pentru a stăpâni, dar vă vor economisi mult mai mult.

Salt rapid la foaia dorită

Se întâmplă să lucrezi cu carti excel, constând din un numar mare cearșafuri? Dacă există mai mult de o duzină de ele, atunci fiecare tranziție la următoarea foaie dorită devine în sine o mică problemă. O soluție simplă și elegantă la această problemă este să faceți clic în colțul din stânga jos al ferestrei pe butoanele de defilare a filelor nu cu butonul din stânga, ci cu butonul din dreapta al mouse-ului - cuprinsul cărții va apărea cu lista completa toate foile şi foaia dorită va fi posibil să mergeți într-o singură mișcare:

Acest lucru este mult mai rapid decât derularea filelor de foi cu aceleași butoane în căutarea ceea ce aveți nevoie.


Copiați fără deteriorare la formatare

De câte sute (mii?) de ori am văzut această imagine, stând în spatele ascultătorilor mei în timpul antrenamentelor: utilizatorul introduce formula în prima celulă și apoi o „întinde” pe toată coloana, rupând formatarea rândurilor de mai jos, deoarece această metodă copiază nu numai formula, ci și formatul celulei. În consecință, în continuare este necesar să se corecteze manual daunele. O secundă pentru copiere și apoi 30 - pentru repararea designului stricat de copiere.

Începând cu Excel 2002, există o soluție la această problemă - simplă și elegantă. Imediat după copierea (tragerea) formulei în întreaga coloană, trebuie să utilizați eticheta inteligentă - o pictogramă mică care apare temporar în colțul din dreapta jos al intervalului. Făcând clic pe el, va apărea o listă Opțiuni copiere, unde și puteți selecta Copiați numai valori​​​(Umpleți fără formatare). În acest caz, formulele sunt copiate, dar formatarea nu este:


Copiați numai celule vizibile

Dacă lucrezi pentru Microsoft Excel mai mult săptămâni, ar fi trebuit să te confrunți deja problema asemanatoare: în unele cazuri, la copierea-lipirea celulelor, sunt inserate mai multe celule decât au fost copiate la prima vedere. Acest lucru se poate întâmpla dacă intervalul copiat include rânduri/coloane ascunse, grupări, subtotaluri sau filtrare. Să luăm ca exemplu unul dintre aceste cazuri:

În acest tabel, subtotalurile sunt calculate și rândurile sunt grupate în funcție de oraș - acest lucru este ușor de înțeles prin butoanele plus-minus din stânga tabelului și prin pauze în numerotarea rândurilor vizibile. Dacă selectați, copiați și inserați datele din acest tabel în mod obişnuit, apoi obținem 24 de linii suplimentare. Vrem să copiem și să lipim doar totalurile!

Puteți rezolva problema selectând cu grijă fiecare rând al totalurilor în timp ce țineți apăsată tasta CTRL - ca pentru selectare intervale necontigue. Dar dacă nu există trei sau cinci astfel de linii, ci câteva sute sau mii? Există un alt mod, mai rapid și mai convenabil:

Selectați intervalul de copiat (în exemplul nostru este A1:C29)

Apăsați tasta F5 de pe tastatură și apoi butonul Special din fereastra care se deschide.
Va apărea o fereastră care permite utilizatorului să selecteze nu totul, ci doar celulele necesare:

În această fereastră, selectați opțiunea Numai celule vizibile (numai celule vizibile) și faceți clic pe OK.

Selecția rezultată poate fi acum copiată și lipită în siguranță. Ca rezultat, vom obține o copie a exact celulelor vizibile și vom introduce doar cele 5 linii de care avem nevoie în loc de cele 29 inutile.

Dacă există suspiciunea că va trebui să faceți o astfel de operație des, atunci este logic să adăugați la panou instrumente Microsoft butonul excel pentru scurtătură o asemenea functie. Acest lucru se poate face prin meniul Instrumente> Personalizare, apoi accesați fila Comenzi, în categoria Editare, găsiți butonul Selectați celulele vizibile și mutați-l cu mouse-ul în bara de instrumente:


Transformarea rândurilor în coloane și invers

O operațiune simplă, dar dacă nu știți cum să o faceți corect, puteți petrece o jumătate de zi trăgând și plasând manual celule individuale:

De fapt, totul este simplu. În acea parte a matematicii superioare care descrie matrice, există conceptul de transpunere - o acțiune care schimbă rândurile și coloanele dintr-o matrice între ele. În Microsoft Excel, acest lucru se face în trei pași: Copiați tabelul

Faceți clic dreapta pe o celulă goală și selectați Lipire specială

În fereastra care se deschide, setați steagul Transpunere (Transpunere) și faceți clic pe OK:


Adăugați rapid date la o diagramă

Imagina situatie simpla: aveți un raport pentru ultima lună cu o diagramă vizuală. Sarcina este să adăugați noi date numerice la grafic deja pentru această lună. Modul clasic de a o rezolva este să deschideți fereastra sursei de date pentru diagramă, unde să adăugați rând nou date prin introducerea numelui și selectând intervalul cu datele necesare. Și adesea acest lucru este mai ușor de spus decât de făcut - totul depinde de complexitatea diagramei.

O altă modalitate - simplă, rapidă și frumoasă - este să selectați celulele cu date noi, să le copiați (CTRL+C) și să lipiți (CTRL+V) direct în diagramă. Excel 2003, spre deosebire de versiunile ulterioare, acceptă chiar și capacitatea de a glisa o gamă selectată de celule de date și de a o plasa direct în diagramă cu mouse-ul!

Dacă doriți să controlați toate nuanțele și subtilitățile, atunci puteți utiliza nu cele obișnuite, dar insert special selectând Editare> Lipire specială din meniu. În acest caz, Microsoft Excel va afișa o casetă de dialog care vă permite să configurați unde și cum exact vor fi adăugate datele noi:

În mod similar, puteți crea cu ușurință o diagramă folosind datele din mese diferite din foi diferite. Pentru aceeași sarcină modul clasic va dura mult mai mult timp și efort.


Umplerea celulelor goale

După exportarea rapoartelor din unele programe în format Excel sau la creare tabele pivot utilizatorii primesc adesea tabele cu celule goale în unele coloane. Aceste omisiuni nu permit cele obișnuite și instrumente la îndemână tip de autofiltru și sortare. Desigur, este nevoie de a completa golurile cu valori din celulele superioare:

Cu siguranță, la o suma mica date, se poate face cu ușurință copiere simplă- prin tragerea manuală a fiecărei celule majuscule din coloana A în jos cu celule goale. Și dacă tabelul are câteva sute sau mii de rânduri și câteva zeci de orașe?

Există o modalitate de a rezolva această problemă rapid și frumos cu o singură formulă:

Selectați toate celulele din coloana goală (adică intervalul A1:A12 în cazul nostru)

Pentru a păstra doar celulele goale în selecție, apăsați tasta F5 și în fereastra de navigare care se deschide, faceți clic pe butonul Selectați. Veți vedea o fereastră care vă permite să alegeți ce celule dorim să evidențiem:

Setați butonul radio la Gol și faceți clic pe OK. Acum doar celulele goale ar trebui să rămână în selecție:

Fără a schimba selecția, de ex. fără a atinge mouse-ul, introduceți formula în prima celulă selectată (A2). Apăsați pe semnul egal și apoi pe săgeata în sus de pe tastatură. Obținem o formulă care se referă la celula anterioară:

Pentru a introduce formula creată dintr-o dată în toate celulele goale selectate, apăsați nu tasta ENTER, ci combinația CTRL + ENTER. Formula va completa toate celulele goale:

Acum rămâne doar să înlocuiți formulele cu valori pentru a fixa rezultatele. Selectați intervalul A1:A12, copiați-l și inserați-l în celulele cu valorile lor folosind Paste Special.


Lista derulantă într-o celulă

Un truc pe care, fără exagerare, ar trebui să-l cunoască toți cei care lucrează în Excel. Utilizarea sa poate îmbunătăți aproape orice masă, indiferent de scopul acesteia. La toate antrenamentele, încerc să le arăt ascultătorilor mei în prima zi.

Ideea este foarte simplă - în toate cazurile în care trebuie să introduceți date dintr-un set, în loc de Introducere manuală la o celulă folosind tastatura pentru a selecta valoarea dorită mouse din lista derulantă:

Selectarea unui produs din lista de prețuri, numele clientului de la baza de clienti, numele complet al salariatului din lista de personal etc. Există multe utilizări pentru această caracteristică.

Pentru a crea o listă derulantă într-o celulă:

Selectați celulele în care doriți să creați o listă derulantă.

Dacă aveți Excel 2003 sau mai vechi, selectați Date> Validare din meniu. Dacă aveți Excel 2007/2010, atunci accesați fila Date și faceți clic pe butonul Validare date.

În fereastra care se deschide, selectați opțiunea Listă din lista derulantă.

În câmpul Sursă, trebuie să specificați valorile care ar trebui să fie în listă. Iată opțiunile posibile:

Introduceți opțiunile de text în acest câmp, separate prin punct și virgulă

Dacă gama de celule cu valorile initiale situat pe foaia curentă - doar selectați-o cu mouse-ul.

Dacă se află pe o altă foaie a acestei cărți, atunci va trebui să dea un nume în avans (selectați celule, apăsați CTRL + F3, introduceți numele intervalului fără spații), apoi scrieți acest nume în câmp

  • Serghei Savenkov

    un fel de recenzie „rare”... parcă s-ar grăbi undeva