Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Buna tuturor
Am urmatoarea problema si nu am reusit sa-i dau de cap. Am un excel cu 2 coloane, prima coloana o reprezinta seria de start si a 2-a cea de final.
Este un excel cu serial numbere. Pentru un order de o bucata, seria este aceeasi in ambele coloane, dar pentru o comanda de mai multe bucati, voi avea prima si ultima serie.
Eu practic trebuie sa import intr-o aplicatie noua, un CSV cu serii individuale, si nu stiu cum sa extrag din excelul primit, seriile individuale scrise in intervale.
Chiar daca seriile contin si litere, acestea se afla la inceput si incrementarea se face numai numeric.
Tot ce am reusit pana acum, a fost sa aplic niste formule din care sa-mi rezulte o a 3-a coloana cu dimensiunea intervalelor, dar m-am blocat la incrementare automata de X ori.
Am atasat si un mic exemplu. Din produsul A vine o singura bucata, iar din produsul B 4 bucati. Cum ajung la un fisier cu cele 5 serii individuale?
Multumesc mult de ajutor
Un weekend insorit tuturor
Cristi
Am urmatoarea problema si nu am reusit sa-i dau de cap. Am un excel cu 2 coloane, prima coloana o reprezinta seria de start si a 2-a cea de final.
Este un excel cu serial numbere. Pentru un order de o bucata, seria este aceeasi in ambele coloane, dar pentru o comanda de mai multe bucati, voi avea prima si ultima serie.
Eu practic trebuie sa import intr-o aplicatie noua, un CSV cu serii individuale, si nu stiu cum sa extrag din excelul primit, seriile individuale scrise in intervale.
Chiar daca seriile contin si litere, acestea se afla la inceput si incrementarea se face numai numeric.
Tot ce am reusit pana acum, a fost sa aplic niste formule din care sa-mi rezulte o a 3-a coloana cu dimensiunea intervalelor, dar m-am blocat la incrementare automata de X ori.
Am atasat si un mic exemplu. Din produsul A vine o singura bucata, iar din produsul B 4 bucati. Cum ajung la un fisier cu cele 5 serii individuale?
Multumesc mult de ajutor
Un weekend insorit tuturor
Cristi
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Buna seara
In fisierul atasat aveti o incercare de rezolvare, probabil partiala, a problemei cu ajutorul VBA. M-am folosit exclusiv de “tiparul” folosit de dvs. in fisierul exemplu.
Daca o veti gasi satisfacatoare se poate adauga ulterior optiunea de salvare a rezultatului intr-un alt fisier. Pana atunci, in aceasta versiune:
Obiectivul: generarea unei liste cu produse fiecare avand un serial number propriu pornind de la Codul de inceput (aflat in coloana B) si Codul final al intervalului (aflat in coloana C)
Premise: - informatia utila se afla stocata in mod compact (fara randuri si sau coloane libere) pe coloanele A:C, randul 1 fiind cap de lista ce nu trebuie sters.
- Serial Number poate fi format dintr-un numar variabil de caractere alfanumerice insa ultimele 6 caractere trebuie sa fie intotdeauna cifrele relevante.
- Coloanele G:H raman rezervate afisarii rezultatului
Ce am incercat sa fac:
Fiecare produs va fi pus direct in lista insotit de seria aflata in dreptul sau pe coloana B
La rularea macro se face o diferenta intre partea numerica aflata pe coloana C (formata din ultimele 6 caractere) si cea de pe coloana B (formata de asemenea din ultimele 6 caractere). Rezultatul va determina numarul de inserari consecutive a denumirii produsului respectiv, daca e cazul. Completarea crescatoare a seriilor se va face apoi cu ajutorul AutoFill
Mai jos aveti codul folosit.
Cateva Observatii privind probleme potential generatoare de erori.
-Existenta mai multe produse ce necesita serii consecutive numeroase. Ar fi bine sa tineti cont ca Excelul 2003 are doar 65536 de randuri.
-Daca Seriile respective NU respecta acelasi format in ceea ce priveste ultimele 6 caractere (care trebuie sa fie cifre si mai mult, numarul de pe coloana C trebuie sa fie mai mare sau egal cu cel de pe coloana B)
A se testa “temeinic” inainte de a intra intr-o eventuala “productie”
IP
In fisierul atasat aveti o incercare de rezolvare, probabil partiala, a problemei cu ajutorul VBA. M-am folosit exclusiv de “tiparul” folosit de dvs. in fisierul exemplu.
Daca o veti gasi satisfacatoare se poate adauga ulterior optiunea de salvare a rezultatului intr-un alt fisier. Pana atunci, in aceasta versiune:
Obiectivul: generarea unei liste cu produse fiecare avand un serial number propriu pornind de la Codul de inceput (aflat in coloana B) si Codul final al intervalului (aflat in coloana C)
Premise: - informatia utila se afla stocata in mod compact (fara randuri si sau coloane libere) pe coloanele A:C, randul 1 fiind cap de lista ce nu trebuie sters.
- Serial Number poate fi format dintr-un numar variabil de caractere alfanumerice insa ultimele 6 caractere trebuie sa fie intotdeauna cifrele relevante.
- Coloanele G:H raman rezervate afisarii rezultatului
Ce am incercat sa fac:
Fiecare produs va fi pus direct in lista insotit de seria aflata in dreptul sau pe coloana B
La rularea macro se face o diferenta intre partea numerica aflata pe coloana C (formata din ultimele 6 caractere) si cea de pe coloana B (formata de asemenea din ultimele 6 caractere). Rezultatul va determina numarul de inserari consecutive a denumirii produsului respectiv, daca e cazul. Completarea crescatoare a seriilor se va face apoi cu ajutorul AutoFill
Mai jos aveti codul folosit.
Cod: Selectaţi tot
Sub GenSerialNo()
Application.ScreenUpdating = False
Dim cel As Range
Sheets("Sheet1").Select
Range("G2:H65536").ClearContents
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select 'se stabileste domeniul de interes
For Each cel In Selection
Range("G65536").End(xlUp).Offset(1, 0).Value = cel.Value 'scrie primul produs
Range("H65536").End(xlUp).Offset(1, 0).Value = cel.Offset(0, 1).Value 'scrie prima serie
NrRepet = Right(cel.Offset(0, 2), 6) * 1 - Right(cel.Offset(0, 1), 6) * 1
'stabileste nr de repetari a secventei de mai jos in fct de diferenta dintre
'partea numerica (ultimele 6 cifre din dreapta codului)
For x = 1 To NrRepet
Range("G65536").End(xlUp).Offset(1, 0) = cel.Value
Next x
Dim lastrow As Long
lastrow = Range("G65536").End(xlUp).Row
On Error Resume Next
Range("H65536").End(xlUp).Select
ActiveCell.AutoFill Destination:=Range(ActiveCell, Cells(lastrow, ActiveCell.Column))
Next cel
Range("A1").Select
Application.ScreenUpdating = True
End Sub
-Existenta mai multe produse ce necesita serii consecutive numeroase. Ar fi bine sa tineti cont ca Excelul 2003 are doar 65536 de randuri.
-Daca Seriile respective NU respecta acelasi format in ceea ce priveste ultimele 6 caractere (care trebuie sa fie cifre si mai mult, numarul de pe coloana C trebuie sa fie mai mare sau egal cu cel de pe coloana B)
A se testa “temeinic” inainte de a intra intr-o eventuala “productie”
IP
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Buna ziua
Multumesc foarte mult pentru ajutor. La o prima testare este excelent.
Corect, ultimile 6 caractere sunt cifre (sau mai bine zis cel putin ultimile 6), si se respecta regula ca a 2-a serie sa fie mai mare sau egala cu prima. O sa incerc la colegul meu pe un excel 2010, pentru ca depaseste.
In schimb am observat ca exista serii pe care nu le incrementeaza. Am atasat exemplu. Observ ca este valabil pentru seriile care au mai mult de 6 cifre de la coada. Se poate modifica codul, ca sa tina cont doar de ultimile 6 cifre indiferent de compozitia primelor 7 caractere?
Multumesc inca o data
O saptamana excelenta
Multumesc foarte mult pentru ajutor. La o prima testare este excelent.
Corect, ultimile 6 caractere sunt cifre (sau mai bine zis cel putin ultimile 6), si se respecta regula ca a 2-a serie sa fie mai mare sau egala cu prima. O sa incerc la colegul meu pe un excel 2010, pentru ca depaseste.
In schimb am observat ca exista serii pe care nu le incrementeaza. Am atasat exemplu. Observ ca este valabil pentru seriile care au mai mult de 6 cifre de la coada. Se poate modifica codul, ca sa tina cont doar de ultimile 6 cifre indiferent de compozitia primelor 7 caractere?
Multumesc inca o data
O saptamana excelenta
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
-
- Moderator
- Mesaje: 4570
- Membru din: Vin Iul 31, 2009 7:32 am
Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Ar mai exista o varianta, cu formule, desi daca spui ca sunt peste 65500 nu cred ca este utila deoarece foaia ta va fi PLINA de formule ceea ce o va ingreuna destul de mult, in plus datele exportate vor arata ceva de genul:
si asta numai daca vei scoate seriile intr-o foaie separata...
Acele ;;; de la sfarsit s-ar putea sa si incurce importul in cealalta aplicatie daca aceea nu "stie" sa ia doar valorile existente nu si pe cela "null"...
Dar, pentru cine are mai putine serii/randuri de completat, s-ar putea sa fie totusi o solutie.
Si asta plecata tot de la ideea ta - mai intai detectand numarul de "serii" pe o coloana separata cu formula:
apoi generand seriile in coloanele urmatoare (in exemplul atasat am "extins formula" doar pe zona galbena):
Cod: Selectaţi tot
BI0438A000199;;;;;;;
BI0438A000337;BI0438A000338;BI0438A000339;BI0438A000340;;;;
Acele ;;; de la sfarsit s-ar putea sa si incurce importul in cealalta aplicatie daca aceea nu "stie" sa ia doar valorile existente nu si pe cela "null"...
Dar, pentru cine are mai putine serii/randuri de completat, s-ar putea sa fie totusi o solutie.
Si asta plecata tot de la ideea ta - mai intai detectand numarul de "serii" pe o coloana separata cu formula:
Cod: Selectaţi tot
=VALUE(MID(C2;LEN(C2)-5;6))-VALUE(MID(B2;LEN(B2)-5;6))+1
Cod: Selectaţi tot
=IF(COLUMN(E2)-COLUMN($D2)<=$D2;MID($B2;1;LEN($B2)-6)&REPT("0";LEN(VALUE(MID($B2;LEN($B2)-5;6))+1))&VALUE(MID($B2;LEN($B2)-5;6))+(COLUMN(E2)-COLUMN($D2)-1);"")
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Multumesc
Da corect, am renuntat la ideea cu formule, fiind peste 100 de mii
Da corect, am renuntat la ideea cu formule, fiind peste 100 de mii
Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Buna ziua
Se pare ca Excelul are un fel de problema atunci cand are de-a faca cu numere formate din 11-12 cifre, (dupa caz) si chiar daca acestea se afla compact intr-o inregistrare alfanumerica incrementarea cu ajutorul AutoFill nu functioneaza.
In lipsa unei idei mai bune, am facut o varianta (vedeti fisierul atasat) care extrage pe o coloana separata (coloana I) ultimele 6 cifre din primul serial number, face incrementarea cu ajutorul autofill si recompune pe o coloana noua (coloana J) seria completa, sper ca de aceasta data in mod corect.
Am presupus ca intregistrarile au de fiecare data 13 caractere.
Am citit mai sus ca veti avea inregistrari care vor depasi capacitatea unei foi de calcul de Excel 97-2003. Nu folosesc Excel 2007 sau 2010. Daca in urma testelor facute pe Excel 2003 veti ajunge la concluzia ca este in regula pentru dvs., puteti sa mergeti in VBE si sa faceti modificari in cod inlocuind de exemplu referirile la celulele (independent de coloana) 65536 cu cele corespunzatoare ultimelor din Excel 2007 sau la o valoare mai apropiata de realitate.
Datorita modificarilor de mai sus si a numarului de inregistrari ce vor trebui prelucrate durata de executie va fi marita sensibil (de ordinal minutelor, cred).
Evident totul trebuie testat
IP
Se pare ca Excelul are un fel de problema atunci cand are de-a faca cu numere formate din 11-12 cifre, (dupa caz) si chiar daca acestea se afla compact intr-o inregistrare alfanumerica incrementarea cu ajutorul AutoFill nu functioneaza.
In lipsa unei idei mai bune, am facut o varianta (vedeti fisierul atasat) care extrage pe o coloana separata (coloana I) ultimele 6 cifre din primul serial number, face incrementarea cu ajutorul autofill si recompune pe o coloana noua (coloana J) seria completa, sper ca de aceasta data in mod corect.
Am presupus ca intregistrarile au de fiecare data 13 caractere.
Am citit mai sus ca veti avea inregistrari care vor depasi capacitatea unei foi de calcul de Excel 97-2003. Nu folosesc Excel 2007 sau 2010. Daca in urma testelor facute pe Excel 2003 veti ajunge la concluzia ca este in regula pentru dvs., puteti sa mergeti in VBE si sa faceti modificari in cod inlocuind de exemplu referirile la celulele (independent de coloana) 65536 cu cele corespunzatoare ultimelor din Excel 2007 sau la o valoare mai apropiata de realitate.
Datorita modificarilor de mai sus si a numarului de inregistrari ce vor trebui prelucrate durata de executie va fi marita sensibil (de ordinal minutelor, cred).
Evident totul trebuie testat
IP
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.
Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?
Pare sa mearga, luate prin sondaj seriile sunt ok.
Multumesc mult de ajutor
Multumesc mult de ajutor