Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1184to1188
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

bestimmte Spalten mit Werten füllen

bestimmte Spalten mit Werten füllen
strodti
Hallo liebe Excelianer,
ich habe in einer Datei zwei Blätter "Eingabe" und "Zuordnungstabelle" mit identischen Spaltenüberschriften. In "Eingabe" werden Adressdaten u.ä. eingetragen. Über untenstehenden Code werden alle Zeilen, die in Spalte A ein "a" haben, in die "Zuordnungstabelle" kopiert - dies über einen festen Bereich von Spalte B bis Spalte AG.
Sub Tabelle_füllen()
Dim objRang As Range
Set objRang = ActiveSheet.Range(Cells(2, 1), _
Cells(Cells(Rows.Count, 1).End(xlUp).Row, 1))
Application.ScreenUpdating = False
With ActiveSheet
For Each c In objRang
If c = "a" Then
.Range(Cells(c.Row, 2), Cells(c.Row, 33)).Copy _
Destination:=Worksheets("Zuordnungstabelle").Cells(Sheets(" _
Zuordnungstabelle"). _
Cells(Rows.Count, 5).End(xlUp).Row + 1, 2)
End If
Next
End With
End Sub
Mein Problem ist nun, dass wenn in "Eingabe" neue Felder unter Umständen nötig sind, mit obigem Code über den Range dann die Einträge nicht mehr zwingend der richtigen Spalte zugeordnet sind. (Wenn ich neue Felder immer rechts, außerhalb meines Range einfüge habe ich kein Problem - logisch, aber es kann vorkommen, dass auch zwischendrin neue Felder eingefügt werden müssen.)
Daher die Frage, wie der Code geändert werden muss, um die Einträge den identischen Spaltenbeschriftungen zuzuordnen, also ein Abgleich der Spaltenüberschriften erfolgt.
Hintergrund: Ich greife aus einer anderen Datei auf die "Zuordnungstabelle" per SVERWEIS zu, und damit darf sich die Spaltennummer nicht verändern.
Wenn mir (wiedermal) jemand helfen könnte?
Gruß,
Tobias

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
könnte wirklich hilfe gebrauchen!
16.11.2010 18:50:54
strodti
Hallo Leute,
findet sich heute niemand der mir helfen kann (oder will)!?
Habe zwischenzeitlich versucht mittels eines ähnlichen Codes es zu lösen - jedoch erfolglos.
Hier eine Beispieltabelle mit den beiden Codes: dem bisherigen, der super funktionert (als Bereich), und mein dilettantischer Versuch, den funktionierenden Code in den anderen einzubauen.
https://www.herber.de/bbs/user/72315.xls
Gruß,
Tobias
vielleicht mit Spezialfilter
18.11.2010 08:18:27
Tino
Hallo,
vielleicht hilft Dir der Spezialfilter?
Sub Liste()
Dim rngKrit As Range, rngListe As Range, rngAusgabe As Range
Dim lngCol&

Const SuchWert As String = "a"

With Tabelle4 'Adresseneingabe 
    lngCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    Set rngListe = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp)).Resize(, lngCol)
End With

With Tabelle1 'Zuordnungstabelle 
    Set rngAusgabe = .Range("B5", .Cells(5, .Columns.Count).End(xlToLeft))
    Set rngKrit = Cells(1, .Columns.Count).Resize(2, 1)
End With

    rngKrit(1, 1) = "Status"
    rngKrit(2, 1) = "'=" & SuchWert
    
    rngListe.AdvancedFilter xlFilterCopy, rngKrit, rngAusgabe
    
    rngKrit.Clear
End Sub
Gruß Tino
Anzeige
noch eine Variante
18.11.2010 09:08:27
Tino
Hallo,
diese ist aber etwas schwer zu verstehen, vielleicht kannst Du damit was anfangen.
Diese Sucht die entsprechende Überschrift in der 'Zuordnungstabelle',
ist diese nicht vorhanden, werden die Daten auch nicht geschrieben.
Sub Liste1()
Dim ArrayListe(), ArrayAusgabe(), tmpArray()
Dim lngCol&, MaxRow&, varCol
Dim A&, B&, C&

Const SuchWert As String = "a" 'Suchwert 

With Tabelle4 'Adresseneingabe 
    'Koordinaten der Tabelle suchen 
    lngCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
    lngCol = lngCol - 1
    MaxRow = .Cells(.Rows.Count, 1).End(xlUp).Row
    'Array größe bestimmen 
    Redim Preserve ArrayListe(lngCol)
    Redim Preserve ArrayAusgabe(lngCol)
    Redim Preserve tmpArray(lngCol)
    'Datenliste in Array schreiben, Überschrift in ArrayAusgabe 
    With .Range("A1", .Cells(MaxRow, 1))
        For A = 0 To lngCol
            ArrayListe(A) = .Offset(0, A)
            ArrayAusgabe(A) = tmpArray
            ArrayAusgabe(A)(0) = ArrayListe(A)(1, 1)
        Next A
    End With
End With

'Ausgabeliste füllen wenn Bedingung erfüllt 
For A = 2 To Ubound(ArrayListe(0))
    If ArrayListe(0)(A, 1) = SuchWert Then
        B = B + 1
        For C = Lbound(ArrayListe) To Ubound(ArrayListe)
            ArrayAusgabe(C)(B) = ArrayListe(C)(A, 1)
        Next C
    End If
Next A

With Tabelle1 'Zuordnungstabelle 
    'alte Daten löschen, eventuell anpassen ********************** 
    .Range("A6:G" & .Rows.Count).ClearContents
    '************************************************************* 
    For A = Lbound(ArrayAusgabe) To Ubound(ArrayAusgabe)
        'Spalte suchen 
        varCol = Application.Match(ArrayAusgabe(A)(0), .Rows(5), 0)
        'Spalte gefunden? 
        If IsNumeric(varCol) Then
            'Daten einfügen 
            .Cells(5, varCol).Resize(Ubound(ArrayAusgabe(A)) + 1, 1) = _
            Application.Transpose(ArrayAusgabe(A))
        End If
    Next A
End With

End Sub
Gruß Tino
Anzeige

325 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige