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

Proszę o pomoc w następującej kwestii.

W raporcie trzeba dodać kolumnę "Matricola", która wypełni się odpowiednim numerkiem według opisu, który co jakiś czas pojawia się w raporcie:

"RTE VARIABILE", np. RTE VARIABILE    00, RTE VARIABILE    01, RTE VARIABILE    02, itd.

Dodatkowa kolumna jest potrzebna, aby móc filtrować według niej dane.

Ponieważ jest to plik ściągnięty z innego pdf do txt, a następnie do Excela (nie udało mi się znaleźć innego sposobu), to wymaga on dodatkowej obróbki.

Nie wiem, czy dałoby się od razu porozdzielać dane na różne zakładki według każdej Matricola.

Z góry dziękuję za pomoc.

 

Załączniki

  • xlsx

    DM10_Altkom.xlsx ( 12K )
Barbara_Klamka_vfzf
  • Zapytał
  • @ Barbara_Klamka_vfzf | 14.12.2018
    • 0
    • 0
    • 0
Komentarze (1)
Dziękuję bardzo za pomoc!
Skomentował : @ Barbara_Klamka_vfzf ,24.12.2018
  • 0
  • 0
  • 0

Odpowiedzi (2)

  • 1

W podanym przykładzie trochę sprzecznie oznaczyłaś zakresy, które mają być przypisane do danego numeru i nie wiem, w którym miejscu ma się on faktycznie zaczynać i kończyć, ale poniższa formuła powinna być przydatna (wklej ją do G3 i skopiuj w dół):

=JEŻELI(LEWY(B3;13)="RTE VARIABILE";--PRAWY(B3;2);H2)

Automatyczny podział na arkusze też da się zrobić, oczywiście z pomocą VBA:

Sub podziel()
Dim znajdz As String, w1 As Long, w2 As Long, ws As Worksheet, wyjdz As Boolean

znajdz = "RTE VARIABILE"
w2 = 1

For Each ws In Worksheets
   If Left(ws.Name, Len(znajdz)) = znajdz Then
      MsgBox "W skoroszycie nie może być arkuszy zawierających" & vbCrLf & """" & znajdz & """ w nazwie.", vbExclamation
      Exit Sub
   End If
Next

Application.ScreenUpdating = False
On Error GoTo blad

With ActiveSheet
   w1 = .[b:b].Find(znajdz, after:=.Cells(w2, "b"), lookat:=xlPart).Row

   Do
      w2 = .[b:b].Find(znajdz, after:=.Cells(w1, "b"), lookat:=xlPart).Row

      Do While .Cells(w1, "b").Value = .Cells(w2, "b").Value
         w2 = .[b:b].Find(znajdz, after:=.Cells(w2, "b"), lookat:=xlPart).Row
      Loop
      
      If w2 < w1 Then
         w2 = .UsedRange.Rows.Count + 1
         wyjdz = True
      End If
      
      Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
      ws.Name = .Cells(w1, 2).Value
      
      Range(.Cells(w1, "a"), .Cells(w2 - 1, "f")).Copy ws.[a1]
      w1 = w2
   Loop Until wyjdz
End With

Application.ScreenUpdating = True
MsgBox "Gotowe.", vbInformation
Exit Sub

blad:
Application.ScreenUpdating = True
MsgBox "Błąd " & Err & ": " & Error(Err), vbExclamation
On Error GoTo 0

End Sub

Uwaga: założyłem, że numeracja w komórkach z "RTE VARIABLE" jest ułożona rosnąco.

Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 15.12.2018
    • 1
    • 7
    • 1
  • 0

Dziękuję bardzo za pomoc!

Barbara_Klamka_vfzf
  • Odpowiedział
  • @ Barbara_Klamka_vfzf | 24.12.2018
    • 0
    • 0
    • 0