Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA - Zahlen von-bis als Textstring

VBA - Zahlen von-bis als Textstring
19.05.2022 13:39:01
Manuel
Hallo liebe Excel-Profis,
ich wende mich heute mit einer sehr speziellen Anforderung an euch, für die mir komplett der Ansatz fehlt.
Ich habe eine Excel Datei eines Kollegen geerbt, in der jeden Tag ein spezieller Textstring ausgegeben wird, basierend auf Tagen, die in einer Liste stehen. Bisher ist das händisch geschehen und mich würde interessieren, ob man das per VBA morgens automatisieren kann.
Folgendes ist gegeben:
- Eine Liste von Tagen, die unsortiert vorliegt. Bspw in Zelle A2-A11:
1
2
3
18
24
4
5
6
7
10
Und folgende Anforderungen zur Generierung des Textstrings bestehen nun:
Anforderung 1:
Zusammenfassen aller Zahlen die in Reihenfolge stehen und mit Bindestrich trennen
Anforderung 2:
alle weiteren Tage die nicht in die Reihenfolge passen kommasepariert aufzählen
Anforderung 3:(nice to have)
den letzten Tag mit einem "und #Tag" separat ausweisen
Das Ergebnis würde im obigen Fall wie folgt aussehen:
Dies sind die Tage 1-7,10,18 und 24
Leider weiß ich nicht wie ich das Problem strukturell angehen soll, vielleicht hat jemand von euch gute Ideen? Ich freue mich über jede Hilfe.
Liebe Grüße
nik
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Zahlen von-bis als Textstring
19.05.2022 15:00:26
GerdL
Hallo Manuel nik

Sub Faulpelz()
Dim s As String, i As Integer, n As Integer
Dim Test As Variant
Test = Array(1, 2, 3, 18, 24, 4, 5, 6, 7, 10)
Cells(1, 1).Resize(UBound(Test) + 1) = Application.Transpose(Test)
With WorksheetFunction
s = .Small(Columns(1), 1)
For i = 2 To .CountA(Columns(1))
n = .Small(Columns(1), i)
If n = .Small(Columns(1), i - 1) + 1 Then
s = s & "-" & n
ElseIf n = .Max(Columns(1)) Then
s = s & " und  Tag " & n & "."
Else
s = s & ", " & n
End If
Next
End With
Cells(2, 3) = "Dies sind die Tage " & s
End Sub
Gruß Gerd
Anzeige
AW: VBA - Zahlen von-bis als Textstring
19.05.2022 23:52:29
Yal
Hallo Manuel/Nik,
gibt es auch dazwischen Intervalle?: 1-5, 7, 9-12, 24 und 30
was passiert wenn die 2 letzten in einer Reihe sind? 1, 3, 5-8, 11 und 12 oder 1, 3, 5-8, 11-12 (eigentlich 1, 3, 5-8 und 11-12, oder?)
Ich habe die letzte Version implementiert.
Es ist eine User Defined Function ("UDF"), spricht ein VBA-Code, das wie eine Excel-Formel gerufen wird. Kopiere den Code in ein Modul (nicht Blatt- oder Mappe-Codepane). Die übergegebene Liste muss zuerst sortiert werden, daher BubbleSort
Testaufbau:
in A1:A31 die Formel =ZUFALLSZAHL()
in B1:B13 die Formel =RANG(A1;$A$1:$A$31)
in C1 die Formel =TextString(B1:B13)
13 Eingangswert, weil 5 zu wenig un 20 zu viel sind.
Beispielergebnisse:
1, 5, 8, 10, 13, 16, 21-24, 26, 28 und 31
1, 3-4, 6, 8-10, 13-14, 18, 20-21 und 30
4, 7, 12-13, 16, 19, 24-25 und 27-31
1, 6-9, 13, 16, 20, 25 und 28-31

Public Function TextString(ByVal Target)
Dim Arr()
Dim i
Dim Erg As String
If Target.Rows.Count > 1 And Target.Columns.Count > 1 Then TextString = Error(): Exit Function 'Darf nur einspaltig oder einzeilig sein
'sortieren
Arr = Application.Transpose(Target)
Arr = BubbleSort(Arr)
'erste
Erg = Arr(LBound(Arr))
'rest
For i = LBound(Arr) + 1 To UBound(Arr)
If Arr(i) = Arr(i - 1) + 1 Then
If Right(Erg, 1)  "-" Then Erg = Erg & "-"
If i = UBound(Arr) Then Erg = Erg & Arr(i)
Else
If Right(Erg, 1) = "-" Then Erg = Erg & Arr(i - 1)
Erg = Erg & ", " & Arr(i)
End If
Next
'Ergebnis zusammenfassen
i = InStrRev(Erg, ",")
TextString = Left(Erg, i - 1) & " und" & Mid(Erg, i + 1)
End Function
Public Function BubbleSort(Arr())
Dim i, j
Dim Tmp
For i = LBound(Arr) To UBound(Arr) 'lngLz
For j = i + 1 To UBound(Arr) 'lngLz
If Arr(i) > Arr(j) Then
Tmp = Arr(i)
Arr(i) = Arr(j)
Arr(j) = Tmp
End If
Next
Next
BubbleSort = Arr
End Function
VG
Yal
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige