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

Fortsetzung Rudi-Hintergrund

Fortsetzung Rudi-Hintergrund
12.06.2013 10:21:10
JACKD
Hallo Rudi
Danke für deine Geduld
Nur damit ich es richtig verstanden hab. Du hast in der ersten Variante die Zelle mit
cint(left(arr(),1))
zerlegt. Der Rückgabewert ist dann das Führende Zeichen als Zahl
(Nebenfrage: was passiert wenn hier mal ein Buchstabe steht zB bei einer Falscheingabe?)
jetzt Zerlegst du das Array mit
Split(arrTmp(j), "-")
Das heisst ich habe dann ein neues 2 Dimensionales Array
wobei der
arrTemp(j,1) die Zeichenfolge vor dem Strich ist und
arrTemp(j,2) die Zeichenfolge nach dem Strich
Function AnzANR(arrATyp, arrTmp)
Dim arrAnz()
Dim i As Integer, j As Integer
Dim arrTemp()
ReDim arrAnz(UBound(arrATyp))
For i = 0 To UBound(arrATyp)
arrAnz(i) = 0
For j = 5 To UBound(arrTmp)
If CInt(Split(arrTmp(j), "-")(0)) = arrATyp(i) Then
arrAnz(i) = arrAnz(i) + 1
If CInt(Split(arrTmp(j), "-")(0)) = "8" Then
If CStr(Left(CStr(arrTmp(j)), 4)) = "8-98" Then
arrAnz(i) = arrAnz(i) + 1
End If
End If
End If
Next
Next
AnzANR = arrAnz
End Function
So hab ich es mal probiert.
Leider mit einem falschen Ergebnis (Liefert eine falsche Summe) was denk ich daran liegt, dass (in dem Beispiel die Zahl 8) gefunden wird, das arrAnz um eins hochgezählt wird und für den Fall dass 8-98 gefunden wird, dann nochmal eins hochgezählt wird..
 If CStr(Left(Split(arrTmp(j), "-"), 2)) = "98" Then
Der Teil Funktioniert nicht ich versuche an die zweite Funktionsreihe zu kommen also arrTemp(j,2) aber irgendwie bekomm ich es nicht auf die Reihe
Grüße
Und vielen Dank

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fortsetzung Rudi-Hintergrund
12.06.2013 11:13:07
Rudi
Hallo,
Das heisst ich habe dann ein neues 2 Dimensionales Array
wobei der
arrTemp(j,1) die Zeichenfolge vor dem Strich ist und
arrTemp(j,2) die Zeichenfolge nach dem Strich

Nein. Ein eindimensionales Array.
arrTmp(0) vor dem -
arrTmp(1) nach dem -
(Nebenfrage: was passiert wenn hier mal ein Buchstabe steht zB bei einer Falscheingabe?)

Ein Laufzeitfehler.
            If CInt(Split(arrTmp(j), "-")(0)) = "8" Then

CInt erzeugt eine Zahl, "8" ist ein String! Das wird nie Wahr.
If CStr(Left(CStr(arrTmp(j)), 4)) = "8-98" Then

wozu CStr? Left() erzeugt sowieso einen String.
Ich verstehe deine Absicht nicht.
btw.: soll jeder Auftrag nur einmal gezählt werden? Im Moment wird jedes Vorkommen gezählt.
Gruß
Rudi

Anzeige
AW: Fortsetzung Rudi-Hintergrund
12.06.2013 11:21:27
JACKD
Hallo Rudi
Danke für deine Schnelle Antwort.
Nun, CStr rührt daher, dass mir nicht bewusst wahr dass left einen String zurück gibt.
und da "8-98" nicht als Zahl identifiziert werden kann wegen "-" dachte ich das man das als String vergleichen muss.
Was meine Absicht ist.
Analog des Einstelligen Vorkommens (1,3... ) würde ich gern das Vorkommen von 8-98 ausgeben
also quasi als weitere Spalte
1,3,5,8, 8-98, 9
Also eigentlich wie du es mir bereits gezeigt hast, nur eben um diese eine 3stellige ergänzung.
Sonnig Grüße

Nachfrage
12.06.2013 12:44:11
Rudi
Hallo,
exakt 8-98 oder 8-98xxx?
Gruß
Rudi

Anzeige
AW: Nachfrage
12.06.2013 13:15:02
JACKD
Hallo Rudi
Also ja, 8-98xxx wobei xxx auch leer sein kann.
Also alle die mit 8-98 beginnen
Grüße

AW: Nachfrage
12.06.2013 14:10:55
Rudi
Hallo,
Function ops(ByVal rngA As Range)
Dim objKD As Object, objANR As Object
Dim rngC As Range
Dim i As Integer, j As Integer, iMax As Integer
Dim arrTmp, arrItems, arrNeu(), arrANR, arrANr2
Set objKD = CreateObject("Scripting.dictionary")   'Datensammler Kunden
Set objANR = CreateObject("Scripting.dictionary")   'Datensammler Auftragsnummern
For Each rngC In rngA.Columns(4).Cells '(Patienten ID)
If objKD.exists(rngC.Value) Then
arrTmp = objKD(rngC.Value)
ReDim arrNeu(UBound(arrTmp) + 1)
For i = 0 To UBound(arrTmp)
arrNeu(i) = arrTmp(i)
Next
arrNeu(i) = rngC.Offset(, 2).Value
objKD(rngC.Value) = arrNeu
iMax = WorksheetFunction.Max(iMax, UBound(arrNeu))
Else  'neuer Patient
objKD(rngC.Value) = Array(rngC.Offset(, -3).Value, rngC.Offset(, -2).Value, rngC.Offset(,  _
-1).Value, rngC.Value, _
rngC.Offset(, 1).Value, rngC.Offset(, 2).Value)
iMax = WorksheetFunction.Max(iMax, 6)
End If
'Auftragstypen 1er, 2er etc.
Select Case True  'rngC.Offset(, 2).Value
Case rngC.Offset(, 2).Value Like "8-98*"
objANR("8-98") = 0
Case Else
objANR(CInt(Split(rngC.Offset(, 2).Value, "-")(0))) = 0
End Select
Next rngC
arrItems = objKD.items
arrANR = objANR.keys
'Auftragstypen sortieren
For i = 0 To UBound(arrANR)
For j = i To UBound(arrANR)
If arrANR(j)  4) * objANR.Count) = arrTmp(j)
Next
arrANr2 = AnzANR(arrANR, arrTmp)
For j = 0 To UBound(arrANR)
arrNeu(i + 2, j + 6) = arrANr2(j)
Next
Next
ops = arrNeu
End Function


Function AnzANR(arrATyp, arrTmp)
Dim arrAnz()
Dim i As Integer, j As Integer
ReDim arrAnz(UBound(arrATyp))
For i = 0 To UBound(arrATyp)
arrAnz(i) = 0
For j = 5 To UBound(arrTmp)
Select Case True
Case arrATyp(i) = "8-98"
If arrTmp(j) Like "8-98*" Then
arrAnz(i) = arrAnz(i) + 1
End If
Case Else
If CInt(Split(arrTmp(j), "-")(0)) = arrATyp(i) Then
arrAnz(i) = arrAnz(i) + 1
End If
End Select
Next
Next
AnzANR = arrAnz
End Function

Gruß
Rudi

Anzeige
Perfekt
12.06.2013 14:26:22
JACKD
Vielen Vielen Dank Rudi
Du bist mein persönlicher Held =)
Funktioniert alles wie gewünscht....
Grüße

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige