Ilona K.

Ilona K. Product Manager (DBK
RENTAL)

Temat: grupowanie danym

Potrzebuję pomocy w napisaniu formuły dla przypadku jak poniżej.
szczegoly w zalaczniku : http://wyslijto.pl/plik/uk4sulbom0413008


założenia:

Formuła sprawdza w kolumnie C, jakie wartości spośród

AA 123456
AA 123455
AB 123466
AB 123467

występują dla konkretnego numeru z kolumny B

1001233
1001234
1001235
1001236
1001237
1001238

W kolumnie D podaje łączną ilość wystąpień tych danych w pierwszym wierszu występowania, a w pozostałych wstawia „-„

W kolumnie E wpisuje wszystkie wartości występujące dla danego numeru w kolumnie C i w pierwszym wierszu podaje dane w takim układzie „AA 123456, AA 123455, AB 123466, AB 123467”, a w pozostałych wstawia „-„

Maciej G.

Maciej G. zarobiony

Temat: grupowanie danym

Przetestuj działanie makra:

Option Explicit

Sub akcja()
Dim tbl, tblUni(), a As Long, i As Long, w As Long, j As Long
Dim vItem As Variant, akcje As String
Dim colUnikaty As New VBA.Collection
Dim rng As Excel.Range
a = Cells(Rows.Count, "A").End(xlUp).Row

tbl = Range("A2:B" & a)

On Error Resume Next
For i = 1 To UBound(tbl)
vItem = tbl(i, 1)
If Len(vItem) > 0 Then
colUnikaty.Add Item:=vItem, _
Key:=CStr(vItem)
If Err.Number <> 0 Then
Err.Clear
Else
w = w + 1
ReDim Preserve tblUni(1 To 2, 1 To w)
tblUni(1, w) = vItem
tblUni(2, w) = i + 1
End If
End If
Next i
On Error GoTo 0

For i = LBound(tblUni) To UBound(tblUni, 2)
For j = LBound(tbl, 1) To UBound(tbl, 1)
If tblUni(1, i) = tbl(j, 1) Then
akcje = akcje & tbl(j, 2) & ", "
End If
Next j
Cells(tblUni(2, i), "D").Value = akcje
akcje = ""
Next i
Set rng = Range("D2:D" & a).SpecialCells(xlCellTypeBlanks)
rng = "-"
End Sub
Maciej G. edytował(a) ten post dnia 04.07.12 o godzinie 09:44
Ilona K.

Ilona K. Product Manager (DBK
RENTAL)

Temat: grupowanie danym

dziekuje za odpowiedz, ale to chyba jednak zbyt skomplikowane dla mnie :)

mogę prosić łopatologicznie jak to zrobić? :D
Probowalam utworzyc makro i wpakowac to do VB, ale to pewnie nie o to chodzi, bo mi wywala bląd
odnosnie tej linii
"Set rng = Range("D2:D" & a).SpecialCells(xlCellTypeBlanks)"

kompletenie nie znam tematu makr, wiec prawdopodobnie robię głupotę :(
Maciej G.

Maciej G. zarobiony

Temat: grupowanie danym

Prawym klawiszem myszki kliknij na nazwę arkusza -> pokaż kod -> Menu Insert -> Insert Module
i tam wklej kod.
Odnośnie linii. To zamień na taki fragment:
On Error Resume Next
Set rng = Range("D2:D" & a).SpecialCells(xlCellTypeBlanks)
rng = "-"
On Error GoTo 0

Błąd zwraca gdy nie masz pustych komórek w kol. D.
Ilona K.

Ilona K. Product Manager (DBK
RENTAL)

Temat: grupowanie danym

Dzieki, tak wlasnie robiłam, tylko ten jeden wiersz psul wszystko :)

Dziekuje raz jeszcze, działa :)

tylko teraz pytanie - jak bede potrzebowala wykorzystac to na duzym pliku - ok.6tys wierszy - podmienie dane wejsciowe, to musze zmienic jedynie kolumny/nazwy w makrze czy cos wiecej?
Maciej G.

Maciej G. zarobiony

Temat: grupowanie danym

Jeśli układ danych będzie taki jak w przykładowym pliku, to nic nie musisz zmieniać.

Jeśli jednak, to
Kol. A Nr Artykułu
Kol. B. Nr Akcji
przypisanie do tablicy:
a = Cells(Rows.Count, "A").End(xlUp).Row - tu zmieniasz nazwę kolumny
tbl = Range("A2:B" & a) - tu zmieniasz zakres z "kodami"


Jak będziesz chciała zmienić kolumnę z wynikami to zmień tutaj:
Cells(tblUni(2, i), "D").Value = akcje  - tu zmieniasz nazwę kolumny
oraz
Set rng = Range("D2:D" & a).SpecialCells(xlCellTypeBlanks) - tu zmieniasz zakres


A jak nie dasz rady to zapraszam :-)
Ilona K.

Ilona K. Product Manager (DBK
RENTAL)

Temat: grupowanie danym

ok, dziekuje bardzo :) w razie problemu bede pisac (jutro do tego mocno przysiądę) :)

Następna dyskusja:

dodawanie liczb w danym kol...




Wyślij zaproszenie do