VBA Code Zelle +1 addieren?

4 Antworten

Geb mal hier den kompletten Code ein. Hoffe man kann etwas damit anfangen. Gruß Emilian

Option Explicit

Private Sub CommandButton1_Click()
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Dim zeile As Long
    Dim zeilemax As Long
    Dim i As Long
    Dim lngZeile As Long, lngSpalte As Long
    Dim LetzteZeile As Long
lngZeile = Worksheets("ArbTab").UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngSpalte = Worksheets("ArbTab").UsedRange.SpecialCells(xlCellTypeLastCell).Column

With Worksheets("ArbTab")
    LetzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
        With Worksheets("TabStat")
        Worksheets("TabStat").Range("B1:B60").ClearContents  ' LÖSCHEN der alten Daten???????
              Worksheets("TabStat").Range("b1").FormulaLocal = "=(Jahr(Heute()))"
Worksheets("TabStat").Range("b2").FormulaLocal = "=SUMMENPRODUKT(((ArbTab!$C$2:$C$" & LetzteZeile & "=""Herr"")+(ArbTab!$C$2:$C$" & LetzteZeile & "=""Frau""))/ZÄHLENWENN(ArbTab!$B$2:$B$" & LetzteZeile & ";ArbTab!$B$2:$B$" & LetzteZeile & "))"
Worksheets("TabStat").Range("b3").FormulaLocal = "=SUMMENPRODUKT((ArbTab!$C$2:$C$" & LetzteZeile & "=""Herr"")/ZÄHLENWENN(ArbTab!$B$2:$B$" & LetzteZeile & ";ArbTab!$B$2:$B$" & LetzteZeile & "))"
Worksheets("TabStat").Range("b4").FormulaLocal = "=SUMMENPRODUKT((ArbTab!$C$2:$C$" & LetzteZeile & "=""Frau"")/ZÄHLENWENN(ArbTab!$B$2:$B$" & LetzteZeile & ";ArbTab!$B$2:$B$" & LetzteZeile & "))"
          End With
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = True
End With

End Sub


augsburgchris  11.09.2018, 13:28

Hab mir den Code jetzt angeschaut. Die Summenproduktformel gibt meiner Meinung nach keinen Sinn, Was willst du hier erreichen?

1
augsburgchris  11.09.2018, 13:33
@augsburgchris

Es soll doch soweit ich verstanden hab einfach nur die Frau und Mann zählen?

Du generierst hier künstlich 2 Arrays wobei das letzte logischerweise nur aus Einsen bestehen kann, beziehst dich hier aber nicht mal auf die Herr/Frau Spalte.

Wie gesagt es wäre hilfreich zu wissen was rauskommen soll.

1
Emilian24 
Fragesteller
 11.09.2018, 14:01
@augsburgchris

Es ist so, das ich in der Tabelle Personen habe die in zwei Zeilen vorkommen "könnten" aber auch einzelne Personen sind natürlich gelistet. Hier soll das Summenprodukt die anzahl Personen zählen. Bei doppelter Zeile einer Person aber nur einmal. Ferner soll automatisch bis zur letzten Zeile erfasst werden. In echt sind es ca. 250 Zeilen die erfasst werden sollen. Der Code läuft, allerdings es fehlt immer ein Zähler in der Summe. Danke und Gruß Emilian

0
augsburgchris  11.09.2018, 14:23
@Emilian24

Leider kann ich das Problem nicht nachvollziehen, klappt bei mir einwandfrei.

Warum "Dim"st du oben zig Variablen die du gar nicht mehr benutzt?

0

Hast du die ZÄHLENWENN-Ausdrücke schon mal für sich ausprobiert, ob die das Gewünschte liefern?

(Übrigens ist mir beim Code aufgefallen, dass du am Ende nur Application.EnableEvents wieder zurücksetzt, .ScreenUpdating und .Calculation aber nicht.)

Wozu verwendest du überhaupt ein Makro und verwendest nicht ein BEREICH.VERSCHIEBEN o. ä.? (Vielleicht, weil BEREICH.VERSCHIEBEN langsam ist?

Oder - Wenn du schon ein Makro verwendest: Man kann auch eigene Funktionen in Makros definieren und wie eingebaute Funktionen in der Tabelle verwenden.

Das geht allerdings nicht im Code für eine Tabelle, du brauchst dafür ein Makro (falls noch keins existiert, im VBA-Fenster Rechtsklick auf den Namen deiner Arbeitsmappe und "Einfügen" -> "Modul" oder Menü "Einfügen" -> "Modul"). Quelltext im Menü z. B.

Option Explicit

Public Function HALLOWELT() As String
  HALLOWELT = "Hallo, Welt!"
End Function

Public Function GRUSS(Name) As String
  GRUSS = "Hallo, " & Name
End Function

Dann kannst du in irgendeiner Zelle eintragen

=HALLOWELT()

, um dort "Hallo, Welt!" anzeigen zu lassen, oder z. B. in B1 "Jens" und in B2

=GRUSS(B1)

eintragen, um in B2 "Hallo, Jens" anzuzeigen.

Solche Funktionen kannst du beliebig "aufbohren"; der Unterschied zu einer Sub besteht allein darin, dass eine Funktion einen Rückgabewert hat und damit z. B. ein "=FUNKTIONSNAME(Argumentliste)" ermöglicht.

-----

(Kleiner Schönheitsfehler von Excel: Excel merkt sich die erste Groß-/Kleinschreibung einer selbstdefinierten Funktion. Wenn du z. B.

=gRuSs("Alfons")

eingibst und später in irgendeine Zelle

=GRUSS("Bertha")

, ändert Excel die Formel ab in

=gRuSs("Bertha")

, egal, wie die Groß-/Kleinschreibung der Funktion im Makro ist, was mich persönlich stört.

Woher ich das weiß:eigene Erfahrung
Iamiam  16.09.2018, 01:21

wenn ich mich recht erinnere, kann man die Funktion im Modul auskommentieren (evtl in der Liste löschen? weiß nicht mehr), speichern, xl schließen und wieder neu öffnen. Dann die Fkt im Modul richtig schreiben, aktivieren und in gewünschter Schreibung einsetzen. (zumindest so ähnlich hab ichs mal gemacht)

1
PWolff  16.09.2018, 20:39
@Iamiam

Stimmt, ich erinnere mich, dass es da einen etwas nervigen Weg gab.

0

Ohne Deine Anlage wirklich zu durchschauen:

Könnte es sein, dass Du durch den Zählbeginn in Zeile2 bis Letzte Zeile eine Zeile zuwenig bekommst? Und sich dadurch dioe Ergebnisse alle nach oben verschieben?

Emilian24 
Fragesteller
 10.09.2018, 13:55

Danke, aber deine Vermutung trifft in dem Fall nicht zu. Kann leider die Datei nicht anhängen, oder ich weiß nicht wie. Bei einfach rein kopieren würde man den Überblick verlieren. Gruß Emilian

0
Iamiam  10.09.2018, 21:06
@Emilian24

Man kann hier leider keine xl-Datei reinstellen, nur Screenshots. (oft nur Ausschnitte sinnvoll) Dabei aber immer Spalten. und Zeilenköpfe zeigen. (Makros gehen, sind ja Text)

0

Ohne den Aufbau Deiner Tabelle zu kennen ist das schwer. Aber was ist denn, wenn Du

LetzteZeile

durch

LetzteZeile+1

ersetzt?
Oder WO liegt das Problem genau?
Was Gauß damit zu tun hat erschließt sich mir nicht.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Emilian24 
Fragesteller
 10.09.2018, 13:55

Danke, aber deine Vermutung trifft in dem Fall nicht zu. Kann leider die Datei nicht anhängen, oder ich weiß nicht wie. Bei einfach rein kopieren würde man den Überblick verlieren. Gruß Emilian

0