myGully.com

myGully.com (https://mygully.com/index.php)
-   Schule, Studium, Ausbildung & Beruf (https://mygully.com/forumdisplay.php?f=400)
-   -   Excel Hilfe bei einem Makro (https://mygully.com/showthread.php?t=4488077)

cunster 05.07.16 11:03

Excel Hilfe bei einem Makro
 
Hallo,
ein Marko würde mir die Arbeit erleichten, aber leider habe ich nicht wirklich Ahnung von der Materie. Ich habe eine Tabelle mit folgenden Spalten: Kundennummer, Meldedatum, Status, Klasse, Geschäftsart, Marke, Modell, Herstellnummer, Erstellungsdatum, Rechnungsdatum, Rechnungsbetrag brutto, Einkaufspreis, Rechnungsbetrag erstmalig, Rechnungsbetrag aktuell)
Die Liste kommt täglich in unterschiedlicher Größe.
Mein Wunsch wäre es, wenn man mit dem Makro zu jeder Kundennummer die Anzahl der Herstellnummern und die Höhe Rechnungsbetrag aktuell heraus bekommt. Die Zusammenfassung hätte ich gerne auf einer neuen Mappe.
Wäre cool, wenn ihr mir da helfen könntet.
greetz
Cunster

eitch100 05.07.16 14:04

Das könnte man doch gleich mit Formeln in einem neuen Tabellenblatt in der Originaldatei erledigen...

Und du musst präziser sein. Sind Herstellnummern ein gewisse Anzahl die addiert werden oder wird pro Rechnung eine Herstellnummer addiert? Woher soll man wissen, was das ist?

cunster 05.07.16 14:46

Pro Rechnung(also pro Zeile) gibt es eine neue Herstellernummer.
Davon die Anzahl soll am Ende ausgespuckt werden.
Sorry für meine Ungenauigkeit.

eitch100 05.07.16 15:02

Zitat:

Zitat von eitch100 (Beitrag 28637776)
Das könnte man doch gleich mit Formeln in einem neuen Tabellenblatt in der Originaldatei erledigen...

Und was ist damit? Wenn diejenigen, die die Tabelle erstellen, eine neue Datei bekämen, mit der sie arbeiten sollen.
Zitat:

Zitat von cunster (Beitrag 28637909)
Pro Rechnung(also pro Zeile) gibt es eine neue Herstellernummer.
Davon die Anzahl soll am Ende ausgespuckt werden.

Und warum soll ich die dann zählen? Ist doch dann dieselbe Anzahl wie Rechnungen (bzw. Rechnungsbeträge), die ich eh addiere...

tomcrswer 05.07.16 15:16

Eine Beispieldatei würde wahrscheinlich helfen...

Du willst ein Tabellenblatt das so aussieht?

Code:

  |    A    |          B          |                C                  |
--|-----------|----------------------|-------------------------------------|
1 | Kundennr. | Anzahl Herstellernr. | Rechnungsbetrag für diese Kundennr. |
2 |          |                      |                                    |

Dann wäre VBA nicht notwendig, wie ja auch eitch schon geschrieben hat.

eitch100 05.07.16 15:45

Also... angenommen deine Daten stehen in Tabelle1 (Beschriftung:Kundennummer Zelle A1, Rechnungsbetrag aktuell Zelle N1). Die Werte beginnen ab Zeile 2.

Auswertung ist dann auf Tabelle2 (Beschriftung: Kundennummer Zelle A1, Herstellungsnummer Zelle B1, Rechnungsbetrag Zelle C1)
Code:

Formeln in Tabelle2:
A2
=MIN(Tabelle1!A2:A1000)

A3 und herunterkopieren
=WENN(MAX(Tabelle1!A$2:A$1000)=MAX(A$2:A2);"";KGRÖSSTE(Tabelle1!A$2:A$1000;ZÄHLENWENN(Tabelle1!A$2:A$1000;">"&A2)))

B2 und herunterkopieren
=WENN(ISTZAHL(A2);ZÄHLENWENN(Tabelle1!A$2:A$1000;A2);"")

C2 und herunterkopieren
=WENN(ISTZAHL(A2);SUMMEWENN(Tabelle1!A$2:A$1000;A2;Tabelle1!N$2:N$1000);"")

Edit: So ginge es auch, weil die Formeln Text sowieso ignorieren.
Aber man muss sich da sicher sein. Vorteil: die komplette Spalte wird berücksichtigt...
A2
=MIN(Tabelle1!A:A)

A3 und herunterkopieren
=WENN(MAX(Tabelle1!A:A)=MAX(A$2:A2);"";KGRÖSSTE(Tabelle1!A:A;ZÄHLENWENN(Tabelle1!A:A;">"&A2)))

B2 und herunterkopieren
=WENN(ISTZAHL(A2);ZÄHLENWENN(Tabelle1!A:A;A2);"")

C2 und herunterkopieren
=WENN(ISTZAHL(A2);SUMMEWENN(Tabelle1!A:A;A2;Tabelle1!N:N);"")

Die Kundennummer muss hierbei aber eine Zahl sein. Ist ausgelegt für Zeile 2 bis 1000. Für die Herstellungsnummer habe ich die Häufigkeit der Kundennummer genommen; sollte ja dasselbe ergeben.

P.S. als kleinen Test könntest du auf Tabelle2 noch irgendwo zwei Summen berechnen. Die sollten "günstigstenfalls" identisch sein...:D
Code:

alco z.B. in D2
=SUMME(C:C)

D3
=SUMME(Tabelle1!N:N)


cunster 05.07.16 21:04

Die Tabelle sollte am besten im Ursprungszustand bleiben.
Und ein Makro wär deswegen besser, weil es Personen erstellen sollen, die nicht immer firm in Formeln sind.

Schonmal Danke für eure Mühe! ��

E: hier habe ich die Datei mal hochgeladen: [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Auf Mappe 1 ist ein Auszug der Tabelle und auf Mappe 2 soll das Ergebnis in dieser Form raus kommen.

eitch100 06.07.16 10:50

Also doch in derselben Mappe (Datei) auf einem neuen Tabellenblatt. Ich dachte, es soll in einer neuen Datei gemacht werden? Ein Makro macht aber doch keinen Sinn, wenn es mit Formel genauso geht. Oder verstehe ich etwas falsch?

Warum wurde ab Zeile 3 fixiert? sind da nicht normalereweise nochmal die Überschriften?

Edit: hier habe ich es dir mal in deiner hochgeladenen Datei angepasst...
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

cunster 06.07.16 12:11

Ja das Ergebnis sollte auf einem neuen Tabellenplatz angezeigt werden, sorry wegen des falschen Ausdrucks.
Die Fixierung kann man momentan vernachlässigen, aber da hast du natürlich Recht.
Ich habe so eine ähnliche Liste bereits in Verwendung mit einem Makro aber ich kriege das nicht auf die neue Tabelle abgebildet.
Ein Makro finde ich besser da mit einem Klick bzw einer Tastenkombination alles erledigt ist und somit keine Fehler entstehen können.

cunster 06.07.16 12:44

E:
Sorry Doppelpost

eitch100 06.07.16 13:02

Zitat:

Zitat von cunster (Beitrag 28641255)
Ein Makro finde ich besser da mit einem Klick bzw einer Tastenkombination alles erledigt ist und somit keine Fehler entstehen können.

ein Makro ist mit Sicherheit fehleranfälliger als die Formellösung. Formeln sind nämlich dynamisch; soll heißen, wenn du z.B. in Tabelle 1 etwas änderst, wie z.B. eine neue Spalte einfügst, macht das der Formel nichts. Makros sind in der Regel nicht so programmiert (was nicht heißt, dass es nicht geht)...:T Das kannst du ja mal testen, in dem du in deiner Datei mit Makro auf dem Tabellenblatt mit den Quelldaten vor Spalte A eine neue Spalte einfügst. Ich könnte wetten, dass das Makro dann nicht mehr das gewünschte Ergebnis liefert...:unibrow:

cunster 06.07.16 13:19

Das glaube ich dir :)
Die ausgangstabelle ist immer gleich vom Layout.
Mein Problem ist, dass ich mir dies Makro nicht bauen kann.

eitch100 06.07.16 15:06

dafür brauchst du VBA. Ich könnte dir das in VBA lösen, aber es bringt dir keinen Vorteil und man müsste die Originaldatei auch ändern. Möglicherweise ist ein Makro "cooler", aber ansonsten ist es unnötig...:D

cunster 06.07.16 15:46

Zitat:

Zitat von eitch100 (Beitrag 28641832)
dafür brauchst du VBA. Ich könnte dir das in VBA lösen, aber es bringt dir keinen Vorteil und man müsste die Originaldatei auch ändern. Möglicherweise ist ein Makro "cooler", aber ansonsten ist es unnötig...:D

E:
Wieso müsste man die Originaldatei ändern?
Wenn die Datei so bleiben könnte und man das Ergebnis mittels Makro so bekommt wie es in der Tabelle angegeben, wäre es ein Traum ��
Kannst du den Traum wahr werden lassen? :)

eitch100 06.07.16 17:24

Naja der Code für das Makro muss ja nun irgendwo gespeichert werden. Man könnte ihn natürlich auch in einer neuen Mappe speichern und von dort ausführen. Aber dann muss ich per Code auf das Dateisystem zugreifen und da muss ich mich erst wieder reinfinden, weil ich sowas auch nimmer so oft mache. Oder man müsste immer den richtigen Dateinamen angeben, auf den man zugreift... Habt ihr echt noch Office 2003 laufen oder früher?

cunster 06.07.16 19:06

Der Code für das Makro wird doch in die persönliche Arbeitsmappe (persnl) abgelegt und gespeichert. Den Personen die das machen sollen, wird das ebenfalls so eingespielt; so hatte ich mir das vorgestellt.
Ja Office 2003 ist unser System :-/

eitch100 07.07.16 09:59

Nun gut, ich habe ja die Testdatei und werde es dort mal umsetzen. Ich habe heute allerdings (vermutlich) wenig Zeit. Von daher kann es etwas dauern. Möchtest du es per Tastenkombination (wenn ja welche, also STRG+?) oder per Button auf dem Tabellenblatt?

Soll der Code die Werte selbst berechnen oder soll der Code einfach die Formeln einfügen?

cunster 07.07.16 10:16

Danke dir!
Mach dir kein Stress.
STRG + h wäre gut.
Ich hatte mich gestern vertan. Excel 2007 ist hier vorhanden.

cunster 07.07.16 10:17

Danke dir!
Mach dir kein Stress.
STRG + h wäre gut.
Ich hatte mich gestern vertan. Excel 2007 ist hier vorhanden.

eitch100 07.07.16 11:01

Zitat:

Zitat von eitch100 (Beitrag 28644702)
Soll der Code die Werte selbst berechnen oder soll der Code einfach die Formeln einfügen?

:dozey:

cunster 07.07.16 12:59

Zitat:

Zitat von eitch100 (Beitrag 28644889)
:dozey:

Oh selbst berechnen bitte.

eitch100 08.07.16 14:18

mit Strg+h wird auf Blatt 2 die Tabelle erzeugt. Das ist so gemacht, dass die Kundennummern immer in Zeile 3 starten, der Rechnungsbetrag in Spalte N steht, die Tabellenblätter heißen 1 und 2 und am Ende quasi nochmal Text in Form der Überschriften ist. Im Code in den oberen Zeilen kann man die jeweiligen Startzeilen, Spalten oder Balttnamen anpassen.
[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]

Und... ich übernehme für die Richtigkeit keinerlei Gewähr...:p

cunster 08.07.16 19:53

Danke dir!
Ich kann mir das erst nächste Woche angucken. Ich gucke mir das denn an. Danke für deine Mühe!


Könntest du mir den VBA Code auch hier posten?
Würde den denn in meine persönliche Mappe importieren.

eitch100 12.07.16 14:47

Ich habe dir doch die Datei hochgeladen. Der Code ist in Modul1...

Und bedenke, ich bin bei weitem kein Profi und mein Programmierstil ist vielleicht zweifelhaft, aber es funktioniert...:D Beim "Kundennumern aussortieren" habe ich gar einen fremden Code genommen und nur angepasst.
Code:

Sub Makro1()
'
' Makro1 Makro
'
' Tastenkombination: Strg+h
'
Set quelle = Sheets("1") 'name des blattes mit quelldaten
Set ziel = Sheets("2") 'name des blattes der ausgabe
sz = 3 'erste zeile der kundennummern auf blatt 1
ss = 1 'spalte der kundennummern blatt 1
k = quelle.Cells(65000, ss).End(xlUp).Row - 1 'letzte zeile der kundennummern auf blatt 1 (-1 weil die letzte zelle text ist und keine kundennummer)
r = 14 'spalte des rechnungsbetrages auf blatt 1

z = 9 'erste zeile ausgabe kundennummer auf blatt 2
s = 3 'erste spalte ausgabe kundennummer auf blatt 2

'eventuell alte daten auf blatt 2 löschen
ziel.Range("A1:Z65000").ClearContents

'kundennummern aussortieren
    Dim werte As New Collection
   
    For Each c In quelle.Range("A" & sz & ":A" & k).Cells
        schondrin = False
        For Each v In werte
            If v = c.Value Then schondrin = True
        Next
        If Not schondrin Then werte.Add c.Value
    Next
   
   
    For i = 1 To werte.Count
        ziel.Cells(z - 1 + i, s) = werte(i)
    Next

'herstellnummern und beträge
m = ziel.Cells(65000, 3).End(xlUp).Row 'letzte zeile der kundennummern auf blatt 2

    For l = z To m
        For i = sz To k

            If quelle.Cells(i, 1).Value = ziel.Cells(l, s).Value Then
                hsnr = hsnr + 1
                betr = betr + quelle.Cells(i, r).Value
            End If
           
        Next i
        ziel.Cells(l, s + 1).Value = hsnr
        ziel.Cells(l, s + 2).Value = betr
        hsnr = 0
        betr = 0
    Next l
End Sub



Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.