VBA-Makro: Bezug auf Spalte funktioniert nicht richtig ...

10/02/2011 - 15:18 von Chris | Report spam
Vielleicht kann mir einer helfen.

Ich habe Inhalte in den Spalten A bis G. Aber nur der Inhalt aus der
Spalte F soll nach Anzahl aufsummiert werden und die jeweils
vorkommenden Inhalte in der Spalte H und die dazugehörige
Aufsummierung in der Spalte I angegeben werden.

Aber er nimmt nicht die Spalte F und zàhlt sondern immer nur Spalte A.
Schneide ich nun die Spalte F aus und setze sie als Spalte A
funktioniert es so wie ich es haben will. Die Aufsummierung klappt
also.

Aber irgendwo muss ja ein Denkfehler drin sein ... ???


Bislang ist das folgender Code:

Public Sub Filtern_Aufsummierung()

'Namen in F2:F6000
Dim Dic_Zaehlen
Dim Dic_Summe
Dim Arr
Dim L As Long

Set Dic_Zaehlen = CreateObject("Scripting.Dictionary")
Set Dic_Summe = CreateObject("Scripting.Dictionary")

Dic_Zaehlen("Namen") = "'=Zàhlenwenn()"
Dic_Summe("Namen") = "'=Summewenn()"

Arr = Range("F1").CurrentRegion

For L = 2 To UBound(Arr)
Dic_Zaehlen(Arr(L, 1)) = Dic_Zaehlen(Arr(L, 1)) + 1
Dic_Summe(Arr(L, 1)) = Dic_Summe(Arr(L, 1)) + Arr(L, 2)

Next
Range("H1").Resize(Dic_Zaehlen.Count) WorksheetFunction.Transpose(Dic_Zaehlen.keys)
Range("I1").Resize(Dic_Zaehlen.Count) WorksheetFunction.Transpose(Dic_Zaehlen.Items)
 

Lesen sie die antworten

#1 Reiner Wolff
11/02/2011 - 18:54 | Warnen spam
Moin Chris,

vorweg:
Diese Newsgroup ist umgezogen. Ich habe daher ein crossposting mit f'up
gemacht und bitte dem follow up auch zu folgen nach:
de.comp.office-pakete.ms-office.excel

*Chris* schrieb:
Ich habe Inhalte in den Spalten A bis G. Aber nur der Inhalt aus der
Spalte F soll nach Anzahl aufsummiert werden und die jeweils
vorkommenden Inhalte in der Spalte H und die dazugehörige
Aufsummierung in der Spalte I angegeben werden.

Aber er nimmt nicht die Spalte F und zàhlt sondern immer nur Spalte A.
Schneide ich nun die Spalte F aus und setze sie als Spalte A
funktioniert es so wie ich es haben will. Die Aufsummierung klappt
also.
Bislang ist das folgender Code:
Public Sub Filtern_Aufsummierung()

'Namen in F2:F6000
Dim Dic_Zaehlen
Dim Dic_Summe
Dim Arr


^^^^^^^^^^
Du solltest die Variablen mit Datentyp deklarieren.
In Deinem Fall also mindestens mit:
Dim Dic_Zaehlen As Object
Dim Dic_Summe As Object
Dim Arr As Excel.Range

Dim L As Long

Set Dic_Zaehlen = CreateObject("Scripting.Dictionary")
Set Dic_Summe = CreateObject("Scripting.Dictionary")



Dictionary? So ganz habe ich nich verstanden, wofür Du das brauchst.

Dic_Zaehlen("Namen") = "'=Zàhlenwenn()"
Dic_Summe("Namen") = "'=Summewenn()"

Arr = Range("F1").CurrentRegion


^^^^^^^^^^^^^
Hier liegt vermutlich der "Denkfehler".
CurrentRegion liefert Dir den Bereich um die Zelle F1, der ausgefüllt ist.
In Deinem Fall liefert er vermutlich etwas wie Range("A1:I215")

For L = 2 To UBound(Arr)
Dic_Zaehlen(Arr(L, 1)) = Dic_Zaehlen(Arr(L, 1)) + 1
Dic_Summe(Arr(L, 1)) = Dic_Summe(Arr(L, 1)) + Arr(L, 2)


^^^
Hier greifst Du dann auf die _erste_ Spalte des von CurrentRegion
gelieferten Bereiches zurück. Also auf Spalte A.
Ich würde Dir dringend empfehlen nicht mit CurrentRegion zu arbeiten, wenn
die Inhalte immer in den gleichen Spalten stehen.
Versuchs mal mit sowas:
Dim Zelle As Excel.Range
Dim Zàhler as Long
Dim i As Long

Zàhler = 0
For i = 2 to Cells(Rows.Count,1).End(xlUp).Row
'sollte hier nicht irgendeine Bedingung abgeprüft werden? oder hatte ich
'das falsch verstanden?
Zàhler = Zàhler + 1
'etc. pp.


Ansonsten könntest Du das ganze sicherlich auch über eine Formel in der
Excel-Zelle realisieren. Wenn SummeWenn/ZàhlenWenn nicht ausreichen für
Deinen Fall, dürfte es mit der Summenprodukt-Funktion funktionieren:
http://www.xldynamic.com/source/xld...ODUCT.html

HTH
Gruß aus Kiel
Reiner
Treffen sich ein Kuhfladen und ein MS-DOS. Sagt das MS-DOS:
"Hallo, ich bin ein Betriebssystem, was bist'n du?".
Darauf der Kuhfladen:
"Wenn du'n Betriebssystem bist, bin ich 'ne Pizza!"

Ähnliche fragen