Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zelleninhalt mit textbox vergleichen

Zelleninhalt mit textbox vergleichen
21.09.2014 00:41:06
Heiko
Hallo, ich habe folgenden Code in einer Userform stehen:
Private Sub CommandButton1_Click()
Range("A1").Select
Anfang:
If ActiveCell = TextBox1 Then
ActiveCell.Offset(0, 1) = ok
Else
End If
ActiveCell.Offset(1, 0).Select
GoTo Anfang
End Sub

-----------------------------------------------------------------
Eigentlich ist der Code länger, aber so ist er übersichtlicher.
In die Textbox kommen nur Zahlen und in der Tabelle stehen auch nur Zahlen.
Ich vermute das ein .Value fehlt aber habe dieses schon an allen erdenklichen stellen eingefügt ohne Erfolg.
Jetzt die Frage der Fragen
wo liegt der Fehler?
und wie nennt man das ".Value"".offset"usw
Mit freundlichem Gruß
Heiko

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zelleninhalt mit textbox vergleichen
21.09.2014 01:19:38
Heiko
Oh sorry habe den Fehler vergessen zu beschreiben :)
also das Makro erkennt nicht, dass die Inhalte der Zelle und der Textbox gleich sind.
Wenn in der "activecell" eine 1 eingetragen ist
und in der Textbox eine 1 eingetragen ist, macht das Makro mit "Else" weiter
ich habe auch schon den Inhalt der Textbox nach Range("F1") Kopiert (Range("F1") = Textbox1) und dann
if activecell = Range("F1")
doch das gleiche er erkennt es einfach nicht.
Mit freundlichem Gruß
Heiko

Anzeige
Eine TextBox heißt deshalb so, weil sie TEXT ...
21.09.2014 01:19:43
Luc:-?
…enthält, Heiko,
- das kannst du nun wirklich 100fach im Forumsarchiv und anderswo lesen -, muss also noch umgewandelt wdn (CInt, CLng, CSng, CDbl usw). Sonst ist der sichtbare Code soweit OK, nur ist ok vermutlich Text und muss dann "ok" geschrieben wdn (wird sonst für eine Variable gehalten!). Außerdem findet das Pgm so auch kein Ende, da zuletzt stets zu Anfang gesprungen wird. Will mal zu deinen Gunsten vermuten, dass dieser schwerwiegende Lapsus deiner „Vereinfachung“ geschuldet ist. Üblicherweise verwendet man hier zyklische Verarbeitung und kann auf .Select verzichten…
Gruß, Luc :-?

Anzeige
AW: Zelleninhalt mit textbox vergleichen
21.09.2014 01:30:17
Mullit
Hallo,
weiß jetzt nicht was Du genau willst(vermutlich eine Schleife) also mal 3 Möglichkeiten:
Für eine einzelne ausgewählte Zelle:
Option Explicit
Private Sub CommandButton1_Click()
If ActiveCell = TextBox1 Then
ActiveCell.Offset(0, 1) = "ok"
End If
End Sub

Für einen ausgewählten Bereich:
Option Explicit
Private Sub CommandButton1_Click()
Dim objCell As Range
For Each objCell In Selection
If objCell = TextBox1 Then
objCell.Offset(0, 1) = "ok"
End If
Next
End Sub

Für alle Daten in Spalte 1:
Option Explicit
Private Sub CommandButton1_Click()
Dim objCell As Range
For Each objCell In Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1)
If objCell = TextBox1 Then
objCell.Offset(0, 1) = "ok"
End If
Next
End Sub

Und noch eine Array-Variante:
Option Explicit
Private Sub CommandButton1_Click()
Dim avntArray As Variant
Dim ialngIndex As Long
avntArray = Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1)
For ialngIndex = 1 To UBound(avntArray)
If avntArray(ialngIndex, 1) = TextBox1 Then
avntArray(ialngIndex, 1) = "ok"
Else
avntArray(ialngIndex, 1) = vbNullString
End If
Next
Cells(1, 2).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1) = avntArray
End Sub

Gruß,

Anzeige
AW: Zelleninhalt mit textbox vergleichen
21.09.2014 01:42:08
Mullit
Hallo,
wenn Du Zahlen in den Zellen hast, müsstest Du, wie Luc schon schrieb, noch Typkonvertierungen einbauen,
also anhand des letzten Beispiels:
Option Explicit

Private Sub CommandButton1_Click()
Dim avntArray As Variant
Dim ialngIndex As Long
avntArray = Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1)
For ialngIndex = 1 To UBound(avntArray)
    If CStr(avntArray(ialngIndex, 1)) = TextBox1 Then
      avntArray(ialngIndex, 1) = "ok"
    Else
      avntArray(ialngIndex, 1) = vbNullString
    End If
Next
Cells(1, 2).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1) = avntArray
End Sub

Gruß,

Anzeige
AW: Zelleninhalt mit textbox vergleichen
21.09.2014 01:55:40
Mullit
Hallo,
bei den anderen Bsp. geht natürlich auch einfach die .Text-Eigenschaft des Range-Objektes:
Option Explicit

Private Sub CommandButton1_Click()
Dim objCell As Range
For Each objCell In Selection
    With objCell
        If .Text = TextBox1 Then
          .Offset(0, 1) = "ok"
        End If
    End With
Next
End Sub

Gruß,

Anzeige
AW: Zelleninhalt mit textbox vergleichen
22.09.2014 01:54:42
Heiko
hallo, danke schoneimal für die zahlreichen Beispiele.
kopiert und angepasst, so das diese auch in meiner richtigen Tabelle laufen, konnte ich es.
Doch ich kann leider noch nicht nachvollziehen warum es so geht.
ich meine es muss doch auch ohne variablen gehen, es kann doch nicht seien das man so einen Aufwand betreiben muss, nur um eine Zahl in eine Zelle zu bekommen.
Mit freundlichem Gruß
Heiko

Anzeige
AW: Zelleninhalt mit textbox vergleichen
22.09.2014 02:19:06
Heiko
hallo, danke schoneimal für die zahlreichen Beispiele.
kopiert und angepasst, so das diese auch in meiner richtigen Tabelle laufen, konnte ich es.
Doch ich kann leider noch nicht nachvollziehen warum es so geht.
ich meine es muss doch auch ohne variablen gehen, es kann doch nicht seien das man so einen Aufwand betreiben muss, nur um eine Zahl in eine Zelle zu bekommen.
Mit freundlichem Gruß
Heiko

Anzeige
AW: Zelleninhalt mit textbox vergleichen
22.09.2014 07:02:56
Mullit
Hallo,
Du hast nicht ganz unrecht, das geht im Prinzip sogar als Einzeiler:
Option Explicit
Private Sub CommandButton1_Click()
If TextBox1  vbNullString Then
Cells(1, 2).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1) = _
Evaluate("=IF(" & Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1).Address & "=" &  _
TextBox1 & ",""ok"","""")")
Else
MsgBox "Die Box ist leer!", vbExclamation
End If
End Sub
Aber ob ein bis zwei Variablen jetzt soviel Aufwand bedeuten...
Das hier ist Aufwand....
Gruß,

Anzeige
AW: Zelleninhalt mit textbox vergleichen
22.09.2014 07:30:05
Mullit
Hallo,
allerdings müsste man die Box noch auf Zahlenwerte abfragen, sonst läuft man in einen Fehler:
Option Explicit
Private Sub CommandButton1_Click()
If IsNumeric(TextBox1) Then
If TextBox1  vbNullString Then
Cells(1, 2).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1) = _
Evaluate("=IF(" & Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1).Address & "=" & _
TextBox1 & ",""ok"","""")")
Else
MsgBox "Die Box ist leer!", vbExclamation
End If
Else
MsgBox "Die Box enthält keine Zahl!", vbExclamation
End If
End Sub

...also auch nicht mehr so ganz ein Einzeiler....
Gruß,
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zelleninhalt mit Textbox vergleichen in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle eine UserForm mit einer TextBox und einem CommandButton.

  2. Füge den folgenden Code in das Code-Fenster der UserForm ein:

    Private Sub CommandButton1_Click()
       Dim objCell As Range
       For Each objCell In Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1)
           If objCell.Value = TextBox1.Value Then
               objCell.Offset(0, 1) = "ok"
           End If
       Next
    End Sub
  3. Stelle sicher, dass die TextBox nur Zahlen enthält, indem du die Eingabe validierst.

  4. Teste die UserForm, indem du eine Zahl in die TextBox eingibst und auf den CommandButton klickst. Überprüfe, ob in der benachbarten Zelle "ok" erscheint.


Häufige Fehler und Lösungen

  • Problem: Der Inhalt der Zelle und der TextBox wird nicht als gleich erkannt.

    • Lösung: Stelle sicher, dass du die .Value-Eigenschaft verwendest. Beispiel:
      If objCell.Value = TextBox1.Value Then
  • Problem: Die TextBox enthält Text, aber die Zelle enthält eine Zahl.

    • Lösung: Verwende Typkonvertierungen wie CInt oder CDbl, um sicherzustellen, dass die Werte vergleichbar sind. Beispiel:
      If CInt(objCell.Value) = CInt(TextBox1.Value) Then

Alternative Methoden

  • Einzeiler für die gesamte Spalte:

    Private Sub CommandButton1_Click()
      If IsNumeric(TextBox1.Value) Then
          Cells(1, 2).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1) = _
          Evaluate("=IF(" & Cells(1, 1).Resize(Cells(Rows.Count, 1).End(xlUp).Row, 1).Address & "=" & TextBox1.Value & ",""ok"","""")")
      Else
          MsgBox "Die Box enthält keine Zahl!", vbExclamation
      End If
    End Sub
  • Verwendung der .Text-Eigenschaft:

    If objCell.Text = TextBox1.Text Then

Praktische Beispiele

  • Beispiel 1: Überprüfen, ob die Zahl in Zelle A1 mit der Eingabe in der TextBox übereinstimmt und "ok" in Zelle B1 setzen.

  • Beispiel 2: Verwende die Schleife für einen ausgewählten Bereich:

    For Each objCell In Selection
      If objCell.Value = TextBox1.Value Then
          objCell.Offset(0, 1) = "ok"
      End If
    Next

Tipps für Profis

  • Nutze die Option Explicit-Anweisung, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler im Code zu vermeiden.
  • Verwende IsNumeric, um sicherzustellen, dass die Eingabe in der TextBox tatsächlich eine Zahl ist, bevor du Vergleiche anstellst.
  • Experimentiere mit Arrays für eine schnellere Verarbeitung großer Datenmengen:
    Dim avntArray As Variant
    avntArray = Range("A1:A100").Value

FAQ: Häufige Fragen

1. Warum funktioniert mein Code nicht? Stelle sicher, dass du die .Value-Eigenschaft verwendest und Typkonvertierungen durchführst, wenn du mit unterschiedlichen Datentypen arbeitest.

2. Kann ich den Code auch ohne Variablen schreiben? Ja, aber Variablen helfen, den Code leserlicher und wartbarer zu machen. Ein Einzeiler ist jedoch möglich.

3. Was ist der Unterschied zwischen .Value und .Text? .Value gibt den tatsächlichen Wert der Zelle zurück, während .Text den angezeigten Text zurückgibt, was bei formatierten Zahlen Unterschiede zeigen kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige