Übereinstimmungen in zwei Tabellen finden und nutzen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Zoidberg
**
Beiträge: 36
Registriert: Do, 29.01.2004 16:34
Wohnort: Gummersbach

Übereinstimmungen in zwei Tabellen finden und nutzen

Beitrag von Zoidberg »

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
stefanak
**
Beiträge: 27
Registriert: Mi, 10.05.2006 17:15

Beitrag von stefanak »

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.

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
So in etwa.
Zoidberg
**
Beiträge: 36
Registriert: Do, 29.01.2004 16:34
Wohnort: Gummersbach

Beitrag von Zoidberg »

stefanak hat geschrieben:So in etwa.
Nein,

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
stefanak
**
Beiträge: 27
Registriert: Mi, 10.05.2006 17:15

Beitrag von stefanak »

Hallo, schön daß es funktioniert.

Für das andere Problem kann ich nur sagen:
Willkommen im Club. Das Problem habe ich auch.
Hier muß ich micht erstmal heran tasten, oder jemand anderes hat eine Idee dafür.

Stefan
Antworten