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

Verkettung

Verkettung
14.10.2022 12:41:36
Kai
Hallo,
ich möchte mich erstmal hier bei allen Bedanken, die mir schon oft geholfen haben. Ich habe zu einer Verkettung noch Probleme. Mir wurde hier auch schon mit einer Funktion geholfen. Leider klappt diese nicht ganz. Ich habe in einer Beispieldatei versucht alles aufzuführen um das Problem zu erklären. Es gibt einzelne Defaultwerte (Spalte C) die zu einem Bereich (SpalteA) gehören. Jeder Bereich hat eine bestimmte Bytelänge (Spalte D). Jeder Defaultwert besitzt auch eine eigene Bitlänge. Die Defaultwerte werden auch von Hex in Binär schon dargestellt. ich benötige jetzt eine Verkettung die jeden einzelnen Bitstream eines Bereiches hintereinander zusammensetzt. Wenn man Halfbytes (4 Bit) oder ganze Bytes (8 Bit) oder ein vielfaches davon, dann setzt die Funktion diese richtig aneinander. Ist die Bitlänge nicht dem von eben dann setzt er diese falsch zusammen. Der Bitstream (Spalte I) ist mit einer Formel hinterlegt, die anhand der Bitlänge die Stellen zur Verfügung stellt. In Spalte S habe ich die gewünschte Ausgabe mit angegeben. Den Unterschied zu der aktuellen Ausgabe habe ich Grün markiert. Wie könnte man dieses Problem lösen? In der Funktion oder in der Wiederholen-Formel ?
Ich hoffe ich konnte es einigermaßen verständlich erklären.
Vielen Dank im Voraus
Gruß Kai
https://www.herber.de/bbs/user/155673.xlsm

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

Betreff
Datum
Anwender
Anzeige
AW: Verkettung
14.10.2022 14:39:23
Der
Hallo,
versuch es mal damit:

Function MeineKette(rHEX As Range, rBit As Range, iByte As Integer, rKrit As Range, vntKRIT)
Dim arrHEX, arrKRIT, arrBit, i As Long, strTmp As String, strTmp2 As String, iVal As Integer
arrHEX = rHEX.Value
arrBit = rBit.Value
arrKRIT = rKrit.Value
For i = LBound(arrHEX) To UBound(arrHEX)
If arrKRIT(i, 1) = vntKRIT Then
iVal = CInt(Replace(arrHEX(i, 1), "0x", ""))
Do
strTmp2 = WorksheetFunction.Dec2Bin(iVal Mod 255, IIf(arrBit(i, 1) > 8, 8, arrBit(i, 1))) & strTmp2
iVal = iVal \ 255
arrBit(i, 1) = arrBit(i, 1) - 8
Loop While arrBit(i, 1) > 0
strTmp = strTmp & strTmp2
strTmp2 = ""
End If
Next
MeineKette = Left(strTmp, 4)
For i = 1 To -Int(-Len(strTmp) / 4)                                               ' setzt aus den jeweils einzelnen Bereichen die Binärwerte zu einer Kette zusammen, immer in achtstelligen Zeichen
MeineKette = MeineKette & " " & Mid(strTmp, i * 4 + 1, 4)
Next
End Function

Anzeige
AW: Verkettung
14.10.2022 14:40:11
Der
Hinweis:
Du musst jetzt die Bitlänge und die Bytelänge zusätzlich mit übergeben.
AW: Verkettung
14.10.2022 14:47:40
Der
Es hat sich der Fehlerteufel eingeschlichen und du musst nur die Bitlänge mitgeben:

Function MeineKette(rHEX As Range, rBit As Range, rKrit As Range, vntKRIT)
Dim arrHEX, arrKRIT, arrBit, i As Long, strTmp As String, strTmp2 As String, iVal As Integer
arrHEX = rHEX.Value
arrBit = rBit.Value
arrKRIT = rKrit.Value
For i = LBound(arrHEX) To UBound(arrHEX)
If arrKRIT(i, 1) = vntKRIT Then
iVal = CInt(Replace(arrHEX(i, 1), "0x", "&H"))
Do
strTmp2 = WorksheetFunction.Dec2Bin(iVal Mod 255, IIf(arrBit(i, 1) > 8, 8, arrBit(i, 1))) & strTmp2
iVal = iVal \ 255
arrBit(i, 1) = arrBit(i, 1) - 8
Loop While arrBit(i, 1) > 0
strTmp = strTmp & strTmp2
strTmp2 = ""
End If
Next
MeineKette = Left(strTmp, 4)
For i = 1 To -Int(-Len(strTmp) / 4)                                               ' setzt aus den jeweils einzelnen Bereichen die Binärwerte zu einer Kette zusammen, immer in achtstelligen Zeichen
MeineKette = MeineKette & " " & Mid(strTmp, i * 4 + 1, 4)
Next
End Function

Anzeige
AW: Verkettung
14.10.2022 15:13:58
Kai
Hallo Steuerfuzzi,
es klappt leider nicht oder ich gebe was falsch ein. ich habe die Datei nochmal mit der neuen Funktion angefügt. Habe daraus meineKette1 gemacht und es von Zeile 28 nach unten probiert
Gruß Kai
https://www.herber.de/bbs/user/155675.xlsm
AW: Verkettung
14.10.2022 17:10:18
Der
Du musst alle erforderlichen Parameter korrekt übergeben, sonst kann es nicht funktionieren. z. B. für J2 so:
=MeineKette($C$2:$C$27;$H$2:$H$27;$A$2:$A$27;A2)
AW: Verkettung
17.10.2022 09:15:33
Kai
Hallo Steuerfuzzi,
ich möchte dir erstmal für deine Hllfe danken. Leider klappt es nicht für weitere Kombinationen. Ich habe eine Datei anbei, wo es bei den Bereichen 11, 16,17 und 18 nicht korrekt übernommen wird. Bei den Bereichen davor passt alles. Kannst du mir für die Funktion helfen ? Gewünschte Ausgage habe ich in Spalte S hinterlegt. Ich nutze die Funktion MeineKette1.
Vielen Dank im Voraus
https://www.herber.de/bbs/user/155702.xlsm
Gruß Kai
Anzeige
AW: Verkettung
17.10.2022 10:12:05
Der
Ich habe es mal umgeschieben:

Function MeineKette1(rHEX As Range, rBit As Range, rKrit As Range, vntKRIT)
Dim arrHEX, arrKRIT, arrBit, i As Long, strTmp As String, iVal As Integer
arrHEX = rHEX.Value
arrBit = rBit.Value
arrKRIT = rKrit.Value
For i = LBound(arrHEX) To UBound(arrHEX)
If arrKRIT(i, 1) = vntKRIT Then
arrHEX(i, 1) = Replace(arrHEX(i, 1), "0x", "")
Do
iVal = CInt("&H" & IIf(arrHEX(i, 1) = "", 0, Left(arrHEX(i, 1), 2)))
arrHEX(i, 1) = Mid(arrHEX(i, 1), 3)
strTmp = strTmp & WorksheetFunction.Dec2Bin(iVal, IIf(arrBit(i, 1) > 8, 8, arrBit(i, 1)))
arrBit(i, 1) = arrBit(i, 1) - 8
Loop While arrBit(i, 1) > 0
End If
Next
MeineKette1 = Left(strTmp, 4)
For i = 1 To -Int(-Len(strTmp) / 4)                                               ' setzt aus den jeweils einzelnen Bereichen die Binärwerte zu einer Kette zusammen, immer in vierstelligen Zeichen
MeineKette1 = MeineKette1 & IIf((Len(strTmp) - i * 4) 
Du musst übrigens die Bezüge in der Formel korrekt angeben:
=MeineKette1($C$2:$C$45;$H$2:$H$45;$A$2:$A$45;A2)
Anzeige
AW: Verkettung
17.10.2022 10:28:43
Kai
Hallo Steuerfuzzi,
das sollte so passen. ich wollte dann anschließend die Halfbytes gleich in Hexwerte umschreiben, Dazu habe ich dieses hier noch:
For i = 1 To Len(strTmp) - 3 Step 4
MeineKette = MeineKette & " " & WorksheetFunction.Bin2Hex(Mid(strTmp, i, 4))
Next
MeineKette = Mid(MeineKette, 2)
Wie kann ich das in deine UDF einbauen ?
Vielen Dank im Voraus
Gruß Kai
AW: Verkettung
17.10.2022 10:31:57
Der
Verstehe ich nicht, die Hexwerte stehen doch schon in der Tabelle und werden verwendet um den Binärstring zu ermitteln ... warum sollte man dann das ganze wieder zurück wandeln ...
Soll das als eigene Funktion implementiert werden?
Anzeige
AW: Verkettung
17.10.2022 10:37:17
Kai
Weil ich die Hexwerte dann ohne das 0x benötige in einem String zusammengesetzt. Dadurch das die Binärwerte immer in Halfbytes stehen, kann das dies dann zu Hexwerten umgewandelt werden. Anschließend entferne ich das Leerzeichen und habe meine gewünschten Hexwert als String.
Gruß Kai
AW: Verkettung
17.10.2022 10:55:29
Der
Wenn Du das Leerzeichen entfernst, dann heißt das, die Ausgabe der Hexwerte soll ohne Leerzeichen erfolgen?
AW: Verkettung
17.10.2022 11:04:14
Kai
Ich erkläre dir kurz meine Vorgehensweise:
1. Ich habe Werte in hex und dez und möchte als gleiche Basis bin nutzen.
2. Für jeden Bereich (Spalte A) habe ich bestimmte Defaultwerte (Spalte B).
3. Diese Defaultwerte sollen jetzt nacheinander verkettet werden und gleich in Halfbytes aufgetrennt werden.
4. Jetzt möchte ich gerne die Halfbytes in Hexwerte umwandeln.
5. Jetzt wird nur noch das Leerzeichen zwischen den Halfbytes entfernt und ich habe das gewünschte Ergebnis.
Ich hatte immer das Problem, das mir bei einer Darstellung von zusammenhängende 8 Bits die führende Null gefehlt hat. Dadurch das es jetzt Halfbytes sind konnte ich mit der ersten Funktion dann die Leerzeichen entfernen. Ich habe es mir bestimmt an einigen Stellen zu kompliziert gemacht, aber die Umwandlung in Hexwerte wäre jetzt das letzte Puzzelstück.
Gruß Kai
Anzeige
AW: Verkettung
17.10.2022 11:18:30
Der
Also, wenn Du die Ausgabe ohne Leerzeichen möchtest, kannst Du das ganz einfach in meinem letzten Code machen, indem Du einfach diese Zeile:

                    MeineKette1 = MeineKette1 & IIf((Len(strTmp) - i * 4) 
in das änderst:

                    MeineKette1 = MeineKette1 & WorksheetFunction.Bin2Hex(Mid(strTmp, i * 4 + 1, 4), 2)

AW: Verkettung
17.10.2022 11:14:42
Der
Hier mal eine Variante, bei der Du wählen kannst, wie die Ausgabe erfolgt (Standard ist bin, wenn Du Hex willst, einfach als letztes Argument "hex" übergeben:

    Function MeineKette1(rHEX As Range, rBit As Range, rKrit As Range, vntKRIT, Optional strOutput As String = "bin")
Dim arrHEX, arrKRIT, arrBit, i As Long, strTmp As String, iVal As Integer
arrHEX = rHEX.Value
arrBit = rBit.Value
arrKRIT = rKrit.Value
For i = LBound(arrHEX) To UBound(arrHEX)
If arrKRIT(i, 1) = vntKRIT Then
arrHEX(i, 1) = Replace(arrHEX(i, 1), "0x", "")
Do
iVal = CInt("&H" & IIf(arrHEX(i, 1) = "", 0, Left(arrHEX(i, 1), 2)))
arrHEX(i, 1) = Mid(arrHEX(i, 1), 3)
strTmp = strTmp & WorksheetFunction.Dec2Bin(iVal, IIf(arrBit(i, 1) > 8, 8, arrBit(i, 1)))
arrBit(i, 1) = arrBit(i, 1) - 8
Loop While arrBit(i, 1) > 0
End If
Next
Select Case LCase(strOutput)
Case "hex", "hexadezimal", "hexadecimal"
MeineKette1 = WorksheetFunction.Bin2Hex(Left(strTmp, 4), 2)
For i = 1 To -Int(-Len(strTmp) / 4) - 1                                              ' setzt aus den jeweils einzelnen Bereichen die Binärwerte zu einer Kette zusammen, immer in vierstelligen Zeichen
MeineKette1 = MeineKette1 & IIf((Len(strTmp) - i * 4) 
=MeineKette1($C$2:$C$27;$H$2:$H$27;$A$2:$A$27;A2;"hex")
Anzeige
AW: Verkettung
17.10.2022 11:45:18
Der
Welche Null meinst Du?
Poste hier bitte mal die Ausgabe der Formel und drunter dein Wunschergebnis.
AW: Verkettung
17.10.2022 11:49:18
Der
Hab meinen Fehler gefunden und das ganze ohne Leerzeichen:

    Function MeineKette1(rHEX As Range, rBit As Range, rKrit As Range, vntKRIT, Optional strOutput As String = "bin")
Dim arrHEX, arrKRIT, arrBit, i As Long, strTmp As String, iVal As Integer
arrHEX = rHEX.Value
arrBit = rBit.Value
arrKRIT = rKrit.Value
For i = LBound(arrHEX) To UBound(arrHEX)
If arrKRIT(i, 1) = vntKRIT Then
arrHEX(i, 1) = Replace(arrHEX(i, 1), "0x", "")
Do
iVal = CInt("&H" & IIf(arrHEX(i, 1) = "", 0, Left(arrHEX(i, 1), 2)))
arrHEX(i, 1) = Mid(arrHEX(i, 1), 3)
strTmp = strTmp & WorksheetFunction.Dec2Bin(iVal, IIf(arrBit(i, 1) > 8, 8, arrBit(i, 1)))
arrBit(i, 1) = arrBit(i, 1) - 8
Loop While arrBit(i, 1) > 0
End If
Next
Select Case LCase(strOutput)
Case "hex", "hexadezimal", "hexadecimal"
MeineKette1 = WorksheetFunction.Bin2Hex(Left(strTmp, 4), 1)
For i = 1 To -Int(-Len(strTmp) / 4) - 1                                              ' setzt aus den jeweils einzelnen Bereichen die Binärwerte zu einer Kette zusammen, immer in vierstelligen Zeichen
MeineKette1 = MeineKette1 & WorksheetFunction.Bin2Hex(Mid(strTmp, i * 4 + 1, 4), 1)
Next
Case "bin", "binär", "binary"
MeineKette1 = Left(strTmp, 4)
For i = 1 To -Int(-Len(strTmp) / 4) - 1                                               ' setzt aus den jeweils einzelnen Bereichen die Binärwerte zu einer Kette zusammen, immer in vierstelligen Zeichen
MeineKette1 = MeineKette1 & IIf((Len(strTmp) - i * 4) 

Anzeige
AW: Verkettung
17.10.2022 12:27:31
Kai
Hallo Steuerfuzzi,
es sieht jetzt gut aus. ich probiere es mit mehreren Sachen aus. Ich danke dir erstmal ganz doll.
Du hast mir sehr geholfen.
Gruß Kai

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige