Rešenje sa VBA je jednostavno - dve petlje (po redovima i kolonama izvornih podataka) i jedan brojač - jedno rešenje je dao Ivek. Pretpostavljam da nisi imao iskustva sa VBA jer bi i sam verovatno došao do toga, pa ajde da probamo da rešimo bez programiranja.
Pošto u izvornim podacima svakom redu ima 10 kolona to umnogome olakšava posao jer možemo naći jednoznačno preslikavanje iz izvornih u ciljne podatke, bez vođenja računa o "istoriji". (U VBA ovo nije problem jer podatke popunjavamo redom, pa lako mogu da se preskoče prazna polja)
Kad malo analiziramo problem potrebno je od matrice M(r,c) gde je r broj redova i c broj kolona formirati niz A(n) gde je n broj elemenata niza r * c. Za neki opšti k-ti element niza možemo tačno da odredimo odgovarajuću vrednost iz matrice M
A(k) odgovara
red i = (k-1) div 10 + 1, gde je div oznaka za celobrojno deljenje i
kolona j = (k-1) mod 10 + 1 gde je mod oznaka za ostatak pri deljenju sa 10
Npr
A(1) = M( (1-1) div 10 +1, (1-1) mod 10 +1) = M(0+1, 0+1) = M(1,1)
...
A(29) = M( (29-1) div 10 +1, (29-1) mod 10 +1) = M (2+1, 8+1) = M (3, 9)
A(30) = M( (30-1) div 10 +1, (30-1) mod 10 +1) = M(2+1, 9+1) = M(3,10)
A(31) = M( (31-1) div 10 +1, (31-1) mod 10 +1) = M(3+1, 0+1) = M(4,1)
...
Sad možemo da pređemo na Excel.
1/ Na novom listu u koloni A napiši formulu
Code:
="R"& INT((ROW() -1) /10 )+1 & "C" & MOD(ROW()-1;10) +1
Kopiraj ovu formulu u sve ćelije kolone A do 500000
Rezultat treba da bude broj reda i kolone iz originalne matrice u obliku
nrp u A29 - R3C9, A30 - R3C10, A31 - R4C1
2/ U koloni pored (B), sada ćemo na osnovu dobijenih adresa i funkcije INDIRECT formirati željeni niz
Code:
=INDIRECT("Sheet1!"&A1; FALSE)
Kopiraj ovu formulu u sve ćelije kolone B do 500000.
Sve je ovo moguće i pomoću jedne (kombinovane) formule, ali je ovako lakše za praćenje.
3/ Kopiraj celu kolonu B i paste u prazan txt faj
Problem koji je ostao je prazan red nakon svakog desetog reda u txt fajlu. Ovo je najlakše rešiti tako što celu jedanaestu kolonu popuniš sa nekom kombinacijom znakova koja se ne može naći drugde npr /**/. U prethodnim formulama svuda zameniš 10 sa 11. Na kraju u txt fajlu, nakon paste, uradiš replace tog niza /**/ sa praznim stringom.
Nije to loše Rembrante, samo što ne bi dodao još malo boje?