Die Datei https://www.herber.de/bbs/user/98632.xlsm wurde aus Datenschutzgründen gelöscht
B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | |
4 | Datum | A | A | Artikel | b | b | b | b | Name2 | C | C | C | C | Name3 | S | S | S | S | Name4 |
Sub aac()
Dim rngC As Range, rngT As Range
Dim strS(1 To 6) As String
Dim i As Long
strS(1) = "Datum"
strS(2) = "Name2"
strS(3) = "Name3"
strS(4) = "Name4"
'strS(5) = "Name4"
'strS(6) = "test6"
On Error Resume Next
For i = 1 To UBound(strS)
Set rngT = Rows(4).Find(What:=strS(i), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).EntireColumn
If Not rngT Is Nothing Then
If Not rngC Is Nothing Then
Set rngC = Application.Union(rngC, rngT)
Else
Set rngC = rngT
End If
Set rngT = Nothing
rngC.Select
End If
Next i
End Sub
Sub Test_ordnen_Modul()
Dim lz, lz_einf, lngDatR, lngNameZ As Long
Dim intDatS, intArtS As Long
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI As Integer
Dim strName As String
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Cells.Find("Datum").Row
intDatS = Cells.Find("Datum").Column
intArtS = Cells.Find("Artikel").Column
intLetzteS = Cells(lngDatR, Columns.Count).End(xlToLeft).Column
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
lngNameZ = 2
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Application.ScreenUpdating = False
intSpalte1 = intArtS + 1
intI = 0
Do While strName <> ""
Do While Sheets("Test").Cells(lngDatR, intSpalte1 + intIl) <> strName
intI = intI + 1
intSpalte2 = intSpalte1 + intI
Loop
If strName <> Sheets("Namen").Cells(2, 1).Value Then
Sheets("Test").Range(Cells(lngDatR, intDatS), Cells(lz, intArtS)).Copy _
Sheets("Test").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
Sheets("Test").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
Sheets("Test").Range(Cells(lz_einf, intArtS + 1), Cells(lz_einf, intArtS + 1))
'letzte Zeile neu setzen
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Else
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Hier noch die Datei
Sub test_ordnen_modul_13()
Dim wks As Worksheet
Dim lz As Long, lz_einf As Long
Dim intName As Integer
Dim spaDatum, spaArtikel, spaName, spaL
Const Zeile_1 = 4 'Zeile mit Überschriften
Set wks = ActiveSheet
With wks
spaDatum = fncSpalte(varWert:="Datum", rngBereich:=.Rows(Zeile_1))
If spaDatum = 0 Then GoTo Beenden
lz = .UsedRange.SpecialCells(xlCellTypeLastCell).Row '
'letzte Zeile suchen in Spalte "Datum"
lz = .Cells(.Rows.Count, spaDatum).End(xlUp).Row
If lz <= Zeile_1 Then
MsgBox "keine Daten vorhanden"
GoTo Beenden
End If
spaArtikel = fncSpalte(varWert:="Artikel", rngBereich:=.Rows(Zeile_1))
If spaArtikel = 0 Then GoTo Beenden
For intName = 2 To 4
spaName = fncSpalte(varWert:="Name" & Format(intName, "0"), rngBereich:=.Rows( _
Zeile_1))
If spaName = 0 Then GoTo Beenden
If intName = 4 Then
spaL = .Cells(Zeile_1, .Columns.Count).End(xlToLeft).Column
Else
spaL = fncSpalte(varWert:="Name" & Format(intName + 1, "0"), rngBereich:=.Rows( _
Zeile_1)) - 1
End If
If spaL = 0 Then GoTo Beenden
' letzte gefüllte Zeile in Spalte "Datum"
lz_einf = .Cells(.Rows.Count, spaDatum).End(xlUp).Row + 1
'Datum:Artikel kopieren,Bereich ohne Spaltentitel
.Range(.Cells(Zeile_1 + 1, spaDatum), .Cells(lz, spaArtikel)).Copy _
wks.Cells(lz_einf, spaDatum)
'NameX bis letzte Spalte kopieren ohne Spaltentitel
.Range(.Cells(Zeile_1 + 1, spaName), .Cells(lz, spaL)).Copy _
wks.Cells(lz_einf, spaArtikel + 1)
Next
lz_einf = .Cells(.Rows.Count, spaDatum).End(xlUp).Row
'Daten im Quellbereich der umgruppierten Daten löschen
spaName = fncSpalte(varWert:="Name2", rngBereich:=.Rows(Zeile_1))
.Range(.Cells(Zeile_1, spaName), .Cells(lz, spaL)).Delete shift:=xlShiftToLeft
'Zellfüllungen löschen
'.Cells(Zeile_1, spaDatum).CurrentRegion.Interior.ColorIndex = xlNone
End With
Beenden:
Set wks = Nothing
End Sub
Function fncSpalte(varWert, rngBereich As Range) As Long
Dim spa
spa = Application.Match(varWert, rngBereich, 0)
If IsError(spa) Then
MsgBox "Spalte mit """ & varWert & """ in Titelzeile nicht gefunden", _
vbOKOnly, "Suche Spalte"
fncSpalte = 0
Else
fncSpalte = spa
End If
End Function
Die Datei https://www.herber.de/bbs/user/98634.xlsm wurde aus Datenschutzgründen gelöscht
Sub Test_ordnen_Modul()
Dim lz, lz_einf, lngDatR, lngNameZ As Long
Dim intDatS, intArtS As Long
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI As Integer
Dim strName As String
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Cells.Find("Datum").Row
intDatS = Cells.Find("Datum").Column
intArtS = Cells.Find("Artikel").Column
intLetzteS = Cells(lngDatR, Columns.Count).End(xlToLeft).Column
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
lngNameZ = 2
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Application.ScreenUpdating = False
intSpalte1 = intArtS + 1
intI = 0
Do While strName <> ""
Do While Sheets("Test").Cells(lngDatR, intSpalte1 + intI) <> strName
intI = intI + 1
intSpalte2 = intSpalte1 + intI
Loop
If strName <> Sheets("Namen").Cells(2, 1).Value Then
Sheets("Test").Range(Cells(lngDatR, intDatS), Cells(lz, intArtS)).Copy _
Sheets("Test").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
Sheets("Test").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
Sheets("Test").Range(Cells(lz_einf, intArtS + 1), Cells(lz_einf, intArtS + 1))
'letzte Zeile neu setzen
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Else
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Option Explicit
Sub Test_ordnen_Modul()
Dim lz, lz_einf, lngDatR, intLetzteZNamen As Long
Dim intDatS, intArtS, intRang As Integer
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI, intMaxRang As Integer
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Sheets("Test").Cells.Find("Datum").Row
intDatS = Sheets("Test").Cells.Find("Datum").Column
intArtS = Sheets("Test").Cells.Find("Artikel").Column
intLetzteS = Sheets("Test").Cells(lngDatR, Columns.Count).End(xlToLeft).Column
intLetzteZNamen = Sheets("Namen").Cells(lngDatR, Columns.Count).End(xlToLeft).Row
lz_einf = Sheets("Test").Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
intRang = 2
intMaxRang = Application.WorksheetFunction.Max(Sheets("Namen").Range("C:C"))
Application.ScreenUpdating = False
For intI = 2 To intLetzteZNamen
If Sheets("Namen").Cells(intI, 3).Value = intRang Then
intSpalte1 = Sheets("Namen").Cells(intI, 2).Value
End If
Next intI
If intRang <= intMaxRang Then
For intI = 2 To intLetzteZNamen
If Sheets("Namen").Cells(intI, 3).Value = intRang + 1 Then
intSpalte2 = Sheets("Namen").Cells(intI, 2).Value - 1
End If
Next intI
Else: intSpalte2 = intLetzteS
End If
Do While intRang <= intMaxRang
Sheets("Test").Range(Cells(lngDatR, intDatS), Cells(lz, intArtS)).Copy _
Sheets("Test").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
Sheets("Test").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
Sheets("Test").Range(Cells(lz_einf, intArtS + 1), Cells(lz_einf, intArtS + 1))
'letzte Zeile neu setzen
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
intRang = intRang + 1
If intRang < intMaxRang Then
For intI = 2 To lz
If Sheets("Namen").Cells(intI, 3).Value = intRang Then
intSpalte2 = Sheets("Namen").Cells(intI, 2).Value
End If
Next intI
Else: intSpalte2 = intLetzteS
End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Gruß
Die Datei https://www.herber.de/bbs/user/98632.xlsm wurde aus Datenschutzgründen gelöscht
B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | |
4 | Datum | A | A | Artikel | b | b | b | b | Name2 | C | C | C | C | Name3 | S | S | S | S | Name4 |
Sub aac()
Dim rngC As Range, rngT As Range
Dim strS(1 To 6) As String
Dim i As Long
strS(1) = "Datum"
strS(2) = "Name2"
strS(3) = "Name3"
strS(4) = "Name4"
'strS(5) = "Name4"
'strS(6) = "test6"
On Error Resume Next
For i = 1 To UBound(strS)
Set rngT = Rows(4).Find(What:=strS(i), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False).EntireColumn
If Not rngT Is Nothing Then
If Not rngC Is Nothing Then
Set rngC = Application.Union(rngC, rngT)
Else
Set rngC = rngT
End If
Set rngT = Nothing
rngC.Select
End If
Next i
End Sub
Sub Test_ordnen_Modul()
Dim lz, lz_einf, lngDatR, lngNameZ As Long
Dim intDatS, intArtS As Long
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI As Integer
Dim strName As String
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Cells.Find("Datum").Row
intDatS = Cells.Find("Datum").Column
intArtS = Cells.Find("Artikel").Column
intLetzteS = Cells(lngDatR, Columns.Count).End(xlToLeft).Column
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
lngNameZ = 2
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Application.ScreenUpdating = False
intSpalte1 = intArtS + 1
intI = 0
Do While strName <> ""
Do While Sheets("Test").Cells(lngDatR, intSpalte1 + intIl) <> strName
intI = intI + 1
intSpalte2 = intSpalte1 + intI
Loop
If strName <> Sheets("Namen").Cells(2, 1).Value Then
Sheets("Test").Range(Cells(lngDatR, intDatS), Cells(lz, intArtS)).Copy _
Sheets("Test").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
Sheets("Test").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
Sheets("Test").Range(Cells(lz_einf, intArtS + 1), Cells(lz_einf, intArtS + 1))
'letzte Zeile neu setzen
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Else
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Hier noch die Datei
Sub test_ordnen_modul_13()
Dim wks As Worksheet
Dim lz As Long, lz_einf As Long
Dim intName As Integer
Dim spaDatum, spaArtikel, spaName, spaL
Const Zeile_1 = 4 'Zeile mit Überschriften
Set wks = ActiveSheet
With wks
spaDatum = fncSpalte(varWert:="Datum", rngBereich:=.Rows(Zeile_1))
If spaDatum = 0 Then GoTo Beenden
lz = .UsedRange.SpecialCells(xlCellTypeLastCell).Row '
'letzte Zeile suchen in Spalte "Datum"
lz = .Cells(.Rows.Count, spaDatum).End(xlUp).Row
If lz <= Zeile_1 Then
MsgBox "keine Daten vorhanden"
GoTo Beenden
End If
spaArtikel = fncSpalte(varWert:="Artikel", rngBereich:=.Rows(Zeile_1))
If spaArtikel = 0 Then GoTo Beenden
For intName = 2 To 4
spaName = fncSpalte(varWert:="Name" & Format(intName, "0"), rngBereich:=.Rows( _
Zeile_1))
If spaName = 0 Then GoTo Beenden
If intName = 4 Then
spaL = .Cells(Zeile_1, .Columns.Count).End(xlToLeft).Column
Else
spaL = fncSpalte(varWert:="Name" & Format(intName + 1, "0"), rngBereich:=.Rows( _
Zeile_1)) - 1
End If
If spaL = 0 Then GoTo Beenden
' letzte gefüllte Zeile in Spalte "Datum"
lz_einf = .Cells(.Rows.Count, spaDatum).End(xlUp).Row + 1
'Datum:Artikel kopieren,Bereich ohne Spaltentitel
.Range(.Cells(Zeile_1 + 1, spaDatum), .Cells(lz, spaArtikel)).Copy _
wks.Cells(lz_einf, spaDatum)
'NameX bis letzte Spalte kopieren ohne Spaltentitel
.Range(.Cells(Zeile_1 + 1, spaName), .Cells(lz, spaL)).Copy _
wks.Cells(lz_einf, spaArtikel + 1)
Next
lz_einf = .Cells(.Rows.Count, spaDatum).End(xlUp).Row
'Daten im Quellbereich der umgruppierten Daten löschen
spaName = fncSpalte(varWert:="Name2", rngBereich:=.Rows(Zeile_1))
.Range(.Cells(Zeile_1, spaName), .Cells(lz, spaL)).Delete shift:=xlShiftToLeft
'Zellfüllungen löschen
'.Cells(Zeile_1, spaDatum).CurrentRegion.Interior.ColorIndex = xlNone
End With
Beenden:
Set wks = Nothing
End Sub
Function fncSpalte(varWert, rngBereich As Range) As Long
Dim spa
spa = Application.Match(varWert, rngBereich, 0)
If IsError(spa) Then
MsgBox "Spalte mit """ & varWert & """ in Titelzeile nicht gefunden", _
vbOKOnly, "Suche Spalte"
fncSpalte = 0
Else
fncSpalte = spa
End If
End Function
Die Datei https://www.herber.de/bbs/user/98634.xlsm wurde aus Datenschutzgründen gelöscht
Sub Test_ordnen_Modul()
Dim lz, lz_einf, lngDatR, lngNameZ As Long
Dim intDatS, intArtS As Long
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI As Integer
Dim strName As String
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Cells.Find("Datum").Row
intDatS = Cells.Find("Datum").Column
intArtS = Cells.Find("Artikel").Column
intLetzteS = Cells(lngDatR, Columns.Count).End(xlToLeft).Column
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
lngNameZ = 2
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Application.ScreenUpdating = False
intSpalte1 = intArtS + 1
intI = 0
Do While strName <> ""
Do While Sheets("Test").Cells(lngDatR, intSpalte1 + intI) <> strName
intI = intI + 1
intSpalte2 = intSpalte1 + intI
Loop
If strName <> Sheets("Namen").Cells(2, 1).Value Then
Sheets("Test").Range(Cells(lngDatR, intDatS), Cells(lz, intArtS)).Copy _
Sheets("Test").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
Sheets("Test").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
Sheets("Test").Range(Cells(lz_einf, intArtS + 1), Cells(lz_einf, intArtS + 1))
'letzte Zeile neu setzen
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
Else
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
'neuen Namen setzten
lngNameZ = lngNameZ + 1
strName = Sheets("Namen").Cells(lngNameZ, 1).Value
End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Option Explicit
Sub Test_ordnen_Modul()
Dim lz, lz_einf, lngDatR, intLetzteZNamen As Long
Dim intDatS, intArtS, intRang As Integer
Dim intSpalte1, intSpalte2 As Integer
Dim intLetzteS, intI, intMaxRang As Integer
lz = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
lngDatR = Sheets("Test").Cells.Find("Datum").Row
intDatS = Sheets("Test").Cells.Find("Datum").Column
intArtS = Sheets("Test").Cells.Find("Artikel").Column
intLetzteS = Sheets("Test").Cells(lngDatR, Columns.Count).End(xlToLeft).Column
intLetzteZNamen = Sheets("Namen").Cells(lngDatR, Columns.Count).End(xlToLeft).Row
lz_einf = Sheets("Test").Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
intRang = 2
intMaxRang = Application.WorksheetFunction.Max(Sheets("Namen").Range("C:C"))
Application.ScreenUpdating = False
For intI = 2 To intLetzteZNamen
If Sheets("Namen").Cells(intI, 3).Value = intRang Then
intSpalte1 = Sheets("Namen").Cells(intI, 2).Value
End If
Next intI
If intRang <= intMaxRang Then
For intI = 2 To intLetzteZNamen
If Sheets("Namen").Cells(intI, 3).Value = intRang + 1 Then
intSpalte2 = Sheets("Namen").Cells(intI, 2).Value - 1
End If
Next intI
Else: intSpalte2 = intLetzteS
End If
Do While intRang <= intMaxRang
Sheets("Test").Range(Cells(lngDatR, intDatS), Cells(lz, intArtS)).Copy _
Sheets("Test").Range(Cells(lz_einf, intDatS), Cells(lz_einf, intDatS))
Sheets("Test").Range(Cells(lngDatR, intSpalte1), Cells(lz, intSpalte2)).Cut _
Sheets("Test").Range(Cells(lz_einf, intArtS + 1), Cells(lz_einf, intArtS + 1))
'letzte Zeile neu setzen
lz_einf = Cells(Rows.Count, intDatS).End(xlUp).Offset(1, 0).Row
'Anfangsspalte zum Ausschneiden neu setzen
intSpalte1 = intSpalte2 + 1
intRang = intRang + 1
If intRang < intMaxRang Then
For intI = 2 To lz
If Sheets("Namen").Cells(intI, 3).Value = intRang Then
intSpalte2 = Sheets("Namen").Cells(intI, 2).Value
End If
Next intI
Else: intSpalte2 = intLetzteS
End If
Loop
Range(Cells(1, intDatS), Cells(1, intLetzteS)).Columns.EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Gruß