346 Aufrufe
Gefragt in Tabellenkalkulation von jelena Experte (1.1k Punkte)

Hallo guten Tag, ich habe das folgende Makro gefunden es soll jedoch nur bis zum Ende dieser zwei spalten (von G2 bis max. H303) ausgeführt werden da es sonst ziemlich lange dauert. Es kann auch sein, dass nur bis G50 bzw. H50 ein Text vorhanden ist. Danke

Sub Grossbuchstabe()
   ' Loop to cycle through each cell in the specified range.
   For Each x In Range("G2:H303")
      ' There is not a Proper function in Visual Basic for Applications.
      ' So, you must use the worksheet function in the following form:
      x.Value = Application.Proper(x.Value)
   Next
End Sub

12 Antworten

0 Punkte
Beantwortet von
Bearbeitet
Range("G2:H" & Application.Min(303, [MAX(IFERROR(MATCH("*",G:G,-1),2),IFERROR(MATCH("*",H:H,-1),2))])).Value = Application.Proper(Range("G2:H" & Application.Min(303, [MAX(IFERROR(MATCH("*",G:G,-1),2),IFERROR(MATCH("*",H:H,-1),2))])).Value)
0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)
Bearbeitet von jelena
Hallo Anonym, Bitte um komplettes Makro, es befinden sich auch leerzellen dazwischen. Danke
0 Punkte
Beantwortet von
Sub DeinMakro()
 Range("G2:H" & Application.Min(303, [MAX(IFERROR(MATCH("*",G:G,-1),2),IFERROR(MATCH("*",H:H,-1),2))])).Value = Application.Proper(Range("G2:H" & Application.Min(303, [MAX(IFERROR(MATCH("*",G:G,-1),2),IFERROR(MATCH("*",H:H,-1),2))])).Value)
End Sub
0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)

Hallo Anonym, dieses Makro funktioniert nur bis zur ersten leere Zeile, danach kommt in den nächsten Zellen nur mehr dieses Zeichen #NV. Danke

0 Punkte
Beantwortet von
Sub DeinMakro()
Range("G2:H" & [MIN(303,MAX(IFERROR(MATCH(REPT("z",255),G:G),1),IFERROR(MATCH(REPT("z",255),H:H),1)))]).Value = Evaluate("IF(G2:H" & [MIN(303,MAX(IFERROR(MATCH(REPT("z",255),G:G),1),IFERROR(MATCH(REPT("z",255),H:H),1)))] & "="""","""",PROPER(G2:H" & [MIN(303,MAX(IFERROR(MATCH(REPT("z",255),G:G),1),IFERROR(MATCH(REPT("z",255),H:H),1)))] & "))")
End Sub

 

Dieser Einzeiler ist getestet, kompakt, schnell und fehlerfrei.
0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)

Hallo Anonym, dieses Makro funktioniert nur bis zur ersten leere Zeile, danach kommt in den nächsten Zellen bis zur nächsten leerzeile dieses Zeichen #NV. Z.B. Zeile G2 bis G10 ist Text vohanden, in G11 ist kein Text und in G12 gibt es wieder einen Text. Danke

0 Punkte
Beantwortet von
Dann lade mal eine Beispieldatei hoch!
0 Punkte
Beantwortet von beverly_ Experte (3.6k Punkte)

Hi Jelena,

Sub Groß()
    Dim lngLetzte As Long
    Dim lngZeile As Long
    Range("G1") = Now
    lngLetzte = Range("G5:H303").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Application.ScreenUpdating = False
    For lngZeile = 2 To lngLetzte
        If Not IsNumeric(Cells(lngZeile, 7)) Then
            Cells(lngZeile, 7) = Application.Proper(Cells(lngZeile, 7))
        End If
        If Not IsNumeric(Cells(lngZeile, 8)) Then
            Cells(lngZeile, 8) = Application.Proper(Cells(lngZeile, 8))
        End If
    Next lngZeile
    Application.ScreenUpdating = False
    Range("H1") = Now
End Sub

Bei 300 Zeilen braucht dieses Makro nicht mal 1 Sekunde.

Bis später, Karin

0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)
Hallo Karin, in der Zelle G1 und H1 befindet sich eine Überschrift mit diesem Makro kommt in Zelle G1 und H1 das Datum und die Uhrzeit von der Makroausführung der Rest ginge gut. Bitte um Nachbesserung. Danke
0 Punkte
Beantwortet von jelena Experte (1.1k Punkte)

Hallo Karin, ich habe

Range("G1") = Now
Range("H1") = Now

ausgeblendet, dann müsste es gehen. Danke

...