Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
996to1000
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zählen wenn als VBA

Zählen wenn als VBA
07.08.2008 09:48:01
Tom
Hallo und guten Morgen!
Ich habe eine Tabelle, in der ich Aufgaben und Projekte verwalten möchte.
Nun gibt es bei mir Hauptprojekte und daraus resultierende Teilprojekte.
Diese möchte ich nun in einer Spalte zählen lassen.
So zum Beispiel:
Hauptprojekt 1
Hauptprojekt 2
HauptProjekt 3
Teilprojekt 1
Teilprojekt 2
Hauptprojekt 4
Hauptprojekt 5
Teilprojekt 1
Teilprojekt 2
Teilprojekt 3
Ich denke das Schema ist verständlich.
Jetzt frage ich mich, wie ich die Zählerrei hinbekomme. Als erstes habe ich es mit einer Zählenwenn-Formel versucht, die aber superlang wird, da ja berücksichtigt werden muss unter welchen Hauptprojekt das Teilprojekt steht.
Das 2. Problem ist, da ich auch mal ab und zu eine Zeile lösche und somit die Formeln den Bezug verlieren...auch wenn ich mit festen Bezügen arbeite.
Nun lange Rede kurze Frage...wie kann ich in der Spalte E zählen ob in Spalte D Teilprojekt oder Hauptprjekt steht und mit der Berücksichtigung das ja bei jedem neuen Hauptprojekt auch die Zählerrei mit den Teilprojekten neu beginnt.
Im Übrigen Beginnt alles ab Zeile 4, da alles darüber Überschriften und weiterer Kram ist.
Das ganze sollte unbedingt mittels VBA gehen, da ich das an anderer Stelle auch noch benötige...
Vielen Dank
Der Tom

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zählen wenn als VBA
07.08.2008 10:07:00
Gert
Hallo Tom,
einfacher wäre es, die "Teilobjekte" numerisch als "Sub.-Projekte" zu verbinden.
Was dann so aussehen würde.
<b>Hauptprojekt_5</b>
Teilprojekt_51
Teilprojekt_52
Teilprojekt_53
Nun die Projekte zählen, deren "erste Zahl" eine "5" ist.
Ebenso mit den anderen Projekten verfahren.
mfg
Gert

AW: Zählen wenn als VBA
07.08.2008 10:07:55
Daniel
Hi
grundsätzlich ist das ne schlechte Anordnung
wenn ein Hauptprojekt aus mehreren Teilprojekten bestehen kann, ist es Sinnvoller, diese zuordnung zweispaltig aufzubauen:
Hauptprojetk 1
Hauptprojekt 2
Hauptprojekt 3 Teilprojekt 1
Hauptprojekt 3 Teilprojekt 2
Hauptprojekt 4
Hauptprojekt 5 Teilprojekt 1
Hauptprojekt 5 Teilprojekt 2
Hauptprojekt 5 Teilprojekt 3
sowas vereinfacht generell die Auswertung, und erlaubt dir zu sortieren, den Autofilter und die Pivot-Auswertung zu verwenden, also alles Sachen, die das Excelleben deutlich vereinfachen.
btw. was soll eigentlich genau gezählt werden?
Gruß, Daniel

Anzeige
AW: Zählen wenn als VBA
07.08.2008 10:13:00
Tom
Na es soll genau so gezählt werden wie dargestellt...
Da ich aber per Liste NUR die Auswahl per Drop-Feld zwischen Hauptprojekt und Teilprojekt habe, wollte ich eben eine Spalte weiter einen Zähler haben, der die Hauptprojekte zählt - und wenn es darunter liegende Teilprojekte gibt, die widerrum abhängig vom Hauptprojekt zählen.
So wie bei Daniel aufgezeigt...
Der Tom

AW: Zählen wenn als VBA
07.08.2008 10:23:00
Daniel
Hi
einfach mit ner zusätlichen Zählspalte:
= WENN(LINKS(D4;1)="H";ZÄHLENWENN($D$4:D4;"H*");WENN(LINKS(D3;1)="H";1;F3 +1))
für F3 bitte die Spalte eintragen, in der du die Zählfunktion einträgst.
Gruß, Daniel

Anzeige
AW: Zählen wenn als VBA
07.08.2008 10:14:43
Ramses
Hallo
ich würde sogar soweit gehen, die Teilprojekte auch noch zu kennzeichnen
Teilprojekt 1-1
Teilprojekt 5-1
Damit ist die Unterscheidung in den Teilprojekten auch noch möglich
Gruss Rainer

AW: Zählen wenn als VBA
07.08.2008 10:19:28
Tom
Na eine Unterscheidung ist doch einfach zu sehen....Teilprojekte stehen nun mal unter den Hauptprojekten und sind ja geordnet...
Aber nun stellt sich immernoch die Frage wie ich das mittesl VBA mache...
Der Tom

AW: Zählen wenn als VBA
07.08.2008 10:38:21
Daniel
Hi
wenns sortiert ist, relativ einfach:

Option Explicit
Option Base 1
Sub Makro1()
Dim i As Long
Dim AnzHP As Long
Dim AnzTP() As Long
Dim Zelle As Range
'--- Zählen
For Each Zelle In Range("D4:D13")
If Left$(Zelle, 1) = "H" Then
AnzHP = AnzHP + 1
ReDim Preserve AnzTP(AnzHP)
Else
AnzTP(AnzHP) = AnzTP(AnzHP) + 1
End If
Next
'--- Ergebnisausgabe im Direktfenster
Debug.Print "Anzahl Hautpprojekte: " & AnzHP
For i = 1 To AnzHP
Debug.Print "Hauptprojekt " & i & " hat " & AnzTP(i) & " Teilprojekte"
Next
End Sub


die Ergebnisse werden in den Variablen AnzHP (Anzahl der Hauptprojekte) und der Array-Variablen AnzTP() (Anzahl der Teilprojekte pro Hauptprojekt) abgelegt.
im Beispiel erfolgt die Ausgabe der Ergebnisse im Direktfenster.
(Zellebereiche im Code bitte noch an die realen gegebenheiten anpassen)
Gruß, Daniel

Anzeige
AW: Zählen wenn als VBA
07.08.2008 11:01:09
Tom
Mhh das löst das gnaze auch nicht...
Ich weis zwar jetzt wie viele Hauptprojekte es gibt und wieviel Teilprojekte unter dem Haupprojekt....aber ich möchte möchte das ja zuordnen und das Ergebnis gezählt in der Spalte daneben haben.
Spalte D Spalte E
Hauptprojekt 1
Teilprojekt 2
Teilprojekt 3
Teilprojekt 4
Hauptprojekt 2
Hauptprojekt 3
TeilProjekt 1
VBA soll die Spalte E von alleine füllen
Der Tom

AW: Zählen wenn als VBA
07.08.2008 11:08:13
Daniel
Hi
genau das macht die Formel aus meinem anderen Beitrag
wenn du es per unbedingt VBA-benötigst, dann zeichne dir die Eingabe der Formel mit dem Makrorecorder auf.
Gruß, Daniel

Anzeige
AW: Zählen wenn als VBA
07.08.2008 11:28:04
Tom
So....habs mal so gemacht...funzt auch...bestimmt nicht optimal...aber es geht!

Sub zählen()
Range("E4").Select
ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]="""","""", IF(LEFT(RC[-1],1)=""H"",COUNTIF(R4C4:RC[-1],""H*""),IF(LEFT(R[-1] _
C[-1],1)=""H"",1,R[-1]C +1)))"
Range("E4").Select
Selection.AutoFill Destination:=Range("E4:E50"), Type:=xlFillDefault
Range("E4:E50").Select
End Sub


Der Tom

AW: Zählen wenn als VBA
07.08.2008 11:42:00
Daniel
Hi
nee ist wirklich nicht optimal.
der Makrorekorder ist zwar nützlich, zeichnet aber auch viel unnötiges auf (wie sollte er auch wissen, was notwendig ist und was nicht)
daher muss der Code nach der Aufzeichnung noch überarbeitet werden.
im prinzip lässt sich das alles in eine Zeilen zusammenfassen:

Range("E4:E50").FormulaR1C1 = "=IF(RC[-1]="""","""", IF(LEFT(RC[-1],1)=""H"",COUNTIF(R4C4:RC[-1],""H*""),IF(LEFT(R[-1]C[-1],1)=""H"",1,R[-1]C +1)))"


wenn dich die Formeln stören und du lieber feste werte in der Exceltabelle hättest, kannst du den Code so erweitern:


with Range("E4:E50")
.FormulaR1C1 =  "=IF(RC[-1]="""","""", IF(LEFT(RC[-1],1)=""H"",COUNTIF(R4C4:RC[-1],""H*""),IF( _
LEFT(R[-1]C[-1],1)=""H"",1,R[-1]C +1)))"
.formula = .Value
end with


(der . steht für das, was bei WITH beschrieben ist)
Gruß, Daniel

Anzeige
AW: Zählen wenn als VBA
07.08.2008 14:53:55
Tom
Wollt nur schnell sagen: Passt alles wunderbar!
Die gekürzte Zeile ist genau so gut!
Vielen Dank!
Der Tom

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige