3.5k Aufrufe
Gefragt in Tabellenkalkulation von
Moin Moin,

ich brauche mal wieder eure kompetente Hilfe. Ich schreibe gerade an einem Makro und habe da folgendes Problem:
Ich habe zwei Zellen. Wenn die zweite Zelle Zeichen (eigentlich immer nur Zahlen) hat, die die erste auch hat, dürfen diese in der ersten Zelle nicht mehr vorkommen, sprich sie müssen gelöscht werden.
An einem Beispiel ist das ganze wahrscheinlich offensichtlicher:

BSP:
Zelle1: X567
Zelle2: 67

Dann soll danach in Zelle 1 nur noch X5 stehen.

Dieses vermeintlich kleine Problem hält mich nun schon seit Stunden auf. Ich bekommen es einfach nicht hin!
Ich würde mich sehr freuen, wenn ihr mir helfen könnt!

Vielen Dank!!!

rapperzahn

3 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi rapperzahn ^^

vielleicht so :-)

gruss nighty

Option Explicit
Sub trennen()
On Error GoTo ErrorHandler
Dim TbZeile As Long
Dim zaehler As Long
TbZeile = Cells(Rows.Count, 1).End(xlUp).Row
ReDim TbSpaA(TbZeile, 1) As Variant
TbSpaA() = Range(Cells(2, 1), Cells(TbZeile, 1))
For zaehler = 1 To TbZeile - 1 Step 2
TbSpaA(zaehler, 1) = Mid(TbSpaA(zaehler, 1), 1, InStr(TbSpaA(zaehler, 1), TbSpaA(zaehler + 1, 1)) - 1) & Mid(TbSpaA(zaehler, 1), InStr(TbSpaA(zaehler, 1), TbSpaA(zaehler + 1, 1)) + Len(TbSpaA(zaehler + 1, 1)), Len(TbSpaA(zaehler, 1)))
Next zaehler
Range(Cells(2, 1), Cells(TbZeile, 1)) = TbSpaA()
End
ErrorHandler:
If Err = 5 Then
Resume Next
Else
Err.Raise 5
End If
End Sub
0 Punkte
Beantwortet von rapperzahn Einsteiger_in (5 Punkte)
Moin Moin,

wow! Noch nicht einmal eine Stunde! Wenn das nicht schnell ist. Vielen Dank!
Jetzt musste ich leider (wieder) einmal merken, dass Makros nicht meine Muttersprache sind ;-(
Ich brauche noch einmal deine/eure Hilfe. Und zwar habe ich einen bestehenden Quellcode und an der markierten Stelle sollte der für die X67 usw. rein.
Nur, nachdem ich den Code von nighty angeguckt habe, weiß ich nicht so recht, wie ich den da einfüge.
Ich poste einfach mal meinen bisherigen Code und HIER findet ihr auch eine passende Beispieldatei.
Alle Felder die jeweils zusammengehören, also von dem Makro zusammengeführt werden sollen, sind farbig markiert.
Wie ihr auch seht, war das mit den X67 nicht das einzige, was das Makro machen soll.

Im Übrigen stehen die Zahlen für die Wochentage (1=MO,2=DI) und das D steht für täglich, das X für außer an den nachfolgenden Tagen (z.B. X67 heißt außer am Wochenende). Vielleicht erklärt
das ja so ein bissl den Zusammenhang.
Was ich damals vergessen habe: Werden hinter dem X alle Zahlen gelöscht, muss dann natürlich ein D für täglich stehen. (in der Beispielsdatei das grau hinterlegte Paar).

Hier nun der Code, sonst rede ich noch mehr wirres Zeug. Bei Fragen, gerne- versuche ich zu beantworten. Mir ist im Übrigen bewusst, dass man einiges schöner hätte ausdrücken können, aber es erfüllt seinen Zweck:

Sub zusammenfuehren()

Dim inhalt, zeichen As String

zahl = 1

bzahl = 2

Do While zahl < 5000

If Cells(zahl, 1).Value <> "" Then

Do While bzahl < 5000

If Cells(bzahl, 1).Value <> "" Then

If Cells(zahl, 1).Value = Cells(bzahl, 1).Value Then

If Cells(zahl, 8).Value = Cells(bzahl, 8).Value Then

'richtig anordnen

Z = Cells(zahl, 2)

u = Cells(bzahl, 2)

If Mid(Z, 1, 1) <> "X" Then

If Mid(u, 1, 1) <> "X" Then

neueri = Cells(bzahl, 2) & Cells(zahl, 2)

y = neueri





For j = 1 To 7

For i = 1 To Len(y)

zeichen = Mid(y, i, 1)

Select Case zeichen

Case j

inhalt = inhalt & j



End Select

Next i

Next j





If inhalt = 12345 Then

inhalt = "X67"

End If

If inhalt = 123456 Then

inhalt = "X7"

End If

If inhalt = 123457 Then

inhalt = "X6"

End If

If inhalt = 1234567 Then

inhalt = "D"

End If



' falls X



Else

'HIER KOMMT DAS ERSTE X67 REIN!!!!





End If

Else

'HIER KOMMT DAS ZWEITE X67 REIN!!!!

End If











Cells(zahl, 2).Value = inhalt

inhalt = ""

Rows(bzahl & ":" & bzahl).Delete

Else

bzahl = bzahl + 1

End If

Else

bzahl = bzahl + 1

End If

Else

bzahl = 9999

End If



Loop

zahl = zahl + 1

bzahl = zahl + 1



Else

zahl = 9999

End If

Loop

End Sub



Vielen Dank auf jeden Fall! Ihr seid echt Gold wert!

Schönes Wochenende schon einmal

rapperzahn
0 Punkte
Beantwortet von
Moin Moin,

ich wollte mich nur noch mal melden, denn ich habe das Problem nun doch gelöst!

Für alle Interessierte, hier der Code ohne Schleife etc. (praktisch nur für die Zelle A2 und B2):

Dim inhalt As String
zahl = 1
bzahl = 2
z = Cells(zahl, 2)
u = Cells(bzahl, 2)

For j = 1 To Len(z)
For i = 1 To Len(u)
zeichen = Mid(u, i, 1)
If zeichen <> Mid(z, j, 1) Then
If i = Len(u) Then
zeichen = Mid(z, j, 1)
inhalt = inhalt & zeichen
End If
End If
Next i
Next j


Cells(zahl, 2).Value = inhalt



End Sub


Vielen Dank und ein SUPER WOCHENENDE

rapperzahn
...