Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Vergleich in VBA
#1
Hallo Forumsfreunde,

ich stehe gerade auf der Leitung.
Dieser Code läuft auf der Tabelle2 ohne Probleme:

Sub werte_uebertragen()
 Dim i As Integer
 Dim zeilemax As Integer
 
 
 zeilemax = ActiveSheet.Cells(1048576, 1).End(xlUp).Row
'Dieser Befehl bestimmt die Länge der Einträge in der aktiven Tabelle

    For i = 1 To zeilemax
 
        wert = Range("A" & i).Value

        myVar = Application.WorksheetFunction.Match(wert, Range("A:A"), 0)
   
    MsgBox myVar

    Next i
 End Sub

Jetzt will ich, dass match einen Bereich auf der Tabelle1 überprüft ob der gleiche wert in der Spalte A steht:

Sub werte_uebertragen()
 Dim i As Integer
 Dim zeilemax As Integer
 
 
 zeilemax = ActiveSheet.Cells(1048576, 1).End(xlUp).Row
'Dieser Befehl bestimmt die Länge der Einträge in der aktiven Tabelle

    For i = 1 To zeilemax
 
        wert = Range("A" & i).Value

        myVar = Application.WorksheetFunction.Match(wert, Worksheets("Tabelle1").Range("A:A"), 0)
   
    MsgBox myVar

    Next i
 End Sub

Dabei läuft mir der Code auf einen Fehler:
Die match-Eigenschaften des worksheetFunctionObjekts kann nicht zugeordnet werden.

Wie spreche ich die Tabelle 1, Bereich Spalte A denn nun richtig an?

Vielen Dank für eure Ideen
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#2
Hallo Heinz,

Zitat:        myVar = Application.WorksheetFunction.Match(wert, Worksheets("Tabelle1").Range("A:A"), 0)

so ganz auf die Schnelle sehe ich, daß Du mit wert eine Range eingibst, die Du in der gleichen Zeile schon wieder veränderst.
Da fragt das Excel meiner Meinung nach, was denn nun gemacht werden soll.

Ich bin dann erst mal weg.de ... Arzttermin
________________________________________________________________________
wer aufgibt, ohne es versucht zu haben, gibt einfach nur auf!

Grüße aus Norderstedt, Peter
Antworten Top
#3
Hallo Käptn,

auf der Tabelle 1 stehen Begriffe, die auch auf der Tabelle 2 stehen.

ich will nun die Begriffe der Reihe nach auf der Tabelle 2 aufnehmen und mit vergleich prüfen lassen, wo sie auf der Tabelle 1 stehen.

Wenn ich die Zeilennummer weis, kann ich ja den Betrag, der neben dem Wert in der Tabelle 2 steht neben den Wert in der Tabelle 1 kopieren.
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#4
Hi Heinz,

(07.04.2016, 13:22)Heinz Ulm schrieb: Wenn ich die Zeilennummer weis, kann ich ja den Betrag, der neben dem Wert in der Tabelle 2 steht neben den Wert in der Tabelle 1 kopieren.

und warum nicht mit SVERWEIS?
Antworten Top
#5
Hi Ralf,

daran hatte ich auch schon gedacht, meine Firma möchte dies aber nicht.

Es sind mehrere Preistabellen, die in eine eingepflegt werden sollen, so nach dem Stil:

Die neue Preistabelle in die Übergabetabelle kopieren und dann das Makro laufen lassen, damit die insgesamt 5000 Artikel von 30 Lieferanten jeweils angepasst werden.

Den optimalen Arbeitsweg müssen wir erst noch besprechen.

Gruß Heinz
Es ist nicht genug, zu wissen. Man muss es auch anwenden.
Es ist nicht genug, zu wollen. Man muss es auch tun.
Antworten Top
#6
Hallo Heinz,

Bin am Handy, deswegen nur Kurz:

Statt Worksheetfunction Application.Match( ) nehmen,

Dann die Funktion mit If IsNumeric(Applications.Match()) abfragen 
Je nach Wahr kannst Du dann die auf Abfrage mit Else verzweigen.

Beispiele hattest Du vor langem bei anderer Gelegenheit schon bekommen
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • Heinz Ulm
Antworten Top
#7
Hallo Heinz,

so jetzt kann ich Dir eine Funktionierende Lösung vorstellen:

Code:
Sub werte_uebertragen()
Dim i As Long
Dim zeilemax As Long
Dim myVar As Variant
Dim wert  'selber dimensionieren
zeilemax = ActiveSheet.Cells(1048576, 1).End(xlUp).Row
'Dieser Befehl bestimmt die Länge der Einträge in der aktiven Tabelle

   For i = 1 To zeilemax
       wert = Range("A" & i).Value
       myVar = Application.Match(wert, Worksheets("Tabelle1").Range("A:A"), 0)
   If IsNumeric(myVar) Then
     MsgBox wert & " ist in Zeile " & myVar & " der Tabelle1 vorhanden)"
   Else
     MsgBox wert & " ist in Tabelle1 nicht vorhanden"
   End If

   Next i
End Sub
Schau Dir die Variablen an.
Gruß Atilla
Antworten Top


Gehe zu:


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