Un tip cu skillsetul si ocupatiunile mele probabil ca nu s-ar recomanda ca un excelar. Orice tip care poate programa in ceva limbaje ar zice ca excelul e de cacat ca pentru analiza/prelucrarea de date ar trebui sa folosim alte tooluri mai bune, macar access, MySQL, daca nu matlabă si alte figuri .
Din experienta mea, proramatorii urasc excelul si powerpointu’.
Eu sunt un excelar hardcore. Pentru ca daca e vorba de analiza de date , corectie and sheet excelul e cel mai rapid, cel mai flexibil, cel mai vizual si sa imi bag pula in de ce nu exista alte tool-uri la fel de bune . Exista, fac parte din pachete de softuri pentru Business Intelligence sau Business Warehouse. Sau chestii gen Dataiku.
Weekendul asta am inregistrat recordul de rulare pentru un excel 26 de ore. Da, mi-am dat seama ca nu rulez optim niste scripturi de calcul de distante Levenshtein pe niste dictionare care duceau la calculul a vreo 350 milioane de distante pentru 70 000 de cuvinte, chestie nu chiar necesara. Pe care am optiizat-o cand s-a terminat scriptul si mi-am dat seama ca am uitat sa fac un cacat de conversie catre upper si toate concluziile mele erau oarecum gresite, cu circa 50% .
Gen – asta e distanta, copiata de pe ceva sourceforge, nu mai stiu exact.
Iar asta-i contextul .
[code language=”vb”]
Function Levenshtein(ByVal string1 As String, ByVal string2 As String) As Long
Dim i As Long, j As Long
Dim string1_length As Long
Dim string2_length As Long
Dim distance() As Long
string1_length = Len(string1)
string2_length = Len(string2)
ReDim distance(string1_length, string2_length)
For i = 0 To string1_length
distance(i, 0) = i
Next
For j = 0 To string2_length
distance(0, j) = j
Next
For i = 1 To string1_length
For j = 1 To string2_length
If Asc(Mid$(string1, i, 1)) = Asc(Mid$(string2, j, 1)) Then
distance(i, j) = distance(i – 1, j – 1)
Else
distance(i, j) = Application.WorksheetFunction.Min _
(distance(i – 1, j) + 1, _
distance(i, j – 1) + 1, _
distance(i – 1, j – 1) + 1)
End If
Next
Next
Levenshtein = distance(string1_length, string2_length)
End Function
[/code]
[code language=”vb”]
Function BestMatch(region As String) As String
Dim wb As Workbook
Dim sstart As String
Dim send As String
Set wb = ThisWorkbook
‘define your sheets
Dim ws_data As Worksheet
Dim ws_iso As Worksheet
Dim ws_found As Worksheet
Dim vfound As Range
Dim vsearch As Range
Dim vdist As Range
Set ws_data = wb.Sheets(“DATA”)
Set ws_iso = wb.Sheets(“ISO”)
Set ws_found = wb.Sheets(“ISOFOUND”)
sstart = “”
Dim lastRow As Long
BestMatch = “Not Found”
lastRow = ws_iso.Range(“A” & Rows.Count).End(xlUp).Row + 1
lastFound = ws_found.Range(“A” & Rows.Count).End(xlUp).Row + 1
Dim isodict(1 To 32000) As String
Dim isosearch(1 To 70000) As String
Dim isofound(1 To 70000) As String
Dim isofounddist(1 To 70000) As String
Dim xfound As Boolean
For i = 1 To lastRow
n isodict(i) = ws_iso.Cells(i, 4)
Next i
For j = 1 To lastFound
isosearch(j) = ws_found.Cells(j, 1)
isofound(j) = ws_found.Cells(j, 2)
isofounddist(j) = ws_found.Cells(j, 3)
Next j
mindist = 10000
For i = 1 To lastRow
‘meaninful test check if we already distanced that value
For j = 1 To lastFound
If UCase(region) = UCase(isosearch(j)) Then
BestMatch = isofound(j)
j = lastFound
i = lastRow
‘exit this loop and the above one
xfound = True
End If
Next j
‘ means we don’t have an already mapped best match
‘ looping through dictionary
If xfound = False Then
testword = isodict(i)
distance = Levenshtein(UCase(region), UCase(testword))
If distance = 0 Then
BestMatch = testword
i = lastRow
Else
If distance < mindist Then
BestMatch = testword
mindist = distance
End If
End If
End If
Next i
' write the value of best match in the found dictionary
End Function
[/code]
Tre’ sa ma modernizez.
Si codul asta apare asa pentru ca sa imi bag pula in “Blocks”
Ontopic: ceva nu merge la code highlighter, nu se vede bine pe site.
Offtopic: tu ai avut copil mic cand ai lucrat de acasa? Mic gen bebe plangacios cu colici. Nu stiu cum sa mai ma concentrez la munca… si clientii nu inteleg 100% ca eu is in perioada asta si asteapta acelasi randament frate… greu!
1. Stiu. Dar l-am scris totusi asa in ideea ca poate repar highlighterul . Probabil ca nu ca nu am timp. 2. Nota: Copiii mei nu prea au avut colici. Au fost alaptati la san si in general li s-au tratat colicii si nu i-am auzit urland prea tare pe tema. Nu ca ar conta, urla oricum pe alte teme. Dupa ce se termina colicii incep ifosele si nevoia de atentie. La primul copil da, am lucrat de acasa, insa noaptea si in weekend. Ziua lucram de la birou, ca asa cerea jobul. . La al doilea am lucrat pana… Read more »
Da, stiu, ca celalalt copil are 2 ani jumate. Au trecut colicii, a inceput joaca si sa vorbeasca :)). In vara vrem sa ne mutam la casa, atunci poate o sa fie mai usor ca am o camera numai pentru lucru. Si acum la bloc cu 3 camere am una doar pentru lucru, dar e mai diferit, poate oricand sa vina copilul aici si se aude si cand te pisi la baie :)). Abia astept sa vad atunci cum o fi.
@filip: izoleaza si tu fonic camera daca tot te muti. Nici macar nu glumesc, stiu pe cineva de a facut asta si e in al 9-lea cer. Nici nu costa imens, insa iti ia din spatiu, asta da.
@Catalin – încearcă și PowerBi – e free pt desktop.
https://powerbi.microsoft.com/en-us/desktop/
@Filip – aceeași situație, așa că mi-am închiriat un birou mic și mă duc acolo când e nevoie. Asta mai aduce un avantaj – nu mă mai bate nevasta la cap in timpul zilei – sunt la muncă și aia e.
Am sa il incerc si pe acela
Singura problema pe care o vad la Excel e VBA-aul, care e o mizerie odioasa din alt mileniu. Daca ar pune un plug-in nativ de Python, cred ca i-as da si limbi in pizda.Dar cu acelasi usability ca VBA-ul, nu prin xll sau alte cacaturi.
Dacă te gândești cui i se adresează excelul VBA r foarte bun. Mie îmi place. Scripting destul de simplu. Că se învârte codul prost, aia e altă problemă .
Ma indoiesc ca VBA-ul e mai usor de invatat decat Python, chiar si pentru secretare sau contopisti. Gen Sub, DIM, Var si tot boilerplate-ul aferent.
Nu stiu ce sa zic. Poate tine de ceva bias personal Eu rced ca am scris mai mult cod pyton decat VBA ( ca numar de linii) si nu as putea sa zic ca rup pitonul in doua. De fapt ma descurc cu google si nu stiu cele mai noi trucuri si concepte de folosire a limbajului astuia. VBA in schimb am scris mai putine linii cred, dar mai de multe ori si mi se pare foarte usor – no-brainer aproape. Eu nu prea folosesc Dim si Var decat cand e nevoie. In rest declar implicit, scriu codul destul de… Read more »
Acum nu stiu daca ati pus codul respectiv doar partial sau nu am vazut eu bine (caz in care imi cer scuze) dar in mod normal se mai pun niste instructiuni care incadreaza un cod si care au impact uneori major in viteza de executie a unui macro. ex. Application.Calculation = xlCalculationManual (si comutat pe Application.Calculation = xlCalculationAutomatic la sfarsitul codului) Application.ScreenUpdating = False (si comutat pe True la sfarsitul codului) pana si blocarea provizorie a afisarii page breaks poate avea impact asupra vitezei de rulare a codului. (ActiveSheet.DisplayPageBreaks = False, comutat apoi pe True) O incetinire sensibila a rularii… Read more »
Da, am pus Screen updating pe off si am castigat intradevar ceva timp, 30-50% la seturi de date mici, dar la tot fisierul nu prea conteaza cand dureaza peste noapte calculul.
Calculul l-am setat de tot pe manual din optiuni, ca ma lua capul cand faceam o modificare si se apuca iarasi de rontait.
La display page breaks n-am umblat, e oricum off, ca nu printez si nu imi pasa.
Eu recunosc ca desi aveti un cod aerisit in general am nevoie sa vad concret si ce se intampla (ce si cum se scrie in foaie). Insa, daca aveti situatii in care ceva s-a gasit si implicit nu mai e nevoie sa se faca o testare pana la capat, nu am observat o instructiune clara de Exit For (ci doar un comentariu de exit) Apoi, daca chiar aveti o instructiune de genul: BestMatch = testword mindist = distance va intreb daca intr-adevar functioneaza. cum ar trebui. La un moment dat cand am incercat intr-un proiect propriu ceva asemanator am constat… Read more »
Nu folosesc exit for . j = lastFound i = lastRow De functionat functioneaza, oricum nu mai conteaza aveam nevoie de o singura rulare finalizata, daca dura juma de saptamana era ok, ca faceam altceva intre timp. Functioneaza pentru ca initializez distanta minima cu ceva oribil de mare ( oricum am ignorat orice rezultate cu distanta > 2 ca s-au dovedit irelevante, chit ca aveau forma apropiata ) iar in “for”-ul ala este o secventa Else If distance < mindist Then adica calculez toate distantele si initializez rezultatul doar atunci cand dau peste ceva cu distanta mai mica decat cea… Read more »
Ai setat numarul de core-uri pe care sa le foloseasca din options? Ca asa si io ma uitam cum statea global procul la 25% pana i-am zis sa foloseasca toate 4 nucleele.
Cred ca da.
I-am crescut si prioritatea din Task manager, ca sa ajung la 30%. Altfel 18-20.
Daca aveti versiunea de office pe 32 de bits, nu prea aveti ce face nimic in plus pentru ca “by design” Excel nu va putea folosi mai mult de 4 Gb de memorie RAM. Si de fapt cei 4 sunt rezervati pentru intregul pachet Office. Adica, daca de exemplu mai aveti deschis Outlook, Word etc. si aceste aplicatii iau tot din aceeasi 4 Gb chiar daca dvs. aveti instalati (mult) mai multi.
In screenshot-ul din articol se vede clar ca folosea vreo 300 de MB, intregul pachet office ocupand in momentul ala putin sub 1GB ( aia nu se vede, dar m-am uitat eu) . Deci nu prea conteaza.
De fapt 2Gb “Although improvements in Office 2013/2016 did not significantly affect system requirements, Office 2013/2016 does use more available system resources than Office 2010 did. The limit of virtual address space for 32-bit editions of Windows-based applications is 2 gigabytes (GB). For Excel, this space is shared by the Excel application itself together with any add-ins that run in the same process. The size of the worksheet itself also affects the usage of virtual address space. Because Excel loads the worksheet into addressable memory, some worksheets that have a file size of less than 2 GB may still require… Read more »
De fapt sunt 2GB per file nu per tot pachetul :
link
Adica poti avea chiar si 2 excele de cate 2GB, daca pornesti doua procese Excel.exe – este posibil.
Si nu conteaza, ca am Office 64-bit, dar spuneam ca oricum ar fi eram sub limita aia.