Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 1
  • 349

Witajcie.

Mam pytanie związane z wyszukiwaniem ceny w tabelach.

Zaczynając od początku.

Mam cennik dostawcy X w pliku pdf. Udało mi się przekonwertować ten plik do xls. Przy konwersji zrobiło mi się ok. 250 arkuszy cennika w formie tabelarycznej. Jeden arkusz odpowiada jednej stronie cennika. Na części arkuszy są interesujące mnie tabele, z których potrzebuję dane, a na części zdjęcia i opisy produktów.

Wklejam przykładowe zdjęcie tabeli:

 

 

W systemie, w którym pracuję mam podane numery katalogowe produktów, które są jedyną wspólną daną z cennikiem. Potrzebuję w jakiś sposób z Excela, z cennika wyciągnąć ceny poszczególnych numerów katalogowych, w sposób zautomatyzowany. Czy tak się da, czy trzeba ręcznie przerabiać cennik, na cennik w formie listy nr kat i cena, a później przy pomocy funkcji wyszukaj pionowo szukać cen?

Czy można napisać jakąś formułę lub makro, które przeszukiwałoby wszystkie arkusze, znajdowało nr katalogowy (czyli ciąg 8 znaków) i zwracało pierwszą cenę, na którą napotkałoby idąc ku górze (ciąg 6 znaków licząc z przecinkiem)?

Listę numerów katalogowych, dla których szukam cen mam w formie listy w kolumnie. Przy zwykłych cennikach spisywała się dobrze funkcja wyszukaj.pionowo.

Teoria piękna, ale praktyka słaba.

Proszę o pomoc. Patent potrzebny do szybkiej aktualizacji cen w systemie, żeby nie wklepywać kilkaset pozycji ręcznie.

Łukasz_Topola
  • Zapytał
  • @ Łukasz_Topola | 08.09.2015
    • 2
    • 1
    • 0

Odpowiedzi (2)

  • 0

Właśnie takie skomplikowane tematy realizujemy na kursie EX04. Zapraszamy serdecznie.

  • Odpowiedział
  • @ | 14.09.2015
  • TRENER ALTKOM AKADEMII
  • 0

Nie rozwiążę problemu ale zebrałem myśli:

Pseudokod:

Główny program:

For each arkusz in skoroszyt

   Kod wyszukiwania

Next

 

===============

Sub Kod wyszukiwania

For each serialNumber z listySerialNumbers

      Dim cena

 

        Znajdź serial number w arkusza, zwróć adres komórki
             For rząd w adresie komórki  = rząd -1 (idziemy w górę)
                 Sprawdź czy ma format ceny x,xxx ' tu chyba się przyda jakaś funkcja regex.
                 Jeśli ma format ceny to cena równa się wartość komórki.

                 Call  Dopisz do końca tabeli

                 Exit sub 

 

            Next

================ 

Sub Dopisz do końca tabeli w arkuszu wynikowym.

 

============================================

W moim zestawie narzędziowym jest cegiełka do doklejania do końca arkusza:

Sub PasteEndOfTable()

 Dim NextRow As Range
    
 
     Sheets("Output2").Range("A1").Resize(Cells.Find(What:="*", SearchOrder:=xlRows, _
      SearchDirection:=xlPrevious, LookIn:=xlValues).Row, _
      Cells.Find(What:="*", SearchOrder:=xlByColumns, _
      SearchDirection:=xlPrevious, LookIn:=xlValues).Column).Copy
    
    
    
    With Sheets("Output3")
        .Activate
        Set NextRow = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
    End With
    NextRow.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Transpose:=False
    
    Application.CutCopyMode = False
    'Cells(1, 1).Select

End Sub

Jest też cegiełka do wyszukiwania wartości w arkuszu, którą należy przerobić, by zwracała adres komórki i nie tej obok, tylko jednej wyżej, a następnie odejmować rzędy w pętli i szukać.

Public Function ValueNext2Descr(description As String)  
      
    Application.Volatile  
    
    ValueNext2Descr = ActiveSheet.Cells.Find(What:=description, _  
    After:=Cells(1, 1), LookIn:=xlValues, _  
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _  
    MatchCase:=False, SearchFormat:=False).Offset(0, 1).Value  
  
End Function  

Wartości, które odpowiadają jakiemuś formatowi, może pomogłyby funkcje wykorzystujące Regex? google vba Regex:

http://stackoverflow.com/questions/8146485/returning-a-regex-match-in-vba-excel

Jacek_Kotowski
  • Odpowiedział
  • @ Jacek_Kotowski | 25.09.2015
    • lider
    • laureat
    • ekspert
    • 60
    • 54
    • 94