centrum00Jak wyszukać igłę w stogu siana? A jak znaleźć kilkanaście tysięcy błędnych faktur w „sianie” złożonym z półtora miliona wierszy arkusza kalkulacyjnego? Sprawdziłem, że jedna osoba może odszukać jeden taki błąd w czasie mniej więcej 15 minut. Wystarczy pomnożyć przez te tysiące i otrzymamy…– trzeba siedzieć bez przerwy PÓŁ ROKU, 24 godziny na dobę, przez 7 dni w tygodniu.

Te prawie 200 linijek stworzone i przetestowane w kilka godzin umożliwiają wczytanie niezbędnych danych, automatyczne porównanie i wypisanie na kilka różnych sposobów znalezionych braków. Pół roku pracy zamienia się na kilkadziesiąt minut pracy typowego komputera.

mgr inż. Wacław Libront


 

Sub Porównaj()
  Sheets("są").Select
  Cells.Select
  Selection.ClearContents
  Sheets("brak").Select
  Cells.Select
  Selection.ClearContents
  
  w = 1
  w1 = 1
  w2 = 1
  jak = Sheets("centrum").Range("A1")
  Do
    kwota = Sheets("centrum").Cells(w, 7)
    numer = Sheets("centrum").Cells(w, 3)
    kto = Sheets("centrum").Cells(w, 1)
    dat = Sheets("centrum").Cells(w, 2)
    
    If kwota < 0 Then
      x = SprawdzajFakturę(numer)
      'jest numer w f1
      If x > 0 Then
        Sheets("są").Cells(w1, 1) = w
        Sheets("są").Cells(w1, 2) = numer
        Sheets("są").Cells(w1, 3) = x
        Sheets("są").Cells(w1, 4) = kto
        Sheets("są").Cells(w1, 5) = dat
        Sheets("są").Cells(w1, 6) = kwota
        'jeśli kwoty się r óżnią w znalezionych
        kwota1 = Sheets("euro").Cells(x, 15)
        If kwota <> kwota1 Then
          Sheets("są").Cells(w1, 7) = kwota1
          Sheets("są").Rows(w1).Interior.ColorIndex = 22
        End If
        'dopisać jedynkę jeśli znaleiono w centrum
        Sheets("centrum").Cells(w, 9) = 1
        'pokolorować znalezione w euro
        Sheets("euro").Cells(x, 20) = 1
        Sheets("euro").Rows(x).Interior.ColorIndex = 22
        w1 = w1 + 1
      End If
      'nie ma takiego numeru w f2
      If x = 0 Then
        Sheets("brak").Cells(w2, 1) = w
        Sheets("brak").Cells(w2, 2) = numer
        Sheets("brak").Cells(w2, 4) = kto
        Sheets("brak").Cells(w2, 5) = dat
        Sheets("brak").Cells(w2, 6) = kwota
        
        Sheets("brak").Cells(w2, 1).Select
        Sheets("centrum").Rows(w).Interior.ColorIndex = 22
        
        Sheets("centrum").Cells(w, 9) = -1
        w2 = w2 + 1
      End If
    End If 'ujemna kwota
    
    w = w + 1
  Loop Until Sheets("centrum").Cells(w, 1) = ""
  Sheets("brak").Select
  Range("a1").Select
End Sub


Function SprawdzajFakturę(numer As Variant) As Integer
On Error GoTo błąd
  SprawdzajFakturę = Sheets("euro").Columns("D:D").Find(What:=numer).Row
Exit Function
błąd:
  SprawdzajFakturę = 0
End Function

'pobieramy plik z EUROCASH
Sub PobierzPlikEUROCASH()
  'aktywny arkusz
  Adokąd = ActiveWorkbook.Name
  Zdokąd = "euro"
'wyczyszczenie poprzednich
  Sheets(Zdokąd).Select
  Cells.Select
  Selection.ClearContents
  'kolory
  Cells.Select
    With Selection.Interior
        .Pattern = xlNone
    End With
  Range("A1").Select
  
  wynik = Application.Dialogs(xlDialogOpen).Show
  If wynik = False Then
    MsgBox "BŁĄD"
    Exit Sub
  End If
  'plik otwarty
  'nazwa otwartego arkusza
  Askąd = ActiveWorkbook.Name
  'nazwa wybranej zakłądki w arkuszu
  Zskąd = ActiveSheet.Name
  'Zskąd = "Przydziały - wszystkie"
  'przenosimy arkusz Przydziały - wszystkie do BAŚKA   na koniec
  Windows(Askąd).Activate
  Sheets(Zskąd).Select
  'wyczyszczenie filtrów
  'Selection.AutoFilter
  Cells.Select
  'skopiowanie danych
  Selection.Copy
  'wklejenie danych
  Windows(Adokąd).Activate
  Sheets(Zdokąd).Select
  Range("A1").Select
  ActiveSheet.Paste
  'zamknięcie pliku - coś trzeba zrobić żeby nie pytało o nic
  Windows(Askąd).Activate
  'ActiveWindow.Close
  Application.CutCopyMode = False
  ActiveWorkbook.Close savechanges:=False
  Application.CutCopyMode = True
  Range("A1").Select
  Sheets("START").Select
End Sub

Sub PobierzPlikCENTRUM()
  Adokąd = ActiveWorkbook.Name
  Zdokąd = "centrum"
'wyczyszczenie poprzednich
  Sheets(Zdokąd).Select
  Cells.Select
  Selection.ClearContents
  'kolory
  Cells.Select
    With Selection.Interior
        .Pattern = xlNone
    End With
  Range("A1").Select
   
  Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
  plik = Application.FileDialog(msoFileDialogOpen).Show
  If plik <> 0 Then
    plik = Application.FileDialog(msoFileDialogOpen).SelectedItems(1)
  End If
  Workbooks.OpenText Filename:=plik, Origin:=1250 _
        , StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
        , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
        Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1)), _
        TrailingMinusNumbers:=True
  
  'plik otwarty
  'nazwa otwartego arkusza
  Askąd = ActiveWorkbook.Name
  'nazwa wybranej zakłądki w arkuszu
  Zskąd = ActiveSheet.Name
  'Zskąd = "Przydziały - wszystkie"
  'przenosimy arkusz Przydziały - wszystkie do BAŚKA   na koniec
  Windows(Askąd).Activate
  Sheets(Zskąd).Select
  'wyczyszczenie filtrów
  'Selection.AutoFilter
  Cells.Select
  'skopiowanie danych
  Selection.Copy
  'wklejenie danych
  Windows(Adokąd).Activate
  Sheets(Zdokąd).Select
  Range("A1").Select
  ActiveSheet.Paste
  'zamknięcie pliku - coś trzeba zrobić żeby nie pytało o nic
  Windows(Askąd).Activate
  'ActiveWindow.Close
  Application.CutCopyMode = False
  ActiveWorkbook.Close savechanges:=False
  Application.CutCopyMode = True
  Range("A1").Select
  'ustawienie kolumn
  Cells.Select
  Cells.EntireColumn.AutoFit
  Range("A1").Select
  Sheets("START").Select
End Sub