Excel als Grundlage zum programmieren Leicht

Hallo ihr Profis+Computerfreaks,

kurz zu mir: Mein Name ist Bine und ich komme aus Bielefeld…

Ich habe ein Problem und hoffe, dass jemand mir weiterhelfen kann. Und zwar habe ich eine Excel Datei mit einer sehr großen Matrix (ca 1000 Zeilen und 1000 Spalten) in jeder Spalten/Zeilenkombi steht dann ein wert… In etwa so:

1 2 3 … … 1000
1 5 8 1
2 4 2 1
3 7 7 9


1000

Ich würde nun gerne wissen, wie man ein Programm schreibt, welches auf die Exceldatei zugreift und mir schnell die Kombiwerte ausgibt. Also ich möchte in eine Maske nur die Zeile und die Spalte eingeben und das Programm sagt mir direkt den Kombiwert… Also etwa sowas:

Zeile:3
Spalte:3

-> Zielwert:9

Ich habe keine Ahnung wie man programmiert, aber das kann doch nicht so schwer sein… Oder?

Danke für eure Mühen!

Bussy, Bine

Also… als erstes, die direkteste Lösung: Excel-funktionen.

=INDEX(A1:AA1000;4;5)

So was gibt den wert der 4. Spalte und 5. Reihe, der Matrix zwischen A1 und AA1000.

Du kannst natürlich, Z.B. in ein anderes Blatt…

A1=„Spalte“
B1=Da schreibst du die Spalte
A2=„Zeile“
B2=Da schreibst du die Zeile
A3=„Ergebnis“
B3="=INDEX(MeinBlatt!A1:ZZ1000; B1;B2)"

… und voila, dein ergebnis.

Wenn aber die Spaltennummer und Zeilennummer nicht einfach 1 … x sind, dann braucht man was komplizierteres, wie „VERWEIS(; :wink:“. Da muss man vorher (mit „INDEX()“?) die richtige Zeile entdecken. Ich kann da weiterhelfen wenn das dein Weg sein sollte.

  1. Möglichkeit: Visual Basic *IN* den Excel-dokument.

Macros > Macros aufzeichnen > etwas machen > Aufzeichnung beenden > Macros anzeigen > bearbeiten. So bekommt man die Programmierungs-sicht von deinem Dokument. Dort kannst du ein Formular definieren im Projekt „VBAProjekt“. Einfügen > UserForm. Da hast du deine Form.

Du kannst eine Macro aufzeichnen, mit Tastenkombination, die dann dieses Formular zeigt. Dort definierst du drei „labels“ („Zeile“, „Spalte“, „Ergebnis“) und 3 TextBox (die erste zwie für die eingabe der Zeile und Spalte, die andere für das Ergebins). Dann einem Button. Dann definierst du den Eveng „Button_Click“ (einfach doppelclick auf dem Button) und dort der code, der die erste beide textboxes liest (dessen .Text), die entsprechende Zeile und Spalte aus der Matrix sucht, die entsprechende Zelle findet, und das Ergebnis ausgibt.

Du kannst dieses Programm, der in deine .xls gespeichert ist, beliebig erweitern… noch eine TextBox kann sagen, wie heisst dein Blatt. Oder wo genau liegt die Matrix in den Blatt. Oder wie gross sie ist.

Das ist schon ein *programm*, und programme sind nie einfach. Du brauchst ein Button, Ereignis (Events)-behandlung, eine Oberfläche (der Formular) der geöffnet werden muss… für mich wäre das nicht weniger als 1 Stunde Arbeit, und ich bin profi (obwohl lange nicht mehr in Excel und VB programmiert). Du wirdst die Hilfe verwenden mussen (integriert, F1, oder in internet, MSDN-Dokumentation) und schon was lernen.

  1. Möglichkeit, ein echtes Programm.

Wenn du ein Programm willst, der noch dazu wircklich aus verschiedene DATEIEN solches holt, dann, brauchst du erstmals ein Entwicklungsumgebung wie Visual Studio (eine „Windows Application“ sollte da definiert werden, eine Art Projekt). Für die Sprache würde ich mich für C# Entscheiden. Der Formular sieht ähnlich aus, aber am Anfang definiert man die Datei die man öffnen will (dafür ein Steuerelement des Typs OpenFileDialog). Drin im Programm arbeitet man in „Interoperability“, die coolme methoden hat um Excel-Dateien zu lesen und dort zu navigieren.

Aber wenn du von Programmierung erstmals nicht so viel Ahnung hast, wird das echt Arbeit sein. Aber, zugegeben, eine gute erste Aufgabe für einem künftigen Programmierer.

Wähle eine Lösung und frag weiter. Mein e-mail, [email protected] .

Hallo Bine,

was heißt für dich: „die Werte ausgeben“?

Z.B.: Meinst du ein Programm, dass es dir einfach den Zellenwert anzeigt? Soll es in eine Datei? usw.?

Und noch eine Frage in eine ganz andere Richtung: Könnte es auch eine andere Tabe (Blatt) von Excel sein, bei dem du einfach Zeile und Spalte eingibst und dir dann wer Wert angezeigt wird?
Letzteres würde kein Zusätzliches Programm sein, sondern direkt mit Excel-Mittel möglich sein.

Grüße
Erich

Hey Erich,

erstmal danke für deine Mühen! Kann gerne auch in einem neuen Tab in Excel ausgegeben werden! Also ich habe in einem Tab mehrere Tabellen die wie folgt aussehen

a

  • A B C
    A 3 1 6
    B 5 5 4
    C 6 6 9

b

  • A B C
    A 2 2 6
    B 2 9 0
    C 1 7 5

Also es gibt Matrizen (a,b,…) die dann jede für sich genommen Zeilen und Spalten haben. Ich suche nun eine Möglichkeit ein Programm zu bekommen, welches mir die Zielwerte schnell anzeigt. Beispielsweise möchte ich in eine Maske (oder auch in ein speziell angelegtes Exceltab) einfach die Kombination b,B,C angeben und das Programm gibt mir den Wert 7 aus!

Danke nochmal!

Ich habe mich auch noch nicht mit dem Zugriff auf Excel-Dateien befasst, aber ich würde mir vielleicht zuerst Grundlagen im Programmieren aneignen, bevor ich mich an so eine Aufgabe wagen würde.

Hallo Bine,

ich habe ein Excel-Beispiel erstellt, wie es als Excel-Makros mit Eingabefelder (Register, Spalte, Zeile) und einer Anzeige des Wertes funktioniert.

Ich kann die xls hier nicht als Attach anhängen - bzw. weiß nicht wie’s geht.

Melde dich bitte bei mir unter [email protected]

Für die Allgemeinheit: dieser VBA-Code ist Basis für die Lösung - man muss aber noch die Registerkarte und einen Button einrichten.

Private Sub ButtonAuswerten\_Click()
 Call WertAnzeigen
End Sub
Sub WertAnzeigen()

 Dim Register As String
 Dim Zeile As String
 Dim Spalte As String
 Dim SpalteZeile As String
 Dim Wert As String

 Register = Worksheets("auswerten").Range("D4").Value
 Spalte = Worksheets("auswerten").Range("D5").Value
 Zeile = Worksheets("auswerten").Range("D6").Value
 SpalteZeile = Worksheets("auswerten").Range("D7").Value

 If SpalteZeile = "" Then
 Wert = Worksheets(Register).Range(Spalte & Zeile).Value
 End If

 If SpalteZeile "" Then
 Worksheets("auswerten").Range("D5").Value = ""
 Worksheets("auswerten").Range("D6").Value = ""
 Wert = Worksheets(Register).Range(SpalteZeile).Value
 End If

 Worksheets("auswerten").Range("D9").Value = Wert
End Sub

Grüße
Erich