von Tim1202 » So, 29.05.2005 22:07
Hallo,
hier hab ich mal schnell was gecodet, ich hoff es entspricht deinen Erwartungen. Du musst evtl. noch ein paar Werte verändern. Momentan tut es im ersten Tabellenblatt die Spalten B+C "bereinigen" und dann die übrigen Werte in Spalte C zusammenfassen.
Here it comes:
Code: Alles auswählen
Sub SpaltenBereinigenUndZusammenfassen
Dim SuchBeschreibung, oTabelle, oBereich As Object
Dim gesucht(4), leer(4) As String
Dim n, m, o, vSpalte1, vSpalte2, vSpalte3 as Integer
Dim vLetzteZeile as Long
vSpalte1 = 1 'Spalte B
vSpalte2 = 2 'Spalte C
vSpalte3 = 3 'Spalte D für die zusammengefassten Daten
oTabelle = ThisComponent.Sheets(0) 'Das Tabellenblatt, dass benutzt werden soll
'Festlegen in welcher Tabelle gesucht wird
For m = vSpalte to vSpalte2
oBereich = oTabelle.columns(m)
SuchBeschreibung = oBereich.createReplaceDescriptor()
SuchBeschreibung.SearchWords = true 'Sucht nach ganzen Zellen
gesucht() = Array("ST", "MF", "AW", "TW")
leer() = Array("", "", "", "")
oReplace = oTabelle.createReplaceDescriptor()
'oReplace.SearchCaseSensitive = True
For n = LBound(gesucht()) To UBound(leer())
oReplace.SearchString = gesucht(n)
oReplace.ReplaceString = leer(n)
oBereich.ReplaceAll(oReplace)
Next n
Next m
'Jetzt müssen die Zellen zusammengeführt werden
o=0 'Zeilenzähler für die 3.Spalte
vLetzteZeile = GetLastUsedRow(oTabelle)
For m = vSpalte1 to vSpalte2 'Schleife für die Spalten
For n = 0 to vLetzteZeile 'Schleife für Zeilen
If oTabelle.getCellByPosition(m, n).string = "" then
'Leere Zelle
else 'Belegte Zelle
oTabelle.getCellByPosition(vSpalte3, o).string = oTabelle.getCellByPosition(m, n).string
o=o+1
end if
Next n
Next m
End Sub
'Diese Funktion ermittelt die letzte benützte Zeile
Function GetLastUsedRow(oSheet as Object) as Integer
Dim oCell As Object
Dim oCursor As Object
Dim aAddress As Variant
oCell = oSheet.GetCellbyPosition(0, 0)
oCursor = oSheet.createCursorByRange(oCell)
oCursor.GotoEndOfUsedArea(True)
aAddress = oCursor.RangeAddress
GetLastUsedRow = aAddress.EndRow
End Function
Mfg
Timon
Hallo,
hier hab ich mal schnell was gecodet, ich hoff es entspricht deinen Erwartungen. Du musst evtl. noch ein paar Werte verändern. Momentan tut es im ersten Tabellenblatt die Spalten B+C "bereinigen" und dann die übrigen Werte in Spalte C zusammenfassen.
Here it comes:
[code]Sub SpaltenBereinigenUndZusammenfassen
Dim SuchBeschreibung, oTabelle, oBereich As Object
Dim gesucht(4), leer(4) As String
Dim n, m, o, vSpalte1, vSpalte2, vSpalte3 as Integer
Dim vLetzteZeile as Long
vSpalte1 = 1 'Spalte B
vSpalte2 = 2 'Spalte C
vSpalte3 = 3 'Spalte D für die zusammengefassten Daten
oTabelle = ThisComponent.Sheets(0) 'Das Tabellenblatt, dass benutzt werden soll
'Festlegen in welcher Tabelle gesucht wird
For m = vSpalte to vSpalte2
oBereich = oTabelle.columns(m)
SuchBeschreibung = oBereich.createReplaceDescriptor()
SuchBeschreibung.SearchWords = true 'Sucht nach ganzen Zellen
gesucht() = Array("ST", "MF", "AW", "TW")
leer() = Array("", "", "", "")
oReplace = oTabelle.createReplaceDescriptor()
'oReplace.SearchCaseSensitive = True
For n = LBound(gesucht()) To UBound(leer())
oReplace.SearchString = gesucht(n)
oReplace.ReplaceString = leer(n)
oBereich.ReplaceAll(oReplace)
Next n
Next m
'Jetzt müssen die Zellen zusammengeführt werden
o=0 'Zeilenzähler für die 3.Spalte
vLetzteZeile = GetLastUsedRow(oTabelle)
For m = vSpalte1 to vSpalte2 'Schleife für die Spalten
For n = 0 to vLetzteZeile 'Schleife für Zeilen
If oTabelle.getCellByPosition(m, n).string = "" then
'Leere Zelle
else 'Belegte Zelle
oTabelle.getCellByPosition(vSpalte3, o).string = oTabelle.getCellByPosition(m, n).string
o=o+1
end if
Next n
Next m
End Sub
'Diese Funktion ermittelt die letzte benützte Zeile
Function GetLastUsedRow(oSheet as Object) as Integer
Dim oCell As Object
Dim oCursor As Object
Dim aAddress As Variant
oCell = oSheet.GetCellbyPosition(0, 0)
oCursor = oSheet.createCursorByRange(oCell)
oCursor.GotoEndOfUsedArea(True)
aAddress = oCursor.RangeAddress
GetLastUsedRow = aAddress.EndRow
End Function
[/code]
Mfg
Timon