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

Umwandeln eines Zahlbereiches in eine Zahlenfolge

Umwandeln eines Zahlbereiches in eine Zahlenfolge
26.01.2015 20:28:19
herb roder

Hallo,
es wäre sehr schön, wenn jemand mir helfen könnte. Ich habe das Problem, dass ich Zahlenbereiche in entsprechende Zahlenfolgen ändern möchte. Es gibt insgesamt drei Typen solcher Zahlenbereiche (urprünglich waren das die Seiten aus einem Buch), z.B.:
"34f" soll geändert werden in: "34 35" (jede Zahl in eine eigene Zelle)
"34ff" in: "34 35 36"
"34-37" in: "34 35 36 37"
Vielen Dank im Voraus für eure Mühe!

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

Betreff
Datum
Anwender
Anzeige
AW: Umwandeln eines Zahlbereiches in eine Zahlenfolge
26.01.2015 22:39:37
Ralf P.
Hallo Herb,
ich bin davon ausgegangen, dass
- es einen Tabellenkopf gibt
- die Daten ab Zeile 2 stehen
- die Daten in Spalte 1 stehen
- die Ergebnisse ab Spalte 2 eingetragen werden können.
Ist irgendwas nicht wie gewünscht, gehe das Makro mit F8 einzeln durch und schaue, was nicht stimmt.
Evtl. frage nochmal nach.
Das Makro kommt in ein Modul (ALT+F11).
Gruß
Ralf
Sub umformen()
Dim sht As Worksheet
Dim Zelle As Range
Dim Start As Byte, Ende As Byte, BS As Byte, n As Byte
Set sht = ActiveSheet
With sht
For Each Zelle In .Range(.Cells(2, 1), .Cells(.UsedRange.Rows.Count, 1))
If Zelle = "" Then
Zelle.Offset(, 1) = "keine Daten"
ElseIf InStr(1, Zelle, "-", vbTextCompare) > 0 Then
Start = Trim(Left(Zelle, InStr(1, Zelle, "-", vbTextCompare) - 1))
BS = InStr(1, Zelle, "-", vbTextCompare)
Ende = Trim(Mid(Zelle, BS + 1))
For n = 1 To (Ende - Start + 1)
Zelle.Offset(, n) = Start
Start = Start + 1
Next
Start = 0: BS = 0: Ende = 0
ElseIf InStr(1, Zelle, "ff", vbTextCompare) > 0 Then
Zelle.Offset(, 1) = CLng(Left(Zelle, InStr(1, Zelle, "ff", vbTextCompare) - 1))
Zelle.Offset(, 2) = CLng(Left(Zelle, InStr(1, Zelle, "ff", vbTextCompare) - 1)) + 1
ElseIf InStr(1, Zelle, "f", vbTextCompare) > 0 Then
Zelle.Offset(, 1) = CLng(Left(Zelle, InStr(1, Zelle, "f", vbTextCompare) - 1))
Else
Stop 'variante nicht bedacht?
End If
Next
End With
End Sub

Anzeige
AW: Umwandeln eines Zahlbereiches in eine Zahlenfolge
26.01.2015 23:03:18
herb roder
Vielen Dank Ralf!
Das hätte ich unmöglich hinbekommen. Zwei Probleme habe ich allerdings noch:
1) Für den Fall, dass es nur eine Zahl gibt (also keinen Zahlenbereich) sollte auch diese Zahl nochmal ausgegeben werden
2) Ich weiß nicht, wie ich die eine Input-Spalte in eine "Matrix" verwandeln kann.
Mir ist natürlich klar, dass viele meiner Probleme an ungenauer Ausdruckweise liegen. Vielleicht hilft das:
Input z.B.:
12 34f 54f
456ff 605-608
34-39 50
Output sollte sein:
12 34 35 54 55
456 457 458 605 606 607 608
34 35 36 37 38 39 50

Anzeige
AW: Umwandeln eines Zahlbereiches in eine Zahlenfolge
26.01.2015 23:19:45
Ralf P.
Hallo,
du bist ja lustig..
Vllt sollten die Ergebnisse in ein extra Blatt geschrieben werden?
Stehen alle Daten einer Zeile in einer Zelle?
Wenn ja, kannst du sie trennen, indem du Menü - Daten - Text in Spalten wählst, Trennzeichen ist das Leerzeichen.
Du kannst eine aussagekräftige (Beispiel-)Datei auch hier hochladen.
Gruß
Ralf

AW: Umwandeln eines Zahlbereiches in eine Zahlenfolge
27.01.2015 05:45:00
herb roder
O.k. wahrscheinlich ist ein Beispiel besser:
https://www.herber.de/bbs/user/95297.xls
Vielen Dank für die Geduld!

ich erst heute Abend, wenn jemand anders..
27.01.2015 09:07:33
Ralf P.
..derweil weiter machen möchte..

AW: Umwandeln eines Zahlbereiches in eine Zahlenfolge
27.01.2015 15:46:03
Daniel
Hi
probier mal das:
Sub Umwandeln()
Dim arrQuelle
Dim arrZiel
Dim z As Long, s As Long
arrQuelle = Range("B3:D5").Value
ReDim arrZiel(1 To UBound(arrQuelle, 1), 1 To 1)
For z = 1 To UBound(arrQuelle, 1)
For s = 1 To UBound(arrQuelle, 2)
If arrQuelle(z, s) <> "" Then
arrZiel(z, 1) = arrZiel(z, 1) & " " & SeitenFolge(arrQuelle(z, s))
End If
Next s
arrZiel(z, 1) = Trim(arrZiel(z, 1))
Next z
With Range("I3").Resize(UBound(arrZiel, 1), 1)
.Value = arrZiel
.TextToColumns Destination:=.Cells(1, 1), _
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=True, _
Tab:=False, _
Semicolon:=False, _
Comma:=False, _
Space:=True, _
Other:=False
End With
End Sub
Function SeitenFolge(ByVal txt As String) As String
Dim Zahl1 As Long
Dim Zahl2 As Long
Dim i As Long
If txt Like "*#f*" Then
Zahl1 = Val(txt)
Zahl2 = Zahl1 + Len(txt) - Len(Replace(txt, "f", ""))
ElseIf txt Like "*#-#*" Then
Zahl1 = WorksheetFunction.Min(Val(Split(txt, "-")(0)), Val(Split(txt, "-")(1)))
Zahl2 = WorksheetFunction.Max(Val(Split(txt, "-")(0)), Val(Split(txt, "-")(1)))
End If
If Zahl1 = 0 Then
SeitenFolge = txt
Else
SeitenFolge = Zahl1
For i = Zahl1 + 1 To Zahl2
SeitenFolge = SeitenFolge & " " & i
Next
End If
End Function
ausführen musst du die Sub "Umwandeln".
die Funktion SeitenFolgen wandelt dann die einzelnen Angaben in die Folge um.
Gruß Daniel

Anzeige
AW: Umwandeln eines Zahlbereiches in eine Zahlenfolge
27.01.2015 18:14:12
herb roder
Großartig! Vielen Dank; soweit ich sehen kann, funktionert das, wie es soll.

thx fürs..
27.01.2015 19:07:13
Ralf P.
..vorgreifen ;)
btw: ich dachte, dass # nur für formatierungen ist. man lernt immer neues.
1 mal # steht für eine ziffer?
Gruß
Ralf

AW: thx fürs..
27.01.2015 19:35:03
Daniel
HI
ja, ein # steht in der LIKE-Funktion für genau eine Ziffer.
diesen Joker kennt meines Wissens nach auch nur die Like-Funktion, ? und * werden ja auch von anderen Funktionen erkannt.
Obs jetzt auch einen Joker für "beliebig viele Ziffern" gibt, weiss ich nicht.
Gruß Daniel

380 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige