Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Mit "Range" in Celle "A2" springen und bis zur letzten gefüllten Zelle markieren
#1
Hallo zusammen,

ich bin dabei mir eine größere Musiksammlung zusammenzustellen. Über ein Tag-Programm, lese ich die Tags aus  und exportiere diese in eine CSV-Datei.
Diese rufe ich auf und formatiere Sie. Muß einfügen, dass ich mich gerade Anfange in VBA einzuarbeiten. Da dies immer die gleichen Vorggänge sind habe ich einen Makro aufgezeichnet wie fogt:

Sub InterpretenCsvOrdnen()
'
' InterpretenCsvOrdnen Makro
' Sortiert und formatiert den Inhalt der CSV-Datei
'

'
    Range("A1").Select
    ActiveCell.SpecialCells(xlLastCell).Select
    'Range("A49").Select
    'Selection.ClearContents
    Range("A1,B1,C1,D1,E1,F1,G1,H1").Select
    Range("H1").Activate
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    With Selection.Font
        .Name = "Arial"
        .Size = 16
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    Selection.Borders(xlInsideVertical).LineStyle = xlNone
    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlBottom
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Columns("A:A").EntireColumn.AutoFit
    Columns("B:B").EntireColumn.AutoFit
    Columns("C:C").EntireColumn.AutoFit
    Columns("D:D").EntireColumn.AutoFit
    Columns("E:E").EntireColumn.AutoFit
    Columns("F:F").EntireColumn.AutoFit
    Columns("G:G").EntireColumn.AutoFit
    Columns("H:H").EntireColumn.AutoFit
    Range("A2").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Worksheets(1).Sort.SortFields.Clear
    Worksheets(1).Sort.SortFields.Add2 _
        Key:=Range("A2:A49"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    Worksheets(1).Sort.SortFields.Add2 _
        Key:=Range("B2:B49"), SortOn:=xlSortOnValues, Order:=xlAscending, _
        DataOption:=xlSortNormal
    With Worksheets(1).Sort
        .SetRange Range("A1:H49")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("A2").Select
End Sub


Wenn nun mehr als 49 Zeilen vorhanden sind funktioniert die Sortierung nur teilweise.
Wie kann ich die Anweisung

Key:=Range("B2:B49"), SortOn:=xlSortOnValues, Order:=xlAscending, _

        DataOption:=xlSortNormal

so anpassen, dass Excel den Bereich von "B2" bis zur letzten gefüllten Zellen in der Spalte markiert und nicht bei "B49" stoppt.
Antworten Top
#2
Hei,

stell doch mal deine Datei ein. Aufgezeichnete Makros sind nur sehr bedingt einsetzbar.
Hoffe geholfen zu haben
Hubert
Antworten Top
#3
Hallo,

habe dir eine CSV-Da
.csv   Louis_Armstrong-2023_01_02.csv (Größe: 31,46 KB / Downloads: 2)
.csv   Louis_Armstrong-2023_01_02.csv (Größe: 31,46 KB / Downloads: 2) tei angehängt
Antworten Top
#4
Hi

Für lernende.
https://blog.coupler.io/excel-vba-range/

Schau mal unter "Dynamic range example"

Gruß Elex
Antworten Top
#5
Hallöchen,

und schaue auch mal zum Thema mp3 bei uns:
Excel-MP3-Lister-Player-Playlist
und
Excel-MP3-Tag-listen-und-bearbeiten-WMA-listen
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
Hallo,

zu Deiner speziellen Frage bezüglich der letzten genutzten Zeile in Spalte B, - nimm einfach eine Variable, - z. B.:

Code:
Dim lngLetzte As Long 'dies gehört normalerweise an den Anfagn Deines Codes bevor Du mit Range..... beginnst

lngLetzte = Tabelle1.Cells(Rows.Count, 2).End(xlUp).Row 'ermittelt Dir die letzte gefüllte Zeile in Spalte "B" / Tabelle1 ggf. anpassen
.
.
.
Code:
Key:=Range("B" & 2 & ":" & "B" & lngLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, _
Code:
        DataOption:=xlSortNormal


In diesem Fall wird Dir die Sortierung bis zur jeweils letzten Zeile in Spalte "B" vorgenommen.

Grüße
NobX
Antworten Top
#7
Hallo



Zitat:Key:=Range("B" & 2 & ":" & "B" & lngLetzte)

kann man auch so schreiben:      Key:=Range("B2:B" & lngLetzte)

und bitte NICHT vergessen         .SetRange Range("A1:H" & lngLetzte)

mfg Gast 123
[-] Folgende(r) 1 Nutzer sagt Danke an Gast 123 für diesen Beitrag:
  • NobX
Antworten Top
#8
Verwende dynamische Methoden wie usedrange oder currentregion.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#9
Danke euch. Werde es der Reihe anpassen und ausprobieren. Geb euch Bescheid ob funkt.
Antworten Top
#10
Habe nun folgenden Code erstellt:

Code:
Sub ArbeitsmappeOrdnenOriginalTest()



Dim lngLetzte As Long

lngLetzte = Tabelle1.Cells(Rows.Count, 2).End(xlUp).Row



    ActiveWorkbook.Worksheets(1).Sort.SortFields. _

        Clear

    ActiveWorkbook.Worksheets(1).Sort.SortFields. _

        Add2 Key:=Range("A" & 2 & ":" & "A" & lngLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, _

        DataOption:=xlSortNormal

    ActiveWorkbook.Worksheets(1).Sort.SortFields. _

        Add2 Key:=Range("B" & 2 & ":" & "B" & lngLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, _

        DataOption:=xlSortNormal

    ActiveWorkbook.Worksheets(1).Sort.SortFields. _

        Add2 Key:=Range("C" & 2 & ":" & "C" & lngLetzte), SortOn:=xlSortOnValues, Order:=xlAscending, _

        DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets(1).Sort

        .SetRange Range("A1:H" & lngLetzte)

        .Header = xlYes

        .MatchCase = False

        .Orientation = xlTopToBottom

        .SortMethod = xlPinYin

        .Apply

    End With

    Rows("2:2").Select

    Selection.Delete Shift:=xlUp

    Range("A1,B1,C1,D1,E1,F1,G1,H1").Select

    Range("H1").Activate

    Selection.Borders(xlDiagonalDown).LineStyle = xlNone

    Selection.Borders(xlDiagonalUp).LineStyle = xlNone

    With Selection.Borders(xlEdgeLeft)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlMedium

    End With

    With Selection.Borders(xlEdgeTop)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlMedium

    End With

    With Selection.Borders(xlEdgeBottom)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlMedium

    End With

    With Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

        .ColorIndex = 0

        .TintAndShade = 0

        .Weight = xlMedium

    End With

    Selection.Borders(xlInsideVertical).LineStyle = xlNone

    Selection.Borders(xlInsideHorizontal).LineStyle = xlNone

    With Selection.Interior

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

        .Color = 65535

        .TintAndShade = 0

        .PatternTintAndShade = 0

    End With

    Selection.Font.Bold = True

    With Selection

        .HorizontalAlignment = xlCenter

        .VerticalAlignment = xlBottom

        .WrapText = False

        .Orientation = 0

        .AddIndent = False

        .IndentLevel = 0

        .ShrinkToFit = False

        .ReadingOrder = xlContext

        .MergeCells = False

    End With

    Columns("A:A").EntireColumn.AutoFit

    Columns("B:B").ColumnWidth = 25.89

    Columns("C:C").EntireColumn.AutoFit

    Columns("D:D").ColumnWidth = 10.67

    Columns("D:D").EntireColumn.AutoFit

    Columns("E:E").EntireColumn.AutoFit

    Columns("F:F").EntireColumn.AutoFit

    Columns("G:G").EntireColumn.AutoFit

    Columns("H:H").EntireColumn.AutoFit

End Sub






Er formatiert die Zellen A1 :H1. Das passt aber die Sortiereung funkt nicht.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste