Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1192to1196
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

Alle Variabeln unterschiedlich

Alle Variabeln unterschiedlich
alifa
Hi Forum,
Ich habe ein Makro mit 21 Variabeln. Kennt jemand eine Funktion, mit dem die "Unterschiedlichkeit" geprüft werden kann, auch bei zweistelligen Zahlen. Damit der Code nicht so lang wird, indem man Variable für Varible auf unterschiedlich prüft? Der Wert meiner Variabeln: 1 To 21, also meist zweistellige Zahlen.
Gruß, Erhard

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Alle Variabeln unterschiedlich
22.12.2010 09:05:43
Rudi
Hallo,
sehr unscharfe Beschreibung.
evtl. so:
Sub ttt()
Dim var1, var2, var3, var4, var5, var6, var7
Dim var8, var9, var10, var11, var12, var13, var14
Dim var15, var16, var17, var18, var19, var20, var21
Dim oVar As Object
var1 = 1
var2 = 2
var3 = 3
var4 = 4
var5 = 5
var6 = 6
var7 = 7
var8 = 8
var9 = 9
var10 = 10
var11 = 11
var12 = 12
var13 = 13
var14 = 14
var15 = 15
var16 = 16
var17 = 17
var18 = 18
var19 = 19
var20 = 20
var21 = 21
Set oVar = CreateObject("Scripting.Dictionary")
oVar(var1) = 0
oVar(var2) = 0
oVar(var3) = 0
oVar(var4) = 0
oVar(var5) = 0
oVar(var6) = 0
oVar(var7) = 0
oVar(var8) = 0
oVar(var9) = 0
oVar(var10) = 0
oVar(var11) = 0
oVar(var12) = 0
oVar(var13) = 0
oVar(var14) = 0
oVar(var15) = 0
oVar(var16) = 0
oVar(var17) = 0
oVar(var18) = 0
oVar(var19) = 0
oVar(var20) = 0
oVar(var21) = 0
If oVar.Count = 21 Then
MsgBox "Alle unterschiedlich"
Else
MsgBox "Nicht alle unterschiedlich"
End If
End Sub

Gruß
Rudi
Anzeige
auch ne Variante
22.12.2010 10:20:33
Rudi

Sub ttt()
Dim var1, var2, var3, var4, var5, var6, var7, _
var8, var9, var10, var11, var12, var13, var14, _
var15, var16, var17, var18, var19, var20, var21
Dim oVar As Object, myVar
var1 = 1
var2 = 1
var3 = 3
var4 = 4
var5 = 5
var6 = 6
var7 = 7
var8 = 8
var9 = 9
var10 = 10
var11 = 11
var12 = 12
var13 = 13
var14 = 14
var15 = 15
var16 = 16
var17 = 17
var18 = 18
var19 = 19
var20 = 20
var21 = 21
Set oVar = CreateObject("Scripting.Dictionary")
For Each myVar In Array(var1, var2, var3, var4, var5, var6, var7, _
var8, var9, var10, var11, var12, var13, var14, _
var15, var16, var17, var18, var19, var20, var21)
oVar(myVar) = 0
Next
If oVar.Count = 21 Then
MsgBox "Alle unterschiedlich"
Else
MsgBox "Nicht alle unterschiedlich"
End If
End Sub

Gruß
Rudi
Anzeige
AW: Alle Variabeln unterschiedlich
22.12.2010 09:10:58
fcs
Hallo Erhard,
hier ein Beispiel für 5 Variablen, das problemlos auf mehr Variablen erweiter werden kann.
Noch einfacher würde es, wenn du deine 21 Werte direkt in einem Feld verwalten würdest.
Gruß
Franz
Sub Test1()
Dim v1, v2, v3, v4, v5
v1 = 1
v2 = 11
v3 = 14
v4 = 12
v5 = 2
If Verschieden(Array(v1, v2, v3, v4, v5)) = True Then
MsgBox "Variablenwerte sind verschieden"
Else
MsgBox "Ein oder mehrere Variablenwerte sind identisch"
End If
End Sub
Sub Test2()
Dim arrZahlen(1 To 5)
arrZahlen(1) = 1
arrZahlen(2) = 11
arrZahlen(3) = 14
arrZahlen(4) = 12
arrZahlen(5) = 2
If Verschieden(arrZahlen) = True Then
MsgBox "Variablenwerte sind verschieden"
Else
MsgBox "Ein oder mehrere Variablenwerte sind identisch"
End If
End Sub
Function Verschieden(arrWerte) As Boolean
'Funktion prüft, ob alle Werte im Array unterschiedlich sind
'Werte müssen als Feld/Array übergeben werden
Dim iI As Long, iJ As Long
Verschieden = True
For iI = LBound(arrWerte) To UBound(arrWerte) - 1
For iJ = iI + 1 To UBound(arrWerte)
If arrWerte(iI) = arrWerte(iJ) Then
Verschieden = False
Exit For
End If
Next
Next
End Function

Anzeige
AW: Alle Variabeln unterschiedlich - Variante
22.12.2010 09:24:02
fcs
Hallo Erhard,
hier eine Variante der Function. Dies in Summe etwas schneller sein sollte, da immer nur ein Schleifendurchlauf erforderlich.
Gruß
Franz
Function Verschieden(arrWerte) As Boolean
'Funktion prüft, ob alle Werte im Array unterschiedlich sind
'vWerte müssen als Feld/Array übergeben werden
Dim iI As Long, oCollection As New Collection
On Error GoTo Fehler
Verschieden = True
For iI = LBound(arrWerte) To UBound(arrWerte)
oCollection.Add arrWerte(iI), CStr(arrWerte(iI))
Next
Fehler:
If Err.Number  0 Then
Verschieden = False
End If
Set oCollection = Nothing
End Function

Anzeige
AW: Alle Variabeln unterschiedlich - Variante
22.12.2010 14:13:17
alifa
Hallo Franz,
hier ein Auszug aus meinem Makro:
[Code]
For a2 = 1 To 21
For a3 = 1 To 21
If a3 a2 Then
For a12 = 1 To 21
If a12 a3 And a12 a2 Then
For a11 = 1 To 21
If a11 a12 And a11 a3 And a11 a2 Then
[/Code]
Deine Funktion funktioniert prima, herzlichen Dank. Dank auch an alle Teilnehmer an diesem Thema!
Viele Grüße, Erhard
AW: Alle Variabeln unterschiedlich
22.12.2010 09:20:09
MichaV
Hier noch eine Variante:
Option Explicit
Sub test()
Dim a(0 To 6) As Integer
Dim i As Integer
Dim s As String
Dim x As Integer
a(0) = 1
a(1) = 33
a(2) = 5
a(3) = 3
a(4) = 5
a(5) = 55
a(6) = 11
s = "#"
For i = LBound(a) To UBound(a)
If InStr(s, "#" & a(i) & "#") > 0 Then
x = x + 1
Else
s = s & a(i) & "#"
End If
Next i
MsgBox "Es sind " & x & " gleiche Werte"
End Sub
Gruss- Micha
Anzeige
AW: Alle Variabeln unterschiedlich
22.12.2010 09:25:59
MichaV
und als Alternative ohne Datenfelder:
Option Explicit
Sub test()
Dim a, b, c, d, e 'usw
Dim s As String
Dim x As Integer
a = 1
b = 33
c = 5
d = 3
e = 5
'usw
s = "#" & a & "#"
If InStr(s, "#" & b & "#") > 0 Then x = x + 1 Else s = s & b & "#"
If InStr(s, "#" & c & "#") > 0 Then x = x + 1 Else s = s & c & "#"
If InStr(s, "#" & d & "#") > 0 Then x = x + 1 Else s = s & d & "#"
If InStr(s, "#" & e & "#") > 0 Then x = x + 1 Else s = s & e & "#"
'usw
MsgBox "Es sind " & x & " gleiche Werte"
End Sub

Anzeige
sehr schön
22.12.2010 10:44:25
MichaV
3 verschiedene Vorgehensweisen mit je 2 Alternativen, das nenne ich Auswahl.
Hat jemand Lust die Geschwindigkeitsunterschiede zu testen?
Gruss- Micha
PS: meine Formulierung in der MsgBox ist ein bissel verwirrend, aber das Prinzip sollte klar sein. Wenn x=0 dann alle unterschiedlich, ansonsten nicht.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige