Werte einsortieren
#1
Sad 
Hallo clever - excel - forum,

ich benötige mal wieder eure Unterstützung.

Mein Problem: Ich habe auf dem Tabellenblatt 1 in Spalte A Nummern stehen, und in Spalte B die dazugehörigen Werte. Jetzt sollen diese Werte auf das Tabellenblatt 2 in die Spalte B entsprechend zu den dortigen Nummern der Spalte A einsortiert werden. Die Tabellen sind sowohl in Tabelle 1 und auch in Tabelle 2 dynamisch, sind jeweils von vorherigen Eingaben abhängig.
 
Beispiel: Auf Tabellenblatt 1 ist zur „Nummer 7“ der „Wert 391“ zugewiesen. Dieser Wert soll per Makro auf das Tabellenblatt 2 zur der dortigen „Nummer 7“ als in das Feld „E4“ eingetragen werden „Nummer 13“ mit „Wert 390“ auf Feld „E16“, „Nummer 5“ mit „Wert 379“ auf Feld „E17“ usw.
 
Auf dem Tabellenblatt 1 unter Spalte „G-H (Ziel)“ ist das für mich angestrebte Ziel, so soll es dann aussehen.

Ich habe bisher noch keine Idee oder kenne noch keinen Befehl, der mir diese erlaubt, da meine VBA-Kenntnisse noch nicht so weit sind.
Jetzt benötige ich Eure Hilfe, wie kann ich das realisieren?
 
Ich hoffe, mich mit meinem Problem verständlich ausgedrückt zu haben.
 
Eine Testdatei habe ich mal angefertigt und ist angehängt.
In meiner Testdatei habe ich auch schon mal etwas vorbereitet. Über den blauen Button werden die Werte von der Spalte B (Tabellenblatt 1) auf die Spalte B (Tabellenblatt 2) leider nur „kopiert ohne Einsortierung“. Und damit man nicht ständig die Tabellenblätter hin und her wechseln muss, als Kontrolle in die Spalte E (Tabellenblatt 1), zurückkopiert.

Ich bin für jede Hilfe und Unterstützung dankbar.

Marvin


Angehängte Dateien
.xlsm   Test.xlsm (Größe: 22,87 KB / Downloads: 8)
Top
#2
Hallo,

das geht mit dem SVerweis:

Tabelle2

AB
2NummerWert ist
320260
47391
516296
68311
715352
81345
922287
1014367
116209
1218254
139264
1419312
152263
1613390
175379
1821305
193333
2017238
2110329
2225337
2323243
244344
2511314
2624261
2712239
Formeln der Tabelle
ZelleFormel
B3=SVERWEIS(A3;Tabelle1!A$3:B$27;2;FALSCH)

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#3
Hallo Klaus Dieter,

ja, das funktioniert, jedoch für mich nur bedingt.
Die Tabelle ist dynamisch, das heißt auch, die Anzahl der Zeilen kann von 5 bis 100 sein. Und ich möchte das gerne in mein Makro einbauen.
Bei deiner Antwort, muss ich den Sverweis ja in die einzelnen Zellen reinschreiben.

Kann man das nicht über eine For-Next-Schleife oder anders realisieren?

Ich bin für jede Hilfe und Unterstützung dankbar.

Marvin
Top
#4
Code:
Sub Übertragen()
Dim i As Long, i1 As Long, i2 As Long, x As Long
Dim rFund As Range, rBereich2 As Range


i2 = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row
Set rBereich2 = Worksheets("Tabelle2").Range("A3:A" & i2)


With Worksheets("Tabelle1")
   
    i1 = .Cells(Rows.Count, 1).End(xlUp).Row
   
    For i = 3 To i1
         
         Set rFund = rBereich2.Find(.Cells(i, 1).Value, LookIn:=xlValues, Lookat:=xlWhole)
        If Not rFund Is Nothing Then
             rFund.Offset(, 4).Value = .Cells(i, 1).Offset(, 1).Value
        End If
       
    Next i

End With

set rfund = nothing : set rbereich2 = nothing

end sub
Top
#5
Hallo,

dynamisch im Sinne von Daten die dazukommen, ist ja (fast) jede Excelliste. Bestimmt gehöre ich nicht zu den Leuten, die von der Verwendung von Makros abraten. Aber für so ein kleine Liste macht das nun wirklich keinen Sinn. Zumal es eine Standardfunktion gibt, die beim Fortschreiben von Listen automatisch auch die Formel aus den voran gegangenen Zeilen übernimmt.

Zitat aus der Excelhilfe:

[b]Erweiterung der Listenformatierung und -formeln.[/b] Wenn Sie neue Zeilen mit Daten am Ende einer Liste hinzufügen, werden von Excel auf die neuen Zeilen konsistente Formatierungen und Formeln übertragen. Damit ein Format erweitert wird, müssen drei von fünf vorangegangenen Zellen dasselbe Format verwenden. Damit eine Formel erweitert wird, müssen alle vorangegangenen Formeln konsistent sein.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Top
#6
Hallo ralf_b

erstmal vielen Dank, das du mir hilfst. Ich habe versucht deinen Code zu verstehen, da er bei mir nicht funktioniert und somit nicht das macht, was ich möchte.
Die einzelnen Zeilen habe ich mal für mich auskommentiert, was diese Zeilen machen sollen. Bei einigen fehlt mir aber noch einiges an Wissen.
Wäre schön, wenn du mir die fehlenden Erklärungen ergänzen könntest und mich weiter unterstützen kannst.

Code:
Sub Übertragen1()
Dim i As Long, i1 As Long, i2 As Long, x As Long                                                'Deklaration der Variablen i, i1, i2, x
Dim rFund As Range, rBereich2 As Range                                                          'Deklaration Bereiche rFund, rBereich2 als Range

i2 = Worksheets("Tabelle2").Cells(Rows.Count, 1).End(xlUp).Row                                  'i2 = letzte Zeile Tabelle 2
Set rBereich2 = Worksheets("Tabelle2").Range("A3:A" & i2)                                       'rBereich2 (A3-A mit letzter Zeile)

With Worksheets("Tabelle1")                                                                     'mit Tabellenblatt 1
    i1 = .Cells(Rows.Count, 1).End(xlUp).Row                                                    'i1 = Anzahl letzte Zelle in Spalte A
    For i = 3 To i1                                                                             'Schleife i Beginn Zeile 3 bis Anzahl letzte Zeile Spalte A
        Set rFund = rBereich2.Find(.Cells(i, 1).Value, LookIn:=xlValues, Lookat:=xlWhole)       '?
        If Not rFund Is Nothing Then                                                            '?   
             rFund.Offset(, 4).Value = .Cells(i, 1).Offset(, 1).Value                           '?
        End If                                                                                  'Ende von If
    Next i                                                                                      'Schleife next i
End With                                                                                        'Ende von With

Set rFund = Nothing: Set rBereich2 = Nothing                                                    '?

End Sub
Im Voraus vielen Dank

Marvin
Top
#7
wenn der code nicht funktioniert bei dir, dann  stimmen deine Angaben wohl nicht. 

Code:
Set rFund = rBereich2.Find(.Cells(i, 1).Value, LookIn:=xlValues, Lookat:=xlWhole)      'Sucht den wert aus zelle(i,1) in rBereich2 (in Tabelle 2)
        If Not rFund Is Nothing Then                                      ' wenn es ein Ergebnis gibt,dann hat rfund einen Wert bzw, ist nicht nothing
            rFund.Offset(, 4).Value = .Cells(i, 1).Offset(, 1).Value 
            ' rfund ist ein Range , offset(zeile,spalten) geht um 4 Spalten nach rechts vom fund
            ' cells(i,1) .offest(0,1) nimmt den Wert von einer spalte rechts von cells(i,1)

set bla = nothing  löscht objekte, damit sie keine Speicherleichen werden
Top
#8
Hallo ralf_b

an Hand deiner Auskommentierung konnte ich den Fehler entdecken und es funktioniert jetzt bei mir einwandfrei.

Vielen herzlichen Dank für deine Mithilfe und bleib gesund.

Mit freundlichen Grüßen

Marvin
Top
#9
danke für die rückmeldung
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste