VBA mini tool

MS Excel oferta nenumarate suprize si resurse atunci cand vine vorba de eficacitate si eficienta.

Si pentru cineva care lucreaza foarte mult cu MS Excel, are parte zilnic de provocari, si sigur si-a pus macar o data problema cu ar putea face unele lucruri mai eficient si intr-un mod cat mai simplu.

Va propun un scurt exemplu dintr-o sarcina de care m-am lovit zilele trecute.

Se da o lista de specialitati medicale ca in imaginea de mai jos:

Scopul este sa creem o lista de genul celei de mai jos care sa contina numele acestor specialitati:

;Medicina de familia;,;Anatomie patologica;,;Homeopatie;

Sigur ca se pot gasi solutii foarte simple daca vrem sa creem aceasta lista formata din doua, trei specialitati. Dar cum procedezi daca trebuie sa creezi o lista formata din 15 specialitati si trebuie sa creezi mai multe astfel de liste, fiecare cu o insiruire unica de specialitati ?

Sigur ca asta se poate face manual, dar va propun in aceasta lectie o cale cu mult mai eficienta, folosirea unui macro ce lanseaza un script VBA.
Poate ca pare foarte complicat la prima vedere, dar hai sa vedem pas cu pas:

  1. Din exemplul dat, vedem ca exista un anumit pattern, si ar trebui ca lista mea cu numele specialitatilor sa fie de fapt de forma:


2. Pentru a redenumi fiecare specialitate, in acel format putem folosi o formula de genul:

Obtinem astfel o lista cu denumirile specialitatilor in formatul care ne este necesar:

Mai ramane sa vedem cum putem pune una langa alta numele acestor specialitati, separate prin virgula, intr-un mod cat mai simplu si automatizat

Pentru asta va propun scriptul VBA de mai jos

Sub ChangeRange()
'Updateby20140310
Dim rng As Range
Dim InputRng As Range, OutRng As Range
xTitleId = "KutoolsforExcel"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
outStr = ""
For Each rng In InputRng
    If outStr = "" Then
        outStr = rng.Value
    Else
        outStr = outStr & "," & rng.Value
    End If
Next
OutRng.Value = outStr
End Sub '

Va intrebati sigur, ce trebuie sa faceti cu acest script:

  • Il copiati ca atare
  • In meniul Developer apasati butonul Visual Vasic

In partea stanga a ferestrei care se deschide faceti click dreapta pe Modules – Insert Module 

In fereastra din partea stanga inserati codul copiat anterior, dupa care inchideti aceasta fereastra.

Acum trebuie sa lansati in executie acest script pentru a face in mod automat sarcina descrisa mai sus.

Pentru asta ar fi util sa inseram un buton pe care sa apasam pentru a lansa scriptul in executie.

Click dreapta pe acest buton si alegeti Assign Macro

Alegeti numele macro-ului pe care vreti sa-l asociati acestui buton si totul este gata !


Aceasta a fost scurta lectie despre cum putem folosi un mini script VBA pentru a automatiza o sarcina care altfel mi-ar fi luat ore in sir sa o fac.

Si daca va intrebati cum scrieti efectiv un script VBA, fiindca nu intelegeti acest limbaj - nu va faceti griji. Este important sa intelegeti cateva principii de baza, cum ar fi acesta aici de fata, cum si unde inserati un astfel de cod, pentru ca de gasit, cautati pe internet si gasiti coduri VBA pentru orice, depinde poate doar de cat de insistenti si abili sunteti in a cauta ceea ce va trebuie.

Iata mai jos mai jos cat de simpla este toata operatiunea:

Multa Bafta !


 © Success Consultancy 2013