Stránka 1 z 1

EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 09:12
od kangerou78
Dobrý den,

mám menší problém s porovnáním dat v excelu. Potřeboval bych pospojovat pole, za podmínky, že sloupce A, B, E, F jsou stejné, data jsou vždy pod sebou. Potřeboval bych provést změnu, aby se mi data porovnávala a zapisovala do řádku. Lépe pochopitelné a ukázané je to v přiloženém souboru.

Děkuji moc

Re: EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 09:50
od Branscombe
Pakliže to chápu správně, tak potřebuješ odebrat duplicitní položky.
V Excel 2007 a výše je na kartě "Data" položka "Odebrat duplicity", v dřívějších verzích si nejsem jist přítomností této funkce, takže označíš oblast buněk, klikneš na odebrat duplicity a pak jen vybereš které pole chceš porovnávat ... Na závěr vložíš vzorec do posledního sloupce který ti vybere data ze sloupce D

Re: EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 10:07
od kangerou78
Nepotřebuju odebrat duplicitní položky, potřebuju, aby mi to z jednoho listu vyhledávalo a na druhý list řadilo položky, dle výsledku ve výše uvedeném souboru ukázka.xls. Problém mám v tom, že záznamů může být různý počet a to jak celkových tak i pro jednotlivé položky. Potřebuju, aby na listu1 byly záznamy zachovány jak jsou a na list2 by se mi zobrazil výsledek po setřídění. Tak jak je uvedeno v ukázce.

Re: EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 10:41
od navstevnik
Plati, pokud je shodne VP, je shodne i Cvykresu a Polozka? Tedy nenastane stav, kdy pro shodne VP jsou ruzna Cvykresu a Polozka?

Re: EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 11:28
od kangerou78
Ano, platí. Stav že by se VP, Cvykresu a Položka neshodovali nastat nemůže.

Re: EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 11:34
od navstevnik
Nize uvedenou proceduru vloz do standardniho modulu, zavolat F5 v editoru VBA nebo z listu Nastroje>Makro>... (uprav nazvy listu dle potreby, otestuj na zaloze a s vetsim poctem zaznamu, zejmena kombinace zakazky a VP; plati, ze data na listu1 jsou setridena - pod sebou):

Kód: Vybrat vše

Option Explicit

Sub Sestavit()
  Dim SBlk As Range, SCll As Range
  Dim TCll As Range, OffsR As Long
  Dim OldZak As String, OldVP As String
  With Worksheets("list1")
    Set SBlk = .Range("a2:a" & .Cells(.Rows.Count, "a").End(xlUp).Row)
  End With
  Set TCll = Worksheets("list2").Range("a1")
  OldZak = vbNullString
  OldVP = vbNullString
  OffsR = 0
  For Each SCll In SBlk.Cells
    With SCll
      If CStr(.Value) = OldZak And CStr(.Offset(0, 1).Value) = OldVP Then
        TCll.Offset(OffsR, 6).Value = TCll.Offset(OffsR, 6).Value & ", " & CStr(.Offset(0, 3).Value)  ' '2_c_prac
      Else
        If CStr(.Offset(0, 1).Value) <> OldVP Then
          OffsR = OffsR + 1
          OldZak = CStr(.Value)
          OldVP = CStr(.Offset(0, 1).Value)
          TCll.Offset(OffsR, 0).Value = CStr(.Value)  ' zakazka
          TCll.Offset(OffsR, 1).Value = CStr(.Offset(0, 1).Value)  ' VP
          TCll.Offset(OffsR, 3).Value = .Offset(0, 4).Value  ' Cvykresu
          TCll.Offset(OffsR, 4).Value = .Offset(0, 5).Value  ' Polozka
          TCll.Offset(OffsR, 5).Value = .Offset(0, 6).Value  ' ks
          TCll.Offset(OffsR, 6).Value = CStr(.Offset(0, 3).Value)  ' '2_c_prac
        End If
      End If
    End With
  Next SCll
  Worksheets("list2").UsedRange.EntireColumn.AutoFit
  Set SCll = Nothing
  Set SBlk = Nothing
  Set TCll = Nothing
End Sub

Re: EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 14:52
od kangerou78
Díky moc, je to super, funguje to :-) Jen bych ještě potřeboval, aby mi to ve sloupci 2_c_prac vypisovalo i ty nuly na začátku. Všechny čísla by měla být 5 místná.

Re: EXCEL - uprava a třídění dat

Napsal: 16 úno 2011 15:33
od navstevnik
Vsechny sloupce na listu 2 mimo slopec pro pocet naformatuj predem jako text.
Pro jednodussi pouzit upravena procedura vlozi na list 2 hlavickovy radek a naformatuje sloupce.

Kód: Vybrat vše

Option Explicit

Sub Sestavit()
  Dim SWsht As Worksheet, TWsht As Worksheet
  Dim SBlk As Range, SCll As Range
  Dim TCll As Range, OffsR As Long
  Dim OldZak As String, OldVP As String, i As Byte

  Set SWsht = ActiveWorkbook.Worksheets("list1")
  Set TWsht = ActiveWorkbook.Worksheets("list2")
  With SWsht
    Set SBlk = .Range("a2:a" & .Cells(.Rows.Count, "a").End(xlUp).Row)
  End With
  With TWsht
    Set TCll = .Range("a1")
    .Cells.ClearContents
    For i = 0 To 6
      ' vlozit hlavicky
      With SWsht.Range("a1")
        TCll.Value = .Value
        TCll.Offset(0, 1).Value = .Offset(0, 1).Value
        TCll.Offset(0, 2).Value = .Offset(0, 2).Value
        TCll.Offset(0, 3).Value = .Offset(0, 4).Value
        TCll.Offset(0, 4).Value = .Offset(0, 5).Value
        TCll.Offset(0, 5).Value = .Offset(0, 6).Value
        TCll.Offset(0, 6).Value = .Offset(0, 3).Value
      End With
    Next i
    .Range("a:e,g:g").NumberFormat = "@" ' format sloupcu
  End With
  OldZak = vbNullString
  OldVP = vbNullString
  OffsR = 0
  For Each SCll In SBlk.Cells
    With SCll
      If CStr(.Value) = OldZak And CStr(.Offset(0, 1).Value) = OldVP Then
        TCll.Offset(OffsR, 6).Value = TCll.Offset(OffsR, 6).Value & ", " & CStr(.Offset(0, 3).Value)  ' '2_c_prac
      Else
        If CStr(.Offset(0, 1).Value) <> OldVP Then
          OffsR = OffsR + 1
          OldZak = CStr(.Value)
          OldVP = CStr(.Offset(0, 1).Value)
          TCll.Offset(OffsR, 0).Value = CStr(.Value)  ' zakazka
          TCll.Offset(OffsR, 1).Value = CStr(.Offset(0, 1).Value)  ' VP
          TCll.Offset(OffsR, 3).Value = .Offset(0, 4).Value  ' Cvykresu
          TCll.Offset(OffsR, 4).Value = .Offset(0, 5).Value  ' Polozka
          TCll.Offset(OffsR, 5).Value = .Offset(0, 6).Value  ' ks
          TCll.Offset(OffsR, 6).Value = CStr(.Offset(0, 3).Value)  ' '2_c_prac
        End If
      End If
    End With
  Next SCll
  TWsht.UsedRange.EntireColumn.AutoFit
  Set SCll = Nothing
  Set SBlk = Nothing
  Set TCll = Nothing
  Set SWsht = Nothing
  Set TWsht = Nothing
End Sub

Re: EXCEL - uprava a třídění dat  Vyřešeno

Napsal: 17 úno 2011 08:39
od kangerou78
Funguje to parádně, děkuji moc :-)