Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Informatii despre cum se utilizeaza Microsoft Excel 2003. Calcule, Formule, Functii, Tabele pivot, Analiza datelor, etc
Închis
cristacul
Mesaje: 4
Membru din: Joi Apr 29, 2010 12:23 pm

Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Mesaj de cristacul » Joi Apr 29, 2010 1:28 pm

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
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

IPP
Moderator
Moderator
Mesaje: 4196
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Mesaj de IPP » Vin Apr 30, 2010 7:34 pm

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.

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
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
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

cristacul
Mesaje: 4
Membru din: Joi Apr 29, 2010 12:23 pm

Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Mesaj de cristacul » Lun Mai 03, 2010 12:27 pm

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
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Dr.Windows
Moderator
Moderator
Mesaje: 4570
Membru din: Vin Iul 31, 2009 7:32 am

Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Mesaj de Dr.Windows » Lun Mai 03, 2010 2:53 pm

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:

Cod: Selectaţi tot

BI0438A000199;;;;;;;
BI0438A000337;BI0438A000338;BI0438A000339;BI0438A000340;;;;
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:

Cod: Selectaţi tot

=VALUE(MID(C2;LEN(C2)-5;6))-VALUE(MID(B2;LEN(B2)-5;6))+1
apoi generand seriile in coloanele urmatoare (in exemplul atasat am "extins formula" doar pe zona galbena):

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.

cristacul
Mesaje: 4
Membru din: Joi Apr 29, 2010 12:23 pm

Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Mesaj de cristacul » Mar Mai 04, 2010 10:26 am

Multumesc
Da corect, am renuntat la ideea cu formule, fiind peste 100 de mii

IPP
Moderator
Moderator
Mesaje: 4196
Membru din: Mie Iul 29, 2009 7:26 am
Localitate: Cluj-Napoca

Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Mesaj de IPP » Mar Mai 04, 2010 6:29 pm

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
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

cristacul
Mesaje: 4
Membru din: Joi Apr 29, 2010 12:23 pm

Re: Cum pot extrage seriile dintr-un interval definit de 2 cel ?

Mesaj de cristacul » Mie Mai 05, 2010 9:32 pm

Pare sa mearga, luate prin sondaj seriile sunt ok.
Multumesc mult de ajutor

Închis

Înapoi la “Intrebari despre Excel 2003”