Hallo Experten,
ich hätte da folgendes Problem :
Tabelle1 hat folgenden Inhalt
Gerät ! Datum ! Datum ! Preis ! Kostenstelle ! Bezeichnung ! …………
Es gibt 5000 Geräte ( Zeilen ) die sich auf 120 Kostenstellen verteilen.
Jede Kostenstelle kann natürlich mehrere Geräte beinhalten.
Nun möchte ich in Tabelle2 die Kostenstellen abrechnen und zwar folgendermaßen :
In einer Zelle gebe ich die Kostenstelle ein und dann starte ich das MAKRO ( das ich suche )
Dann sollen mir in Tabelle2 alle Geräte die dieser Kostenstelle zugeordnet sind ( in Tab.1 zu finden) nebst Datum und Preis schön aufgelistet werden.
Wer hat eine Vorstellung, wie man das bewältigen kann ?
Für Eure Bemühungen bedanke ich mich im voraus recht herzlich.
Gespannte Grüße Peter
Hallo Experten,
Hallo Peter
hast du schon an Varianten
- Zwischenergebnisse in Tabelle 1 ausrechen
bzw.
gedacht?
Gruss
Cabochon
ich hätte da folgendes Problem :
Tabelle1 hat folgenden Inhalt
Gerät ! Datum ! Datum ! Preis ! Kostenstelle ! Bezeichnung !
…………
Es gibt 5000 Geräte ( Zeilen ) die sich auf 120 Kostenstellen
verteilen.
Jede Kostenstelle kann natürlich mehrere Geräte beinhalten.
Nun möchte ich in Tabelle2 die Kostenstellen abrechnen und
zwar folgendermaßen :
In einer Zelle gebe ich die Kostenstelle ein und dann starte
ich das MAKRO ( das ich suche )
Dann sollen mir in Tabelle2 alle Geräte die dieser
Kostenstelle zugeordnet sind ( in Tab.1 zu finden) nebst Datum
und Preis schön aufgelistet werden.
Wer hat eine Vorstellung, wie man das bewältigen kann ?
Für Eure Bemühungen bedanke ich mich im voraus recht herzlich.
Gespannte Grüße Peter
Hallo Peter,
vielleicht hilft folgendes weiter:
die Spalte welche die „Kostenstellen“ enthält markieren und über DATEN - FILTER - AUTOFILTER den Autofilter aktivieren. Klickst Du auf den Pfeil über der Spalte, kannst Du aus allen Kostenstellen die gewünschte aussuchen. Nun werden nur noch die zugehörigen Zeilen angezeigt.
Wenn Du möchtest, kannst Du (auch über ein Makro) alle Zeilen markieren und in Tabelle 2 kopieren.
Als Vereinfachung könntest Du dem gesamten „Datenbereich“ der Tabelle 1 einen Namen zuweisen (über EINFÜGEN - NAME - DEFINIEREN) und diesen zum kopieren mit einem Makro ansprechen.
Gruß
Roland
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo Peter,
vielleicht hilft folgendes weiter:
die Spalte welche die „Kostenstellen“ enthält markieren und
über DATEN - FILTER - AUTOFILTER den Autofilter aktivieren.
Klickst Du auf den Pfeil über der Spalte, kannst Du aus allen
Kostenstellen die gewünschte aussuchen. Nun werden nur noch
die zugehörigen Zeilen angezeigt.
Wenn Du möchtest, kannst Du (auch über ein Makro) alle Zeilen
markieren und in Tabelle 2 kopieren.
Als Vereinfachung könntest Du dem gesamten „Datenbereich“ der
Tabelle 1 einen Namen zuweisen (über EINFÜGEN - NAME -
DEFINIEREN) und diesen zum kopieren mit einem Makro
ansprechen.
Hi Roland,
das was du sagst ist richtig, aber das Makro was die Daten die gefiltert sind ausschneiden soll bezieht sich ja immer auf ein bestimmtes RANGE Object. Dieses Range Object müsste jedesmal neu definiert werden. Dazu kommt noch, dass sich die Kostenstellen für die Geräte permanent ändern und nur periodisch abgerechnet werden.
Hinzu kommt noch das das Makro sehr lang wäre, daher suche ich eine VBA Prozedur, die mir diese ganze Arbeit abnimmt.
Gruß Peter
Hi Cabochon,
mit Pivot Tabellen kenne ich mich nicht so gut aus.
Ich denke aber, dass ich auch damit meinem Wunsch nach einer VBA Lösung nicht näher komme.
Gruß Peter
Hi Peter.
Wie ist´s denn damit:
Sub getIt()
Dim i, j, k, sucheNummer As Integer
i = 1
j = 2
'In der Cells 1,1 steht die suchnummer
sucheNummer = Sheets(„ziel“).Cells(1, 1)
'solange die Quelle eine zeile hat
With Sheets(„quelle“)
While .Cells(i, 1) „“
'wenn die Nummer stimmt
If sucheNummer = .Cells(i, 1) Then
'alle spalten kopieren
'range is nich mein ding!
For k = 1 To 5
ActiveSheet.Cells(j, k) = .Cells(i, k)
Next
j = j + 1
End If
i = i + 1
Wend
End With
End Sub
Die Spalten und Zeilen kann man leicht anpassen. Sind zwar viele Schleifen, aber hoffentlich leicht lesbar.
In dem Sheet „Ziel“ in der Zelle 1,1 (oder nach Bedarf) die zu untersuchende Nummer eingeben. Dann per Makro (Knopf einbauen und den Source drauflegen) die Tabelle ab Zeile 2 füllen.
mfg
Dirk
Hallo Peter,
Cabochon hat recht, mit der Pivottabelle bekommst Du am elegantesten
das was Du brauchst. Für die Pivottabelle gibt es einen ganz brauchbaren Assistenten. Spiel mal damit ein bischen herum, es lohnt sich…
Viel Erfolg
Ullrich Sander
Off Topic, fehlende Variablendeklaration
Sub getIt()
Dim i, j, k, sucheNummer As Integer
…
Hi Dirk,
deine Dim-Anweisung ist unkorrekt, du deklarierst nur die Variable „sucheNummer“, i,j,k werden nicht deklariert.
Teste es mit:
Dim i, j, k, sucheNummer As Integer
MsgBox TypeName(i)
MsgBox TypeName(sucheNummer)
dann siehst du es.
Korekt muss es so aussehen:
Dim i as Integer, j as Integer , k As Integer , sucheNummer As Integer
Gruß
Reinhard
Tabelle1 hat folgenden Inhalt
Gerät ! Datum ! Datum ! Preis ! Kostenstelle ! Bezeichnung !
Es gibt 5000 Geräte ( Zeilen ) die sich auf 120 Kostenstellen
verteilen.
Jede Kostenstelle kann natürlich mehrere Geräte beinhalten.
In einer Zelle gebe ich die Kostenstelle ein und dann starte
ich das MAKRO ( das ich suche )
Dann sollen mir in Tabelle2 alle Geräte die dieser
Kostenstelle zugeordnet sind ( in Tab.1 zu finden) nebst Datum
und Preis schön aufgelistet werden.
Hi Peter,
wenn Tabelle2 so aufgebaut ist:
A B C D E F
1 Kostenstelle:
2 Gerät dat dat preis Kostenstelle bez
dann gib in B1 die Kostenstelle ein und das nachfolgende Makro läuft dann automatisch los. Den Code im VB-Editor bei „Tabelle2“ reinkopieren.
Gruß
Reinhard
Private Sub Worksheet\_Change(ByVal Target As Range)
Dim Quelle As Worksheet, Ziel As Worksheet
If Target.Address(0, 0) "B1" Then Exit Sub
Set Quelle = Worksheets("Tabelle1")
Set Ziel = Worksheets("Tabelle2")
With Ziel
.Range("A3:F" & .UsedRange.Rows.Count).ClearContents
For n = 2 To Quelle.Range("A65536").End(xlUp).Row
If Quelle.Cells(n, 5) = Target.Value Then
Quelle.Range("A" & n & ":E" & n).Copy
.Paste Destination:=.Range("A" & .Range("E65536").End(xlUp).Row + 1)
End If
Next n
End With
Set Quelle = Nothing
Set Ziel = Nothing
End Sub
Hi Reinhard
deine Dim-Anweisung ist unkorrekt, du deklarierst nur die
Variable „sucheNummer“, i,j,k werden nicht deklariert.
Danke für den Hinweis.
Dachte mit Option explicit (nicht im Beispiel, sonst eher die Regel) wird kontrolliert ob alle Variablen deklariert sind, und das gibt mit dem Beispiel keinen Fehler. Das Konstrukt wie ich es verwendet habe ist so gesehen ok.
In der Hilfe steht folgendes Beispiel:
’ Mehrere Deklarationen in einer Zeile. AndereVar hat den Typ
’ Variant, da kein Typ angegeben wird.
Dim AndereVar, Auswahl As Boolean, GebDatum As Date
Tatsächlich wird also bei meinem Konstrukt die Variable deklariert (daher auch Explicit ok) aber die Variable ist vom Typ Variant. Belegt man dann die Variable, zeigt der Test dann den entsprechenden Typ an.
Sicherlich ist es sauberer den Typ je Var anzugeben, aber durch diesen Effekt ist mir das nie aufgefallen. Wer weiss, wie viele Sorgen ich mir hätte ersparen können!
mfg
Dirk
Hi Dirk,
super, war genau das was ich suchte. Vielleicht noch eins:
wie sage ich das ich Zellen ohne Inhalt überspringen möchte ?
Bei While. Cells (i, 1 ) „“ geht die Schleife nur bis zu einer
Zeile ohne Inhalt, dann stoppt er. Soll aber bis unten hin alle Zeilen durchsuchen.
With Sheets(„quelle“)
While .Cells(i, 1) „“
Nochmals Danke
Gruß Peter