Skocz do zawartości


Close Open
Close Open
Zdjęcie
- - - - -

Funkcja w excelu - wybór z kilku kolumn


  • Please log in to reply
4 replies to this topic

#1 maxiec

maxiec

    Adept

  • Forumowicze
  • Pip
  • 3 Postów:

Napisany 23 październik 2006 - 09:27

Hej

Mam taki problem. Posiadam tabelę w której każdy klient (pierwsza kolumna) posiada kilka róznych samochodów (lub nie posiada wogule). Klienci mogą się powtarzać. Chciałbym zrobić statystykę ile i jakich aut jest ogólnie. W wyniku musiał bym mieć opis typu:

Audi np 5
VW np 10
...
...
Komar np 4

Próbowałem z tabelą przestawną, ale ona liczy dane w jenej kolumnie a tu różne samochody mogą być w różnyych kolumnach, no i oczywiście mogą się powtarzać. Niestety nie mogę też tego zrobić ręcznie bo orygianlna tabela ma 2000 wierszy i po 30 kolumn
(oczywiście nie wszystkie kolumny są pełne).
Załaczam plik excela.
Załączony plik  klient_auto.zip   7,16K   57 Ilość pobrań

#2 Globii

Globii

    Adept

  • Forumowicze
  • Pip
  • 19 Postów:

Napisany 23 październik 2006 - 21:31

Witam

Wypróbuj to:

Option Explicit
Sub sortuj()
    
    Dim i As Long, auto As String, ile As Long, j As Long, ile2 As Long
    Dim ile3 As Long, NazwaUnikat As String, ile4 As Long
    Dim licznik As Integer
   
    Application.ScreenUpdating = False
    
With Worksheets("klient-auto")
    ile = Application.WorksheetFunction.CountA(.Range("a1:a50000"))
                                            
        
 For j = 2 To 30
    For i = 2 To ile
      ile2 = Application.WorksheetFunction.CountA(.Range("ae1:ae50000")) + 1
      auto = Cells(i, j).Value
          If auto <> "" Then
             .Cells(ile2, 31).Value = auto
          End If
     Next i
 Next j

    Range(.Cells(1, 31), .Cells(ile2 + 1, 31)).AdvancedFilter _
    Action:=xlFilterCopy, CopyToRange:=Range("af1"), Unique:=True
    ile3 = Application.WorksheetFunction.CountA(.Range("af1:af50000")) + 1
        
 For i = 1 To ile3 - 1
     licznik = 0
     NazwaUnikat = .Cells(i, 32).Value
       For j = 1 To ile2
           If .Cells(j, 31).Value = NazwaUnikat Then
              licznik = licznik + 1
           End If
       Next j
      ile4 = Application.WorksheetFunction.CountA(.Range("ag1:ag50000")) + 1
      .Cells(ile4, 33).Value = NazwaUnikat & " " & licznik
  Next i
    Columns("ae:af").Clear
    Range("ag1").Clear
End With
End Sub

Wklej do modułu standardowego. W kolumnie AG powinieneś otrzymać zliczone
ilości pojazdów.

Pozdrawiam

#3 maxiec

maxiec

    Adept

  • Forumowicze
  • Pip
  • 3 Postów:

Napisany 24 październik 2006 - 08:12

Hej

Dzięki serdeczne. Działa!

Przerobiłem fragment kodu aby mi się wtświetlał licznik w innej kolumnie na taki:

...
ile4 = Application.WorksheetFunction.CountA(.Range("ag1:ag50000")) + 1
     .Cells(ile4, 33).Value = NazwaUnikat
     .Cells(ile4, 34).Value = licznik
 Next i
   Columns("ae:af").Clear
   Range("ag1").Clear
   Range("ae1").Clear
...

Dobrze myslałem?

#4 maxiec

maxiec

    Adept

  • Forumowicze
  • Pip
  • 3 Postów:

Napisany 24 październik 2006 - 09:33

Jest niestety jedno ale..

funkcja:
auto = Cells(i, j).Value

zwraca bład run-time 13 typu mismatch, gdy w przeszukiwanej komórce jest zamiast nazwy samochodu wartość błędu np "#N/D!" albo "#ADR!" Jak ją znieczulić na tego typu dane?

Pozdrawiam

#5 Globii

Globii

    Adept

  • Forumowicze
  • Pip
  • 19 Postów:

Napisany 24 październik 2006 - 14:07

Spróbuj tak

On Error Resume Next
 auto = Cells(i, j).Value





0 Użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników