Hi !
Ich hab mal wieder ein etwas schwierigeres Problem.
Ich habe drei Tabellenblätter.
In Blatt 1 stehen Serien untereinander (Serie = vierstellige Zahl)
In Blatt 2 stehen Artikelnummern (Artikelnummer = Serie + zweistellige Sortenkennung --> Also sechstellig, wobei die ersten vier Zahlen der "Serie" entsprechen und öfter vorkommen)
Also zb. Serie 1234 kann enthalten 123456 und 123478 und 123412.
Ich möchte nun die Serien die ich in Blatt 1 aufführe überprüfen, und mir in Blatt 3 untereinander auflisten lassen welche Artikel diese Serien alle umfassen.
Ich hab schon rumexperimentiert, aber noch keine Lösung gefunden. Wer hat eine Idee?
Danke !
Gruß, Zoidberg
Übereinstimmungen in zwei Tabellen finden und nutzen
Moderator: Moderatoren
Hallo,
das nur über die Calc zu lösen ist nicht sehr bequem.
Besser geht das via Macro mit einem Button ( hab ich schon gemacht) oder Tastenkombination (hab ich noch nicht gemacht).
Du solltest wissen wie viele Zeilen die Tabellen haben oder besser noch das im Macro mit überprüfen.
Dann liest Du die erste Serien-Nummer ein und überprüfst diese mit allen Zeilen in Tabelle 2.
Bei Erfolg wird die Zeile ausgelesen und in Tabelle 3 geschrieben, wobei ein Zöhler eingebaut sein muß, damit sich Tabelle 3 auch füllt.
So in etwa.
das nur über die Calc zu lösen ist nicht sehr bequem.
Besser geht das via Macro mit einem Button ( hab ich schon gemacht) oder Tastenkombination (hab ich noch nicht gemacht).
Du solltest wissen wie viele Zeilen die Tabellen haben oder besser noch das im Macro mit überprüfen.
Dann liest Du die erste Serien-Nummer ein und überprüfst diese mit allen Zeilen in Tabelle 2.
Bei Erfolg wird die Zeile ausgelesen und in Tabelle 3 geschrieben, wobei ein Zöhler eingebaut sein muß, damit sich Tabelle 3 auch füllt.
Code: Alles auswählen
Sub Seriennummer
DIM iCount(3) as Integer REM Zähler für Tabellenzeilen
DIM sSerieNrT(3) as String REM Variable für Seriennummer-Vergleich
DIM sInhalt(8) as String REM Anzahl der auszulesenden Spalten
oDoc = ThisComponent
oCon = oDoc.GetCurrentController()
FOR i=0 TO iCount(1)
oSheet = oDoc.Sheets.getByName("Tabelle1")
oCell = oSheet.getCellByPosition(0, i)
IF oCell.getType() <> 0 THEN
iCount(1) = iCount(1) +1
sSerieNrT(1) = oCell.getString
FOR z=0 TO iCount(2)
oSheet = oDoc.Sheets.getByName("Tabelle2")
oCell = oSheet.getCellByPosition(0, z)
IF oCell.getType() <> 0 THEN
iCount(2) = iCount(2) +1
sSerieNrT(2) = oCell.getString
IF sSerieNrT(1) = left(sSerieNrT(2), 4) THEN
FOR x=0 TO 8 REM Anzahl der auszulesenden Spalten
oCell = oSheet.getCellByPosition(x, z)
sInhalt(x) = oCell.getString
NEXT
iCount(3) = iCount(3) +1
oSheet = oDoc.Sheets.getByName("Tabelle3")
FOR x=0 TO 8 REM Anzahl der zu schreibenden Spalten
oCell = oSheet.getCellByPosition(x, iCount(3))
oCell.setString( sInhalt(x) )
NEXT
ENDIF
ENDIF
NEXT
ENDIF
NEXT
End Sub
Nein,stefanak hat geschrieben:So in etwa.
Genau SO!
Klappt perfekt. Das war nicht nur ein Tip, sondern direkt die Lösung.
Danke!
Edit: Ich habe eine ziemlich lange Liste zu durchforsten, was entsprechend lange dauert. ich habe mir überlegt zu versuchen mit einer Suchfunktion die Position der Serie innerhalb der langen Liste zu suchen, und dann dort direkt hinzuspringen. Also so was wie "Find First" und die Zeilennummer dann direkt an die Schleife zu übergeben.
Ich finde aber keine Erklärungen zu einer solchen Funktion. Muss es doch im Prinzip bei Suchen und Ersetzen auch in Basic geben, oder?
Und ist das überhaupt schneller als eine Schleife die er abarbeitet?
Gruß, Zoidberg