Variable Hochzählen
Der Titel ist nicht sehr gut gewählt aber mir fällt da immer nicht viel ein.
Guten Morgen,
ich bin schon wieder fast am verzweifeln. Ich denke mir immer es muss doch gehen aber mir fehlt absolut der Denkansatz.
Also ich möchte, eine bestimmte Anzahl von Zellen auslesen. Diese in eine Variable speichern aber nur wenn der wert nicht schon existiert.
Um das ganze zu verdeutlichen. Ich habe sagen wir mal 200 Zellen. Wo 30 verschieden werte vorkommen( Buchstaben und Zahlen). ich möchte jetzt alle werte auslesen und diese in einer variable speichern. Aber nur wenn diese noch nicht gespeichert wurde. Wie ich werte auslesen kann und diese speichern kann weiß ich schon. Mein Problem ist nur. Wie kann ich den:
1. wenn ich ein wert in einer Variable gespeichert habe einfach die Variable Hochzählen?
( bsp. txt_1 , txt_2 , txt_3 .......)
2. wenn ich den von mir aus schon 20 werte gespeichert habe kontrollieren ob der nächste wert nicht schon existiert. Wie gesagt ich habe z.b. 200 Zellen mit werten und 30 davon sind unterschiedlich. Ich möchte eine liste mit txt_1 - txt_30.
3. die erstellten variablen global dimensionieren. so das ich diese in einem Formular ausgeben lassen kann.
So ich hoffe ihr habt alles verstanden und könnt mir helfen.
Guten Morgen,
ich bin schon wieder fast am verzweifeln. Ich denke mir immer es muss doch gehen aber mir fehlt absolut der Denkansatz.
Also ich möchte, eine bestimmte Anzahl von Zellen auslesen. Diese in eine Variable speichern aber nur wenn der wert nicht schon existiert.
Um das ganze zu verdeutlichen. Ich habe sagen wir mal 200 Zellen. Wo 30 verschieden werte vorkommen( Buchstaben und Zahlen). ich möchte jetzt alle werte auslesen und diese in einer variable speichern. Aber nur wenn diese noch nicht gespeichert wurde. Wie ich werte auslesen kann und diese speichern kann weiß ich schon. Mein Problem ist nur. Wie kann ich den:
1. wenn ich ein wert in einer Variable gespeichert habe einfach die Variable Hochzählen?
( bsp. txt_1 , txt_2 , txt_3 .......)
2. wenn ich den von mir aus schon 20 werte gespeichert habe kontrollieren ob der nächste wert nicht schon existiert. Wie gesagt ich habe z.b. 200 Zellen mit werten und 30 davon sind unterschiedlich. Ich möchte eine liste mit txt_1 - txt_30.
3. die erstellten variablen global dimensionieren. so das ich diese in einem Formular ausgeben lassen kann.
So ich hoffe ihr habt alles verstanden und könnt mir helfen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 44117
Url: https://administrator.de/contentid/44117
Ausgedruckt am: 13.11.2024 um 22:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Sebastian!
Auf die Schnelle das Einlesen ohne Duplikate in ein Array:
Ist noch etwas statisch (maximal 100 Ergebniseinträge, Datenbereich B1:B200), aber ich hoffe, Du siehst das Prinzip. Die Ergebniseinträge sErg(1) bis sErg(100) können dann in weiterer Folge den Formularfeldern zugeordnet werden.
Grüße
bastla
Auf die Schnelle das Einlesen ohne Duplikate in ein Array:
Option Explicit
Sub GetUnique()
Dim oCell As Object
Dim sErg(100) As String
Dim i As Integer, j As Integer
Dim bNeu As Boolean
Dim sWert As String
i = 0
For Each oCell In Range("B1:B200")
bNeu = True
sWert = oCell.Value
For j = 1 To i
If sWert = sErg(j) Then
bNeu = False
Exit For
End If
Next
If bNeu Then
i = i + 1
sErg(i) = sWert
End If
Next
End Sub
Ist noch etwas statisch (maximal 100 Ergebniseinträge, Datenbereich B1:B200), aber ich hoffe, Du siehst das Prinzip. Die Ergebniseinträge sErg(1) bis sErg(100) können dann in weiterer Folge den Formularfeldern zugeordnet werden.
Grüße
bastla
Hallo Sebastian!
Um eine Userform mit allen Begriffen als Labels und je einer zugeordneten Textbox zu befüllen, könntest Du etwa so vorgehen:
Mit der Platzierung / Größe der Objekte musst Du sicher noch experimentieren, ebenso mit der Anordnung in ev mehreren Spalten (lässt sich aus der laufenden Nummer i ableiten).
Die Variablen sErg(i) kannst Du auch durch "Lb(i).Caption" ersetzen.
Grüße
bastla
Um eine Userform mit allen Begriffen als Labels und je einer zugeordneten Textbox zu befüllen, könntest Du etwa so vorgehen:
Option Explicit
Dim Lb() As Control, Tx() As Control
Private Sub CommandButton1_Click()
Dim oCell As Object
Dim sErg(100) As String
Dim i As Integer, j As Integer
Dim bNeu As Boolean
Dim sWert As String
i = 0
For Each oCell In Range("B1:B200")
bNeu = True
sWert = oCell.Value
For j = 1 To i
If sWert = sErg(j) Then
bNeu = False
Exit For
End If
Next
If bNeu Then
i = i + 1
sErg(i) = sWert
'Userform anpassen und ergänzen
Me.Height = i * 20 + 40
ReDim Preserve Lb(i) As Control, Tx(i) As Control
Set Lb(i) = Controls.Add("Forms.Label.1", "lbl_" & CInt(i), True)
With Lb(i)
.Top = i * 20 + 2
.Left = 10
.Width = 58
.Height = 12
.Caption = sWert
End With
Set Tx(i) = Controls.Add("Forms.TextBox.1", "txt_" & CInt(i), True)
With Tx(i)
.Top = i * 20 + 0
.Left = 70
.Width = 150
.Height = 15
.Text = "noch leer"
End With
End If
Next
End Sub
Die Variablen sErg(i) kannst Du auch durch "Lb(i).Caption" ersetzen.
Grüße
bastla
Hallo Sebstian!
zu 1.
zu 2.
Die Buttons würde ich an den Anfang der Userform stellen.
Vorteil: Du kannst Sie, unabhängig davon, wie viele Einträge unten folgen werden, bereits in der Entwurfsansicht einfügen und den entsprechenden Code dazu schreiben. Den Platz dafür hatte ich ohnehin bereits vorgesehen. Sollte er nicht reichen, einfach folgende Änderungen durchführen:
Grüße
bastla
zu 1.
sWert = oCell.Value '***ab hier neu***
If sWert = "-" Or sWert ="" Then
bNeu = False
Else
For j = 1 To i
If sWert = sErg(j) Then
bNeu = False
Exit For
End If
Next
End If '***ab hier wieder alt***
If bNeu Then
zu 2.
Die Buttons würde ich an den Anfang der Userform stellen.
Vorteil: Du kannst Sie, unabhängig davon, wie viele Einträge unten folgen werden, bereits in der Entwurfsansicht einfügen und den entsprechenden Code dazu schreiben. Den Platz dafür hatte ich ohnehin bereits vorgesehen. Sollte er nicht reichen, einfach folgende Änderungen durchführen:
Me.Height = i * 20 + 80 'statt 40
...
With Lb(i)
.Top = i * 20 + 42 'statt 2
...
With Tx(i)
.Top = i * 20 + 40 'statt 0
Grüße
bastla