Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1800to1804
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

Objektvariable nicht zugewiesen

Objektvariable nicht zugewiesen
21.12.2020 10:11:38
PaLa
Hallo liebe Community,
ich bin neu hier, habe aber schon lange die Beiträge in diesem Forum gelesen.
Nun stehe ich selber vor einem Problem, das wahrscheinlich nicht groß ist, welches ich aber leider nicht entschlüsselt bekomme.
Ich habe ein Array ar() mit ca. 30.000 Zahlen. Diese liegen auf den Indizies ar(1, 1) bis ar(1, 30000).
Nun möchte ich folgendes:
Ich möchte, dass für die erste Zahl im Array in einer anderen Liste die identische Zahl gefunden wird.
Dabei benötige ich die Zeile, in der die identische Zahl gefunden wurde.
Die Zeile ist insofern benötigt, weil ich in einer anderen Spalte (aber in der gleichen Zeile) eine Zahl eintragen möchte.
Meine Lösung war folgendermaßen:
(bekomme leider einen Objektvariable nicht festgelegt (Fehler 91) Fehler)
For i = 1 To rcv
Set cell = Range("A2:A" & rc).Find(ar(i, 1), Lookat:=xlWhole)
If cell = ar(i, 1) Then
' Cells(cell.Row, 6) = "1"
Range("F" & cell.Row, "F" & cell.Row).Value = "1"
'Set cell = Nothing
Else
'Set cell = Nothing
End If
Next
Bei set cell durchsuche ich den Bereich nach genau der ersten Zahl im Array.
Ich habe einiges probiert, weiß nun leider nicht weiter.
Lasst euch nicht vom If Else irritieren, das war nur für meine Versuche, weil ich nicht weiter wusste.
Habe schon durch den Debugger gesehen, wenn der Fehler auftritt besitzt cell den Wert Nothing.
Fällt jemandem eine einfachere Methode ein oder weiß, woran der Fehler liegen könnte?
Ich möchte, dass die ganzen Werte im Array in dem anderen Bereich gefunden werden.
Deshalb habe ich die For Schleife eingebaut.
Bei weiteren fragen einfach schreiben :)

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 10:23:57
Nepumuk
Hallo,
teste mal:
For i = 1 To rcv
    Set cell = Columns(1).Find(ar(i, 1), LookIn:=xlValues, Lookat:=xlWhole)
    If Not cell Is Nothing Then
        cell.Offset(0, 5).Value = 1
        Set cell = Nothing
    End If
Next

Gruß
Nepumuk
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 10:35:21
PaLa
Hallo,
danke schon mal für die gute Antwort!
Lasse es gerade laufen.
Gibt es einen Weg das ganze zu beschleunigen oder einfacher zu schreiben, damit es schneller geht?
Gruß
Philip
AW: Objektvariable nicht zugewiesen
21.12.2020 10:47:45
Nepumuk
Hallo Philip,
schau mal ob das schneller ist:
Dim vntReturn As Variant
For i = 1 To rcv
    vntReturn = Application.Match(ar(i, 1), Columns(1), 1)
    If Not IsError(vntReturn) Then Cells(vntReturn, 6).Value = 1
Next

Gruß
Nepumuk
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 10:51:26
Nepumuk
Nochmal Hallo,
so:
vntReturn = Application.Match(ar(i, 1), Columns(1), 0)
Gruß
Nepumuk
AW: Objektvariable nicht zugewiesen
21.12.2020 11:02:33
PaLa
Hallo Nepumuk,
danke dir, ich werde es jetzt testen.
Nur ein paar mehr Infos:
Ich arbeite hier mit einem Testset.
Wenn das funktioniert baue ich es in das echte Makro ein.
In dem Testset arbeite ich zur Beschleunigung bereits mit
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
.EnableEvents = False
End With
--
Im produktiven Set gibt es 4 solcher Arrays, die gefüllt sind. Das größte ist mit 96.000 Zahlen gefüllt.
Dementsprechend müssten jeweils alle Arrays mit dem Bereich verglichen werden und ggf. bei "Match" eine spezifische Zahl eingetragen werden.
Die Arrays befüllen sich jeweils auf 4 verschiedenen Tabs.
Der Vergleich findet in einem 5ten Tab statt.
(Wenn man es einfacher sehen will: alle Zahlen in der ersten Spalte der 4 Tabs mit den Zahlen aus dem 5ten Tab vergleich, wenn es übereinstimmt schreibe spezifische Zahl rein).
Hoffe das hilft dir bisschen beim Verständnis.
Dementsprechend würde ich gerne wissen, ob es einen effizienteren Weg gibt, als meinen gewählten, mit einem Array befüllen und vergleichen.
Viele Grüße
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 11:05:21
Nepumuk
Hallo Philip,
hast du es schon mal mit Formeln getestet (VERGLEICH)?
Gruß
Nepumuk
AW: Objektvariable nicht zugewiesen
21.12.2020 11:13:40
PaLa
Hallo Nepumuk,
nein leider nicht.
Die Formel wäre mir neu.
Hatte angefangen es so zu lösen, wie ich es am Anfang reingesendet hatte, weil ich Erfahrung mit anderen Programmiersprachen habe und deshalb eher über den Weg gegangen bin.
Habe jetzt deinen zweiten Vorschlag getestet, auch mit korrigierter 0 am Ende, damit die beiden Zahlen genau übereinstimmen müssen und bekomme einen Laufzeitfehler 9 (Index außerhalb des gültigen Bereichs) in folgender Spalte:
vntReturn = Application.Match(ar(i, 1), Columns(1), 0)
So langsam bin ich echt am Ende :D
Viele Grüße
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 11:15:38
PaLa
Hallo,
wichtiger Hinweis noch zur vorherigen Nachricht:
Hatte es in Excel mit SVERWEIS probiert und dort klappt alles ohne Probleme.
AW: Objektvariable nicht zugewiesen
21.12.2020 11:18:23
Nepumuk
Hallo Philip,
müsste das nicht
ar(1, i)
lauten?
Mit Formel sollte es meiner Meinung nach schneller sein, da Formeln mit allen Prozessoren laufen, VBA nur mit einem.
Gruß
Nepumuk
AW: Objektvariable nicht zugewiesen
21.12.2020 11:30:28
PaLa
Hallo Nepumuk,
bin gerade am überlegen.
beginnt ein Array in Excel VBA auch bei Index 0?
Theoretisch müsste doch auch ein Array funktionieren, das wie folgt aufgebaut ist:
Dim ar() As Variant
ReDim ar(1 To rcv)
ich brauche ja nur eine Dimension, also eine "Liste". Die Werte werden im Array ja hintereinandere gereiht.
Also ar(4, 5, 6, 7, 8, 9) oder?
Somit müsste ar() an Index 0 ja die Zahl 4 sein oder?
--------
Bezüglich der Formeln.
Hatte mal versucht SVERWEIS in VBA zu verwenden, hatte es aber nicht zusammengebracht.
Ist das möglich?
Du meinst, weil Excel auf allen Kernen des Prozessors läuft oder?
Viele Grüße
Philip
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 11:33:19
Nepumuk
Hallo Philip,
zeig doch mal den Code mit dem du die Arrays füllst.
Gruß
Nepumuk
AW: Objektvariable nicht zugewiesen
21.12.2020 11:39:33
PaLa
Hallo Nepumuk,
Dim ar() As Variant
Sheets("BLO").Select
Range("A2").Select
rcv = Selection.CurrentRegion.Rows.Count
ReDim ar(1 To rcv, 1 To 1)
For i = 2 To rcv
ar(i - 1, 1) = Cells(i, 1)
Next
So befülle ich das Array.
Habe mit MsgBox mal den letzten Wert des Arrays ausgeben lassen.
Der stimmt.
Viele Grüße
Philip
AW: Objektvariable nicht zugewiesen
21.12.2020 11:47:34
Nepumuk
Hallo Philip,
besser so:
Public Sub Beispiel()
    Dim avntValues As Variant, vntItem As Variant
    With Worksheets("BLO")
        avntValues = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value2
    End With
    For Each vntItem In avntValues
        'nur zum testen
        MsgBox vntItem
        Exit For
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 12:04:08
PaLa
Hallo Nepumuk,
die erste Zahl wird richtig ausgegeben.
Ich verstehe nur nicht ganz, was hier vor sich geht :D
Könntest du mir es erklären?
Viele Grüße
AW: Objektvariable nicht zugewiesen
21.12.2020 12:18:04
Nepumuk
Hallo Philip,
als erstes wird der Bereich in Spalte A von Zeile 2 bis zur letzten benutzten Zeile in das Array eingelesen. Und zweites wird dieses Array per For Each durchlaufen. Das ist schneller als deine Methode.
Die MsgBox und Exit For musst du löschen, die sind nur zur Demo drin.
Gruß
Nepumuk
AW: Objektvariable nicht zugewiesen
21.12.2020 12:22:50
PaLa
Hallo Nepumuk,
vielen Dank!
Habe es jetzt auch schon durchblickt.
Inwiefern muss ich jetzt meine Vergleichsschleife anpassen?
Viele Grüße
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 12:28:41
Nepumuk
Hallo Philip,
so:
Public Sub Beispiel()
    Dim avntValues As Variant, vntItem As Variant, vntReturn As Variant
    With Worksheets("BLO")
        avntValues = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value2
    End With
    For Each vntItem In avntValues
        vntReturn = Application.Match(vntItem, Columns(1), 0)
        If Not IsError(vntReturn) Then Cells(vntReturn, 6).Value = 1
    Next
End Sub

Gruß
Nepumuk
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 12:34:36
PaLa
Hallo Nepumuk,
okay verständlich, jedoch bin ich nun auf einem anderen Worksheet.
Die Arrayfüllung findet in BLO statt aber der Vergleich findet in einem anderen Worksheet statt.
Wo muss dann der Arbeitsblattwechsel eingebaut werden?
Viele Grüße
AW: Objektvariable nicht zugewiesen
21.12.2020 12:47:49
Nepumuk
Hallo Philip,
Select und Activate ist zu 99% überflüssig. Du musst nur einen Bezug zur Tabelle herstellen.
Wenn du es so machst wie im Beispiel ist es völlig egal in welchem Tabellenblatt du dich befindest.
Public Sub Beispiel()
    Dim avntValues As Variant, vntItem As Variant, vntReturn As Variant
    With Worksheets("BLO")
        avntValues = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value2
    End With
    With Worksheets("Auswertung") 'Anpassen !!!
        For Each vntItem In avntValues
            vntReturn = Application.Match(vntItem, .Columns(1), 0)
            If Not IsError(vntReturn) Then .Cells(vntReturn, 6).Value = 1
        Next
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Objektvariable nicht zugewiesen
21.12.2020 12:53:45
PaLa
Hallo Nepumuk,
ich danke dir vielmals!
Es funktioniert.
Hatte es mit Select probiert und hat funktioniert.
Viele Grüße!!!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige