Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1856to1860
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

Text finden und Zellen kursiv schreiben

Text finden und Zellen kursiv schreiben
03.12.2021 17:29:35
Fritz
Hallo,
ich bräuchte nochmal Eure Hilfe.
Ich habe eine Tabelle da steht in irgendeiner Zelle als Überschrift "Name".
Nun möchte ich nach dieser Zelle, mit den Text "Name", in der Tabelle suchen, alle Zellen darunter die ausgefüllt sind (also bis eine leere Zelle kommt) markieren und den Inhalt der markierten Zellen Kursiv schreiben.
Kann mir jemand dabei helfen?
Danke Fritz

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

Betreff
Datum
Anwender
Anzeige
AW: Text finden und Zellen kursiv schreiben
03.12.2021 17:40:16
{Boris}
Hi Fritz,

Sub til()
Dim C As Range
Set C = ActiveSheet.UsedRange.Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
If Not C Is Nothing Then
Range(C.Offset(1), C.End(xlDown)).Font.Italic = True
End If
End Sub
VG, Boris
AW: Text finden und Zellen kursiv schreiben
03.12.2021 21:41:07
Fritz
Hallo Boris,
das funktioniert soweit sehr gut. Danke schon mal dafür.
Nun habe ich entdeckt das ich einige Zellen verbunden habe, weshalb der der Code nur bis dahin arbeitet.
Jetzt hatte ich mir gedacht, da ich unter der Tabelle die nächste Tabelle habe, die dann mit den Text "Ergebnis" in Spalte A beginnt könnte ich diese als Endzeile für den Range nutzen.
Also habe ich mir folgendes überlegt:

Sub Kursiv()
Dim Zelle_Anfang As Range
Dim Zelle_Ende As Range
Dim A_row As Integer
Dim A_col As Integer
Dim E_row As Integer
Dim E_col As Integer
Set Zelle_Anfang = ActiveSheet.UsedRange.Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Ende = ActiveSheet.UsedRange.Find(what:="Ergebnis", LookIn:=xlValues, lookat:=xlWhole)
Set A_row = .Zelle_Amfang.Row
Set A_col = .Zelle_Amfang.Column
Set E_row = .Zelle_Amfang.Row
Set E_col = .Zelle_Amfang.Column
If Not Zelle_Anfang Is Nothing Then
Range(Cells(A_row + 1, A_col), Cells(E_row - 1, A_col)).Font.Italic = True
End If
End Sub
Wenn also "Name" in "X6" steht und "Ergebnis" in "A78", dann soll der Bereich "X7":"X77" kursiv geschrieben werden.
Aber er meckert mich an, bei "A_row" mit "unzulässiger oder nicht ausreichend definierter Verweis" , wahrscheinlich auch bei den anderen Variablen.
Bin mir sicher das hier was fehlt, oder komplett falsch ist
Und dann noch meine Frage, kann man den Range-Bereich überhaupt so definieren?
Danke für Euer Feedback
Fritz
Anzeige
AW: Text finden und Zellen kursiv schreiben
03.12.2021 22:08:50
GerdL
Moin Fritz,
es fängt damit an, dass da Zeilen_Anfang mit "m" stand.
Row und Column sind Range-Eigenschaften vom Typ Integer oder besser Long, die mit = zuzuweisen sind, ohne Set-Anweisung.
Probier mal, ob die "MerdeCells" so noch dazwischenfunken.

Sub Kursiv()
Dim Zelle_Anfang As Range
Dim Zelle_Ende As Range
Dim A_row As Long
Dim A_col As Long
Dim E_row As Long
Dim E_col As Long
Set Zelle_Anfang = ActiveSheet.UsedRange.Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Ende = ActiveSheet.UsedRange.Find(what:="Ergebnis", LookIn:=xlValues, lookat:=xlWhole)
A_row = .Zelle_Anfang.Row
A_col = .Zelle_Anfang.Column
E_row = .Zelle_Anfang.Row
E_col = .Zelle_Anfang.Column
If Not Zelle_Anfang Is Nothing And Not Zelle_Ende Is Nothing Then
Range(Cells(A_row + 1, A_col), Cells(E_row - 1, A_col)).Font.Italic = True
Range(Zelle_Anfang, Zelle_Ende).Font.Bold = True
End If
Set Zeile_Anfang = Nothing: Set Zeile_ende = Nothing
End Sub
Gruß Gerd
Anzeige
AW: Korrektur
03.12.2021 22:17:40
GerdL
Jetzt ist zuviel auf "Anfang"

Sub Kursiv()
Dim Zelle_Anfang As Range
Dim Zelle_Ende As Range
Dim A_row As Long
Dim A_col As Long
Dim E_row As Long
Dim E_col As Long
Set Zelle_Anfang = ActiveSheet.UsedRange.Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Ende = ActiveSheet.UsedRange.Find(what:="Ergebnis", LookIn:=xlValues, lookat:=xlWhole)
A_row = .Zelle_Anfang.Row
A_col = .Zelle_Anfang.Column
E_row = .Zelle_Ende.Row
E_col = .Zelle_Ende.Column
If Not Zelle_Anfang Is Nothing And Not Zelle_Ende Is Nothing Then
Range(Cells(A_row + 1, A_col), Cells(E_row - 1, A_col)).Font.Italic = True
Range(Zelle_Anfang. Offset(1), Zelle_Ende.Offset(-1)).Font.Bold = True
End If
Set Zeile_Anfang = Nothing: Set Zeile_ende = Nothing
End Sub

Anzeige
Jetzt funktionierts
03.12.2021 23:24:34
Fritz
Hallo Gerd,
Danke für die Hinweise.
Da war ich doch gar nicht sooo verkehrt!
Das passiert wenn man nicht genau hinguckt und dann noch copy/paste.
Nun musste ich nur noch die Punkte vor Zelle_Anfang und Zelle_Ende löschen,

Sub Kursiv()
Dim Zelle_Anfang As Range
Dim Zelle_Ende As Range
Dim A_row As Long
Dim A_col As Long
Dim E_row As Long
Dim E_col As Long
Set Zelle_Anfang = ActiveSheet.UsedRange.Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Ende = ActiveSheet.UsedRange.Find(what:="Ergebnis", LookIn:=xlValues, lookat:=xlWhole)
A_row = Zelle_Anfang.Row
A_col = Zelle_Anfang.Column
E_row = Zelle_Ende.Row
E_col = Zelle_Ende.Column
If Not Zelle_Anfang Is Nothing And Not Zelle_Ende Is Nothing Then
Range(Cells(A_row + 1, A_col), Cells(E_row - 1, A_col)).Font.Italic = True
End If
Set Zelle_Anfang = Nothing: Set Zelle_Ende = Nothing
End Sub
Nochmal Danke
Gruß Fritz
Anzeige
Code nochmal erweitert
04.12.2021 14:58:13
Fritz
Hallo zusammen,
Ich habe den Code mal erweitert, weil ich auch noch den 2.Namen in Kursiv und auch die Leerzeichen (die mich immer stören) durch "_" ersetzen möchte.
Nun markiere ich durch den Select-Befehl die Zellen um den Inhalt dann zu ändern.
Der Code macht auch was er soll, aber hier gibt es doch bestimmt eine intelligentere Lösung ohne den Bereich zu markieren, oder?
Außerdem sieht es ein wenig doppelt gemoppelt aus.
Hier der Code:

Sub Kursiv()
Dim Zelle_Anfang1, Zelle_Anfang2, Zelle_Ende, C As Range
Dim A1_row, A1_col, A2_col, A2_col, E_col, E_col As Long
Set Zelle_Anfang1 = ActiveSheet.UsedRange.Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Anfang2 = ActiveSheet.UsedRange.Find(what:="Name2", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Ende = ActiveSheet.UsedRange.Find(what:="Ergebnis", LookIn:=xlValues, lookat:=xlWhole)
If Not Zelle_Anfang1 Is Nothing And Not Zelle_Anfang2 Is Nothing And Not Zelle_Ende Is Nothing Then
A1_row = Zelle_Anfang1.Row
A1_col = Zelle_Anfang1.Column
A2_row = Zelle_Anfang2.Row
A2_col = Zelle_Anfang2.Column
E_row = Zelle_Ende.Row
E_col = Zelle_Ende.Column
Union(Range(Cells(A1_row + 1, A1_col), Cells(E_row - 1, A1_col)), _
Range(Cells(A2_row + 1, A2_col), Cells(E_row - 1, A2_col))).Font.Italic = True
Union(Range(Cells(A1_row + 1, A1_col), Cells(E_row - 1, A1_col)), _
Range(Cells(A2_row + 1, A2_col), Cells(E_row - 1, A2_col))).Select
With Application.WorksheetFunction
For Each C In Selection
C.Value = .Substitute((C.Value), " ", "_")
Next C
End With
End If
Set Zelle_Anfang1 = Nothing: Set Zelle_Anfang2 = Nothing: Set Zelle_Ende = Nothing
End Sub
Hat jemand eine bessere Lösung?
Gruß Fritz
Anzeige
AW: Code nochmal erweitert
04.12.2021 15:37:02
{Boris}
Hi Fritz,
ungetestet:

Sub Kursiv()
Dim Zelle_Anfang1, Zelle_Anfang2, Zelle_Ende, C As Range
Dim A1_row, A1_col, A2_col, A2_col, E_col, E_col As Long
Dim rngUnion As Range
Set Zelle_Anfang1 = ActiveSheet.UsedRange.Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Anfang2 = ActiveSheet.UsedRange.Find(what:="Name2", LookIn:=xlValues, lookat:=xlWhole)
Set Zelle_Ende = ActiveSheet.UsedRange.Find(what:="Ergebnis", LookIn:=xlValues, lookat:=xlWhole)
If Not Zelle_Anfang1 Is Nothing And Not Zelle_Anfang2 Is Nothing And Not Zelle_Ende Is Nothing Then
A1_row = Zelle_Anfang1.Row
A1_col = Zelle_Anfang1.Column
A2_row = Zelle_Anfang2.Row
A2_col = Zelle_Anfang2.Column
E_row = Zelle_Ende.Row
E_col = Zelle_Ende.Column
Set rngUnion = Union(Range(Cells(A1_row + 1, A1_col), Cells(E_row - 1, A1_col)), _
Range(Cells(A2_row + 1, A2_col), Cells(E_row - 1, A2_col)))
rngUnion.Font.Italic = True
With Application.WorksheetFunction
For Each C In rngUnion
C.Value = .Substitute((C.Value), " ", "_")
Next C
End With
End If
Set Zelle_Anfang1 = Nothing: Set Zelle_Anfang2 = Nothing: Set Zelle_Ende = Nothing
End Sub
Das Prinzip: Weise Objekte Objektvariablen zu.
VG, Boris
Anzeige
AW: Code nochmal erweitert
04.12.2021 16:50:32
GerdL
Moin Fritz,
noch ein Sparcode.
Variablen muss man immer alle einzeln deklarieren, auch wenn sie in einer Codezeile stehen.
Sonst haben sie den Variablentyp Variant.

Sub Kursiv_II()
Dim Anfang(1 To 2) As Range, Ende As Range
With ActiveSheet.UsedRange
Set Anfang(1) = .Find(what:="Name", LookIn:=xlValues, lookat:=xlWhole)
Set Anfang(2) = .Find(what:="Name2")
Set Ende = .Find(what:="Ergebnis")
End With
If Anfang(1) Is Nothing Or Anfang(2) Is Nothing Or Ende Is Nothing Then Exit Sub
With Union(Anfang(1).Offset(1, 0).Resize(Ende.Row - (1 + Anfang(1).Row)), _
Anfang(2).Offset(1, 0).Resize(Ende.Row - (1 + Anfang(2).Row)))
.Font.Italic = True
Call .Replace(what:=" ", replacement:="_", lookat:=xlPart)
End With
Set Anfang(1) = Nothing: Set Anfang(2) = Nothing: Set Ende = Nothing
End Sub
Gruß Gerd
Anzeige
Danke
05.12.2021 13:53:45
Fritz
Hallo Boris, hallo Gerd,
Danke für eure Hilfe.
Habe mal wieder viel gelernt und mein Code sieht jetzt viel übersichtlicher aus.
Funktioniert auch einwandfrei.
:-)
Gruß Fritz

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige