Larian Banner: Baldur's Gate Patch 9
Previous Thread
Next Thread
Print Thread
Page 57 of 77 1 2 55 56 57 58 59 76 77
#88294 19/05/07 09:11 PM
Joined: Mar 2003
Location: Krynn
veteran
Offline
veteran
Joined: Mar 2003
Location: Krynn
Mist, die Editierfrist ist abgelaufen..... <img src="/ubbthreads/images/graemlins/cry.gif" alt="" />


#88295 19/05/07 09:35 PM
Joined: Nov 2003
veteran
Offline
veteran
Joined: Nov 2003
<img src="/ubbthreads/images/graemlins/ROFL.gif" alt="" /> <img src="/ubbthreads/images/graemlins/ROFL.gif" alt="" /> <img src="/ubbthreads/images/graemlins/ROFL.gif" alt="" />


Genieße Dein Leben ständig, denn Du bist länger tot als lebendig.
#88296 21/05/07 06:39 PM
Joined: Mar 2003
veteran
Offline
veteran
Joined: Mar 2003
.. es gibt eben doch Mächte zwischen Himmel und Erde gegen die auch ein hoher, alter, gewichtiger Universumsdrache nicht an kann...
[Linked Image] [Linked Image] [Linked Image]

#88297 23/05/07 10:30 AM
Joined: Mar 2003
Location: Germany
veteran
Offline
veteran
Joined: Mar 2003
Location: Germany
Sooo... ich hab eine Excel-Aufgabe zu lösen und da meine VB-Fähigkeiten nicht ganz so toll sind, ergeht hiermit ein offizieller Hilfeschrei. <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />

Problemstellung:

Ich habe zwei Tabellen. Mehrere Zellen aus Spalte 1 beider Tabellen sind identisch, viele aber auch nicht - hinzu kommt noch, daß die Positionen der Zeilen variieren, d.h. Zeile 6 in Tabelle 1 kann durchaus Zeil 10 in Tabelle 2 sein.

Was ich machen muß:

Spalte 1 der beiden Tabellen vergleichen und für jede Zeile, in der es eine Übereinstimmung gibt, den Wert in Spalte 2 von Tabelle 2 in Spalte 3 der jeweiligen Zeile in Tabelle 1 kopieren.


Ich weiß nicht, was das einfachste wäre oder ob es da schon vorgefertigte Lösungen gibt. Folgendes ist mir spontan eingefallen:

Code
zeile1 = {Zeilenanzahl in Tabelle 1}
zeile2 = {Zeilenanzahl in Tabelle 2}

i = {Schleifenvariable}
j = {Schleifenvariable}

For i = 1 To zeile1
   For j = 1 To zeile2
      {
      Vergleiche Tabelle1.Zelle(i,1) mit Tabelle2.Zelle(j,1)
      Wenn identisch
         {
         Kopiere Tabelle2.Zelle(j,2) nach Tabelle1.Zelle(i,3)
         Lösche komplette Tabelle2.Zeile(j)
         zeile2 = zeile2 - 1
         Brich Schleife ab
         }
      }  


Also ich vergleich jede Zeile von Tabelle 1 mit jeder Zeile von Tabelle 2... wenn es eine Übereinstimmung gibt, wird der gewünschte Wert kopiert. Zusätzlich wird die komplette Zeile gelöscht, damit nicht erneut und unnötigerweise damit verglichen wird. Um die maximalen Schleifendurchläufe zu minimieren, wird auch die Anzahl der Zeilen in Tabelle 2 dann um 1 gesenkt.
Wenn es keine Übereinstimmung gibt, wird die Schleife komplett durchlaufen.


Abgesehen von der Frage, ob das Vorgehen nicht vereinfacht werden kann, wäre es nun für mich interessant zu wissen, wie sich das alles korrekt in Visual Basic als Makro-Code für Excel ausgedrückt werden kann.

Sachdienliche Hinweise werden mit ewigem Dank meinerseits belohnt. <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />


Nigel Powers: "There are only two things I can't stand in this world. People who are intolerant of other people's cultures... and the Dutch!"
#88298 23/05/07 10:47 AM
Joined: Mar 2003
Location: Franken
R
veteran
Offline
veteran
R
Joined: Mar 2003
Location: Franken
Nicht mit 500 Euro? <img src="/ubbthreads/images/graemlins/tongue.gif" alt="" />

(von mir brauchst du übrigens keine Hilfe zu erwarten, ich habe keine Ahnung - wird bestimmt der eine oder andere hier universell bestätigen! <img src="/ubbthreads/images/graemlins/biggrin.gif" alt="" />)

#88299 23/05/07 11:00 AM
Joined: Mar 2003
Location: Krynn
veteran
Offline
veteran
Joined: Mar 2003
Location: Krynn
Dein Code klingt zumindest logisch, aber von der speziellen Syntax habe ich latürnich auch keine Ahnung. Mach das doch lieber in Flash.... <img src="/ubbthreads/images/graemlins/biggrin.gif" alt="" /> <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />


#88300 23/05/07 11:44 AM
Joined: Mar 2003
Location: Germany
veteran
Offline
veteran
Joined: Mar 2003
Location: Germany
Gott sei Dank konnte ich Flash vermeiden. <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />

Hier der bisherige Code:

Code
Sub compare_and_copy()
    Dim zeilen1, zeilen2, i, j As Integer
    
    zeilen1 = xxx
    zeilen2 = yyy
    
    For i = 1 To zeilen1
        For j = 1 To zeilen2
            If Worksheets("Tabelle1").Cells(i, 1).Value = Worksheets("Tabelle2").Cells(j, 1).Value Then
                Worksheets("Tabelle1").Cells(i, 3).Value = Worksheets("Tabelle2").Cells(j, 2)
                Worksheets("Tabelle2").Rows(j).Delete
                zeilen2 = zeilen2 - 1
                j = zeilen2
            End If
        Next j
    Next i
                
        
End Sub


Bisher klappt's recht gut... manche Zellen haben allerdings so viel Inhalt, daß das Makro da aussteigt, aber in den wenigen Einzelfällen kann ich das dann manuelle kopieren. Immer noch besser, als alle 5000 Zeilen selbst zu checken und zu kopieren. <img src="/ubbthreads/images/graemlins/biggrin.gif" alt="" />


Nigel Powers: "There are only two things I can't stand in this world. People who are intolerant of other people's cultures... and the Dutch!"
#88301 23/05/07 05:14 PM
Joined: Mar 2003
veteran
Offline
veteran
Joined: Mar 2003
Hmmm... ich hätte jetzt mit einer Java Lösung aufgewartet... aber da du selbst schon eine Lösung hast. <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />

ps. wäre eine Lösung mit einer Datenbank (z.B. Access) eine Alternative gewesen? Datenbanken sind für diese Art der Verarbeitung prädestiniert denke ich. <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />

Last edited by Tutamun; 23/05/07 05:15 PM.
#88302 23/05/07 05:16 PM
Joined: Mar 2003
Location: Germany
veteran
Offline
veteran
Joined: Mar 2003
Location: Germany
Quote
ps. wäre eine Lösung mit einer Datenbank (z.B. Access) eine Alternative gewesen?

Eher nicht, ich habe hier keine Datenbank-Software installiert und war dementsprechend auf Excel angewiesen.


Nigel Powers: "There are only two things I can't stand in this world. People who are intolerant of other people's cultures... and the Dutch!"
#88303 23/05/07 07:17 PM
Joined: Mar 2003
veteran
Offline
veteran
Joined: Mar 2003
Bei Microsoft Office gibt es ein kleines Tool namens Microsoft Query. (Ich weiß nicht ob das auch beim reinen Excel dabei ist.) Damit kann man Datenbankabfragen erstellen... und z.B. eine Excel Tabelle als Datenquelle verwenden.

Ich gehe mal davon aus das ich alles in einer Arbeitsmappe Mappe3.xls habe.
Tabelle1 mit Spalte1 und Spalte2 (als Überschrift)
Tabelle2 mit Spalte1 und Spalte2 (als Überschrift)

Das Ergebnis will ich in Tabelle3 reinschreiben, wähle diese also aus.

Menü: Daten -> Externe Daten -> Neue Abfrage erstellen -> Excel Dateien* -> Ok -> Mappe3.xls -> Ok -> Optionen -> Systemtabellen: Ja -> Ok -> jeweils Tabelle1-Spalte1, Spalte2 sowie Tabelle2-Spalte1 und Spalte2 in die Abfrage übernehmen. -> Weiter -> Ok -> (jetzt sieht man die Daten der 4 Spalten) SQL -> (modifizieren das es diesem SQL Statement entspricht
--------
select tab1.s1, tab1.sp2, tab2.sp2
from tab1, tab2
where tab1.sp1 = tab2.sp1
--------
)

Für unser Excel Microsoft Query Beispiel sieht es so aus:
--------
SELECT `Tabelle1$`.Spalte1, `Tabelle1$`.Spalte2, `Tabelle2$`.Spalte2
FROM `C:\Eigene Dateien\Mappe3`.`Tabelle1$` `Tabelle1$`, `C:\Eigene Dateien\Mappe3`.`Tabelle2$` `Tabelle2$`
where `Tabelle1$`.Spalte1 = `Tabelle2$`.Spalte1
--------

Ok -> Ergebnis kontrollieren -> Menü: Datei -> Daten an Microsoft Excel zurückgeben. -> Zelle für Ergebnis auswählen... und fertig.

Wenn man will das auch Zeilen auftauchen die nicht in beiden Tabellen vorhanden sind dann muss man noch etwas SQL können einbringen.

Man kann sich so eine Datenquelle inkl. Abfrage auch speichern damit man die nicht jedesmal neu erstellen muss.

Wenn nicht das ganze MS Excel/Query drumherum wäre dann wäre die Lösung 3 Zeilen SQL viel schneller und einfacher als extra ein VBA Programm schreiben. Wobei das Programmieren mehr Spaß macht.

#88304 23/05/07 07:38 PM
Joined: Mar 2003
A
veteran
Offline
veteran
A
Joined: Mar 2003
Quote
Wenn nicht das ganze MS Excel/Query drumherum wäre dann wäre die Lösung 3 Zeilen SQL viel schneller und einfacher als extra ein VBA Programm schreiben. Wobei das Programmieren mehr Spaß macht.


Deswegen ist SQL ja auch - neben Java - meine Lieblingssprache. <img src="/ubbthreads/images/graemlins/biggrin.gif" alt="" />


When you find a big kettle of crazy, it's best not to stir it.
--Dilbert cartoon

"Interplay.some zombiefied unlife thing going on there" - skavenhorde at RPGWatch
#88305 23/05/07 08:44 PM
Joined: Mar 2003
veteran
Offline
veteran
Joined: Mar 2003
Sauber, sog i!
Der Tut, der hat ja waa auf dem Kasten! <img src="/ubbthreads/images/graemlins/ohh.gif" alt="" />

... ah moment mal - das kannst Du aber nur, weil Du Deine Legion Maden in einer Art Programmierer-Sweatshop verheizt. [Linked Image]
Schäm´ Dich, Tut! [Linked Image]

<img src="/ubbthreads/images/graemlins/silly.gif" alt="" />

#88306 23/05/07 08:52 PM
Joined: Mar 2003
Location: Germany
veteran
Offline
veteran
Joined: Mar 2003
Location: Germany
Naja, das Problem ist, daß ich auch MS Query nicht installiert habe, weil ich das eigentlich nie brauche. <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />


Nigel Powers: "There are only two things I can't stand in this world. People who are intolerant of other people's cultures... and the Dutch!"
#88307 23/05/07 10:40 PM
Joined: Mar 2003
old hand
Offline
old hand
Joined: Mar 2003
Dann gäbe es da ja noch OpenOffice, auch mit Datenbankprogramm.

#88308 23/05/07 10:42 PM
Joined: Mar 2003
Location: Germany
veteran
Offline
veteran
Joined: Mar 2003
Location: Germany
Auch bei OpenOffice habe ich die Datenbank-Software und Ähnliches nicht installiert. <img src="/ubbthreads/images/graemlins/smile.gif" alt="" />

Ich komme mir jetzt fast schon schäbig vor. <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" /> Aber mit dem kleinen VB-Makro hat ja zum Glück alles geklappt. <img src="/ubbthreads/images/graemlins/up.gif" alt="" /> (Jetzt muß ich den Scheiß nur noch übersetzen! <img src="/ubbthreads/images/graemlins/suspicion.gif" alt="" />)


Nigel Powers: "There are only two things I can't stand in this world. People who are intolerant of other people's cultures... and the Dutch!"
#88309 24/05/07 10:22 AM
Joined: Mar 2003
veteran
Offline
veteran
Joined: Mar 2003
Meine Maden arbeiten aber gerne für mich. Als Belohnung gibt es dann eine große Party! <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />

#88310 24/05/07 04:42 PM
Joined: Mar 2003
veteran
Offline
veteran
Joined: Mar 2003
Tut - die Martha Stewart des Larian Forums.
<img src="/ubbthreads/images/graemlins/badsmile2.gif" alt="" />

#88311 24/05/07 06:06 PM
Joined: Mar 2003
old hand
Offline
old hand
Joined: Mar 2003
Quote
Ich komme mir jetzt fast schon schäbig vor.

wie wahr, wie wahr

Dabei wäre ein Datenbankprogramm noch nicht einmal nötig, das lässt sich schon mit einem guten Browser machen.

Code
&lt;html&gt;
&lt;head&gt;&lt;title&gt;nix&lt;/title&gt;
&lt;script language="JScript"&gt;
function los()
{
  var con=new ActiveXObject("ADODB.Connection");
  with con
  {
    provider="Microsoft.Jet.OLEDB.4.0";
    properties("Extended Properties").value="Excel 8.0";
    open("C://Eigenen Dateien//Mappe3.xls");
    execute("SELECT Tabelle1$.Spalte1, Tabelle1$.Spalte2, Tabelle2$.Spalte2 AS Spalte3 INTO Tabelle3 "+
            "FROM [Tabelle1$] INNER JOIN [Tabelle2$] ON Tabelle1$.Spalte1=Tabelle2$.Spalte1;");
    close();
  }
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload="los()"&gt;
&lt;/body&gt;
&lt;/html&gt;

Abgesehen davon, sind für Übersetzungen o.ä. Datenbanken nicht fast sogar Pflicht?

#88312 24/05/07 08:08 PM
Joined: Mar 2003
Location: Germany
veteran
Offline
veteran
Joined: Mar 2003
Location: Germany
Quote
Dabei wäre ein Datenbankprogramm noch nicht einmal nötig, das lässt sich schon mit einem guten Browser machen.

Danke auch dafür... aber da es mit Excel auch funktioniert hat, muß ich Gott sei Dank nicht auf einen guten Browser umsteigen.


Quote
Abgesehen davon, sind für Übersetzungen o.ä. Datenbanken nicht fast sogar Pflicht?

Also bisher nicht. Es mag Kollegen geben, die das anders sehen, aber seit wann höre ich schon auf andere? <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />


Nigel Powers: "There are only two things I can't stand in this world. People who are intolerant of other people's cultures... and the Dutch!"
#88313 24/05/07 08:17 PM
Joined: Sep 2005
veteran
Offline
veteran
Joined: Sep 2005
Quote
[..]aber seit wann höre ich schon auf andere?


Jedenfalls weitaus seltener, als gut für dich wäre. <img src="/ubbthreads/images/graemlins/winkwink.gif" alt="" />

Page 57 of 77 1 2 55 56 57 58 59 76 77

Moderated by  Alix, ForkTong, Larian_QA, Macbeth 

Link Copied to Clipboard
Powered by UBB.threads™ PHP Forum Software 7.7.5