Microsoft Excel

Herbers Excel/VBA-Archiv

Zählen wenn als VBA

Betrifft: Zählen wenn als VBA von: Tom
Geschrieben am: 07.08.2008 09:48:01

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

  

Betrifft: AW: Zählen wenn als VBA von: Gert Seler
Geschrieben am: 07.08.2008 10:07:06

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


  

Betrifft: AW: Zählen wenn als VBA von: Daniel
Geschrieben am: 07.08.2008 10:07:55

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


  

Betrifft: AW: Zählen wenn als VBA von: Tom
Geschrieben am: 07.08.2008 10:13:26

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


  

Betrifft: AW: Zählen wenn als VBA von: Daniel
Geschrieben am: 07.08.2008 10:23:04

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


  

Betrifft: AW: Zählen wenn als VBA von: Ramses
Geschrieben am: 07.08.2008 10:14:43

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


  

Betrifft: AW: Zählen wenn als VBA von: Tom
Geschrieben am: 07.08.2008 10:19:28

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


  

Betrifft: AW: Zählen wenn als VBA von: Daniel
Geschrieben am: 07.08.2008 10:38:21

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


  

Betrifft: AW: Zählen wenn als VBA von: Tom
Geschrieben am: 07.08.2008 11:01:09

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


  

Betrifft: AW: Zählen wenn als VBA von: Daniel
Geschrieben am: 07.08.2008 11:08:13

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


  

Betrifft: AW: Zählen wenn als VBA von: Tom
Geschrieben am: 07.08.2008 11:28:04

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


  

Betrifft: AW: Zählen wenn als VBA von: Daniel
Geschrieben am: 07.08.2008 11:42:51

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


  

Betrifft: AW: Zählen wenn als VBA von: Tom
Geschrieben am: 07.08.2008 14:53:55

Wollt nur schnell sagen: Passt alles wunderbar!

Die gekürzte Zeile ist genau so gut!

Vielen Dank!

Der Tom


  

Betrifft: AW: Zählen wenn als VBA von: Tom
Geschrieben am: 07.08.2008 11:08:14

BeispielDatei mal anbei..

https://www.herber.de/bbs/user/54401.xls


Der Tom