Suche Lösung

Moderator: ModerationP

Suche Lösung

Beitragvon MBHomeservice » 01. Sep 2017, 13:10

Hallo zusammen, ich habe ein Problem zu dem ich einfach keine Lösung finde. Im Anhang habe ich eine Beispieltabelle angehangen. Meine Frage lautet: Wie bekomme ich es hin das die Daten aus der Eingabemaske in die jeweiligen Tabellen angehangen werden. Die daten der Eingabemaske ändern sich jede woche. Kann mir da jemand weiter helfen? Gruß Marcel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon Xlsibb » 01. Sep 2017, 13:38

Hallo,

also zunächst mal verstehe ich deine Tabelle nicht.
Du hast in deiner Eingabemaske mehrere Überschriften von Spalte C-F. Diese tauchen aber nicht in deinen Blättern auf, jedenfalls nicht 1:1, sondern leicht verändert. Dann gibt es in deinen Blättern weitere Überschriften, die in deiner Eingabemaske gar nicht auftauchen. So kannst du keine ordentliche Datenübertragung gewährleisten.
OK, mal angenommen, du hast das bereinigt, dann kannst du das mit VBA wie folgt machen:

Code: Alles auswählen
Sub Datenuebertragung()

    Dim i As Integer
    Dim r1 As Integer, r2 As Integer
    Dim c As Integer
    Dim strSheet As String
   
    With Sheets(1)
        For r1 = 2 To .Cells(2, 1).End(xlDown).Row
            strSheet = .Cells(r1, 2).Value
            r2 = Sheets(strSheet).Cells(1, 1).End(xlDown).Row + 1
            Sheets(strSheet).Cells(r2, 1).value = .cells(r1, 1).Value
            For c = 3 To 6
                Sheets(strSheet).Cells(r2, c - 1).Value = .Cells(r1, c).Value 'Spalten müssen identisch lauten und in gleicher Reihenfolge auftauchen.
            Next c
        Next r1
    End With
   
End Sub


Code ist ungetestet, weil das bei deiner Tabelle ja nicht funktionieren wird... ^^
Benutzeravatar
Xlsibb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 874
Registriert: 26. Feb 2009, 17:07

Suche Lösung

Beitragvon MBHomeservice » 01. Sep 2017, 13:54

Ein RIESEN RIESEN DANKESCHÖN für die Hilfe.
Hat in der Testtabelle funktioniert, muss jetzt zwar die anderen Tabellen umschreiben aber das nehm ich gern in kauf.
Danke nochmals.
Zuletzt geändert von MBHomeservice am 02. Sep 2017, 17:54, insgesamt 2-mal geändert.
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon MBHomeservice » 01. Sep 2017, 14:57

So, nun hab ich es auf die richtige Tabelle übertragen. Da funktioniert es aber nicht richtig. Die Tabelle hab ich angehangen.
Kann da niemand weiter helfen?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon Xlsibb » 04. Sep 2017, 07:36

Hi.

Du hast deine 2. Datei leider im xlsx-Format gespeichert. Bedeutet: Makros weg!
Und jetzt??? ^^
Benutzeravatar
Xlsibb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 874
Registriert: 26. Feb 2009, 17:07

Re: Suche Lösung

Beitragvon MBHomeservice » 04. Sep 2017, 08:07

ok, sorry, ich hab nun zwei tabellen angehangen. 1. die testtabelle wo es funktioniert und die 2. die reguläre tabelle wo es nicht funktioniert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon Xlsibb » 04. Sep 2017, 09:32

Hallo,

ja klar funktioniert das nicht. Du musst auch deinen Code auf deine Tabelle anpassen:

Code: Alles auswählen
Sub Datenuebertragung()

    Dim i As Integer
    Dim r1 As Integer, r2 As Integer
    Dim c As Integer
    Dim strSheet As String
   
    With Sheets(8) 'deine Eingabemaske ist nun nicht mehr Blatt 1, sondern Blatt 8!!!
        For r1 = 2 To .Cells(2, 2).End(xlDown).Row 'hier habe ich auf Spalte 2 korrigiert, da in Spalte 1 Formeln drin sind und er sonst nach Tabellenblättern ohne Namen sucht.
            strSheet = .Cells(r1, 2).Value
            r2 = Sheets(strSheet).Cells(Sheets(strSheet).Rows.Count, 1).End(xlUp).Row + 1 'hier habe ich die "Pfeil-nach-oben-Methode" verwendet, um auch leere Tabellen füllen zu können.
            Sheets(strSheet).Cells(r2, 1).Value = .Cells(r1, 1).Value
            For c = 3 To 9
                Sheets(strSheet).Cells(r2, c - 1).Value = .Cells(r1, c).Value 'Spalten müssen identisch lauten und in gleicher Reihenfolge auftauchen.
            Next c
        Next r1
    End With
   
End Sub
Benutzeravatar
Xlsibb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 874
Registriert: 26. Feb 2009, 17:07

Re: Suche Lösung

Beitragvon MBHomeservice » 04. Sep 2017, 10:30

so, nun kann ich recht herzlichen dank sagen. das hat funktioniert.
Vieleicht kannst du mir noch bei einem anderen Problem helfen.
In der Tabelle "aktuelle Auswertung" - in den Spalten D,F,H,J,L,N,P,R Zellbereiche 2-31 holt sich die Tabelle immer die Zahlen aus den jeweiligen Namentlich zugehörigen Tabellen die Werte. Leider müsste ich das nun immer die aktuellen Zellangaben mit Suchen und Ersetzen korriegieren um die aktuellen Werte zu haben. Kann ich das auch anders bewerkstelligen? Es müsste ja nun sich in Zelle C1 das Datum ändern und in den oben aufgeführten Zellen die Werte zu diesem Datum einfinden.
Gruß Marcel
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon Xlsibb » 04. Sep 2017, 12:07

Hallo,

als Beispiel Spalte D:

=INDEX(Hellboy!L:L;ANZAHL(Hellboy!L:L)+1)

Deine Matrix ist Spalte L. Nun brauchst du den letzten Wert dieser Spalte. Das kannst du mit ANZAHL(...)+1 errechnen. Da du nur Zahlen hast, zählt Excel, wieviele Zellen Zahlen enthalten. Da die Überschrift noch dabei ist, kommt das mit +1 noch eine Zeile tiefer. Et voilà.

Entsprechend für alle Tabellen und Auswerte-Zellen.
Benutzeravatar
Xlsibb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 874
Registriert: 26. Feb 2009, 17:07

Re: Suche Lösung

Beitragvon MBHomeservice » 04. Sep 2017, 12:19

Danke für die schnelle Rückmeldung. Du bist ein Genie. Genau sowas habe ich gesucht. OK, dann hab ich ja jetzt erst mal was vor mir. ;-)
Danke nochmals und Gruß Marcel
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon MBHomeservice » 04. Sep 2017, 12:40

nun steh ich vor einem neuen Problem.
Die Namen in der Namensspalte aus der Tabelle "aktuelle Auswertung" wird aus der Tabelle "Eingabemaske" geholt. Somit kann es sein das sich die Reihenfolge der Namen ändert. Mit deiner Formel =INDEX(Hellboy!L:L;ANZAHL(Hellboy!L:L)+1) dürfte sich die Reihenvolge ja nicht ändern. Ich hatte nun an eine =WENN Abfrage gedacht um die Namen in der Namensspalte mit der Formel zu vergleichen. Kann ich das auch einfacher umsetzen? Oder besser gefragt wie kann ich aus =INDEX(Hellboy!L:L;... automatisch ein =INDEX(Pearlman!L:L;... machen?
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon Xlsibb » 04. Sep 2017, 13:40

:-D

Das dachte ich mir schon fast...

Du kannst schreiben:

=INDEX(INDIREKT("'"&B2&"'!L:L");ANZAHL(INDIREKT("'"&B2&"'!L:L"))+1)

Mit der Formel kannst du's sogar nach unten ziehen. ^^
Eigentlich verzichtet man gerne auf INDIREKT, weil die Formel deine Tabelle recht langsam macht. Aber wenn du einen Bezug auf ein noch unbekanntes Tabellenblatt machst, das Tabellenblatt aber aus einer Zelle heraus liest, geht das nur mit INDIREKT.
Benutzeravatar
Xlsibb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 874
Registriert: 26. Feb 2009, 17:07

Re: Suche Lösung

Beitragvon Xlsibb » 04. Sep 2017, 13:53

Meinen Code kannst du noch kürzen. Ich hatte die Schleife nur drin, weil ich am Anfang noch nach den Spaltennamen gesucht habe.
Daher:

Code: Alles auswählen
Sub Datenuebertragung()

    Dim i As Integer
    Dim r1 As Integer, r2 As Integer
    Dim strSheet As String
   
    With Sheets(8) 'deine Eingabemaske ist nun nicht mehr Blatt 1, sondern Blatt 8!!!
        For r1 = 2 To .Cells(2, 2).End(xlDown).Row 'hier habe ich auf Spalte 2 korrigiert, da in Spalte 1 Formeln drin sind und er sonst nach Tabellenblättern ohne Namen sucht.
            strSheet = .Cells(r1, 2).Value
            r2 = Sheets(strSheet).Cells(Sheets(strSheet).Rows.Count, 1).End(xlUp).Row + 1 'hier habe ich die "Pfeil-nach-oben-Methode" verwendet, um auch leere Tabellen füllen zu können.
            Sheets(strSheet).Cells(r2, 1).Value = .Cells(r1, 1).Value
            Sheets(strSheet).range(sheets(strsheet).cells(r2,3), sheets(strsheet).cells(r2,9)).Value = .range(.Cells(r1, 3), .cells(r1,9)).Value 'Spalten müssen identisch lauten und in gleicher Reihenfolge auftauchen.
        Next r1
    End With
   
End Sub
Benutzeravatar
Xlsibb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 874
Registriert: 26. Feb 2009, 17:07

Re: Suche Lösung

Beitragvon MBHomeservice » 04. Sep 2017, 14:50

Danke vielmals für die Hilfe. Nun werd ich erst mal alles umschreiben und dann mal schauen ob es nun so funzt wie ich es mir vorstelle. Gruß Marcel
MBHomeservice
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 45
Registriert: 26. Nov 2008, 15:17

Re: Suche Lösung

Beitragvon Xlsibb » 04. Sep 2017, 14:57

<nix> (hatte zu quer gedacht).
Benutzeravatar
Xlsibb
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 874
Registriert: 26. Feb 2009, 17:07

Nächste

Zurück zu Excel Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: DerHoepp, Dynos, Steini666, stephanr, vatifant und 15 Gäste