Excel als Grundlage zum programmieren EINFACH

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

Sorry, dazu habe ich keine Lösung.

Hi Bine,

schwierig ist es wirklich nicht. Eine Lösung ist wie folgt:

Füge auf dem ersten Tabellenblatt einen Butto ein und lass Dir den Code anzeigen. Dort kopierst Du folgenden Code ein:

Dim Zeile
Dim Spalte

Zeile = ThisWorkbook.Worksheets(„Tabelle1“).Cells(3, 2).Value
Spalte = ThisWorkbook.Worksheets(„Tabelle1“).Cells(3, 3).Value

ThisWorkbook.Worksheets(„Tabelle1“).Cells(3, 4).Value = ThisWorkbook.Worksheets(„Tabelle2“).Cells(Zeile, Spalte).Value

Speichern nicht vergessen. Jetzt noch in der Zelle B2 „Zeile“, in C2 „Spalte“ und in D2 „Kombiwert“ eintragen und fertig ist das Ganze. Jetzt den Entwurfsmodus beenden, die gewünschten ZAhlen unter die eben erstellten Überschriften eintragen und Button drücken. Und schon sollte das Ergebnis erscheinen.

Übrigens, 1000 Spalten ist - wenn überhaupt - nur ab Excel 2007 in einem Tabellenblatt möglich.

Gruß

Ulrich

Hallo,
tut mir leid, das weiß ich leider auch nicht. Aber ich drück die Daumen, dass ein anderer weiterhelfen kann.
Gruß Nadel

Du kannst es in der EXCEL Datei als Makro programmieren
ALT + F11 Taste und Du bist in der VBA - Umgebung
im Projektbaum, VBA - Projekt : hinzufügen UserForm,
zwei Listenfelder (ListBoxSpalte, ListBoxZeile), ein Textfeld (TextBox1) und einen Kommandobutton einfügen
den folgenden Text einfügen und Debugen für die von Dir gemachten Fehlerchen (Hilfe F1) Starten mit F5 - Taste
Private Sub BtnFind_Click()
Dim curspaltenindx As Integer
Dim curzeilenindx As Integer
curspaltenindx = Me.ListBoxSpalte.ListIndex
curzeilenindx = Me.ListBoxZeile.ListIndex
Me.TextBox1.Text = Tabelle1.Cells(curzeilenindx + 1, curspaltenindx + 1).Value
End Sub

Private Sub UserForm_Initialize()
Dim spaltenindex As Integer
Dim zeilenindex As Integer

For spaltenindex = 1 To 1000
ListBoxSpalte.AddItem spaltenindex
ListBoxZeile.AddItem spaltenindex
Next spaltenindex

End Sub

Wenn die Fehlerchen raus sind wir in der TextBox dert „Kombiwert“ angezeigt.
Annahme in Tabelle 1 stehen Deine Werte in einer 1000x1000 Matrix ohne fortlaufende Zeilen und Spaltennummer

Hi Bine,

ich hatte im Jahr 2000 mal von „MS Access“ aus Grafiken
programmiert, deren Rohdaten ich aus „MS Excel“-Tabellen
auslesen musste. Das ist mittlerweile 10 Jahre her, und
das war bis heute mein letztes MS-Office-Programmier-Projekt.

Wenn ich dich richtig verstehe, willst du also von
Access aus auf Excel-Tabellen zugreifen und von dort
Daten einlesen? Mit den entsprechenden von Microsoft
zur Verfuegung gestellten Schnittstellen geht das.
Die muesstest du studieren und dann benutzen.
Insgesamt waere das Alternative 1.

Oder willst du lieber in Excel eine offizielle Seite
haben, die das Nutzerfrontend darstellt und die von
einer inoffiziellen anderen Excel-Seite die Daten
einliest? Wenn du die offizielle Excel-Seite
ordentlich zurechtbastelst, koennte hier auch etwas
dabei herauskommen, was aussieht, wie eine „Maske“.
Das waere Alternative 2.

Der zweite Loesungsansatz waere fuer eine unerfahrene
Programmiererin eine einfache Loesung. Da musst du
nicht viel programmieren.

Der erste Loesungsansatz erfordert deutlich mehr
Kenntnisse von Office aus der Sicht eines Programmierers.
Das ist also deutlich komplexer. Wenn du schreibst, du
haettest von Programmieren keine Ahnung, weiss ich nicht,
ob du dir das antun willst, denn zu meiner Zeit war
das Studium der Schnittstelle an sich schon sehr aufwaendig
(die Hilfe-Seiten waren voller Fehler), obwohl ich damals
ein sehr erfahrener Programmierer war. Microsoft-Umgebungen
vom Schlag Office machen selbst Programmierern in der Regel
keinen Spass, weil das Zeug in sich nicht so schoen logisch
ist wie uebliche C-, Perl- oder Java-Programmierumgebungen.

Das Ganze ist also eine Frage, wie viel Energie du
investieren willst, um MS-Office-Programmierung zu
erlernen. Willst du einfach nur dein Problem loesen?
Oder willst du dir Alternative 1 antun, obwohl du eigentlich
keinen Bock hast, etwas zu lernen, wovor sich sogar
richtige Programmierer eher ekeln? Oder willst du
gerade deshalb Expertin in einem Gebiet werden, das
andere Programmierer meiden, weil sie bessere Umgebungen
gewohnt sind? Also tatsaechlich Alternative 1
angehen und das dafuer richtig und mit viel Leidenschaft?

Mit freundlichen Gruessen,
1stein

Hey 1Stein,

erstmal danke für deine Mühen! Also ich denke du hast Recht, ich sollte mich eher mit Alternative 2 beschäftigen :smile: Aber wie genau funktioniert das (für Dumme :smiley:)??? Also ich habe in einem Tab mnehrere 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!

Hi Bine,

ich hab leider kein Excel auf meinen Rechnern laufen,
da Windows seit ein paar Jahren nicht mehr bei mir laeuft.

Aber in OpenOffice hab ich etwas hingekriegt, was deinen
Anforderungen entsprechen koennte, und ich hab es im
Excel-Format exportiert. Hier:

http://www.jumping-blue-turtle.com/bine/bine.xls

Da sind 3 Sheets.
Sheet 1 enthaelt eine extrem rudimentaere Maske.

Im OpenOffice-Dialekt steht in Zelle B4 folgender
Eintrag:
=INDIRECT(ADDRESS($B$2;$B$3;1;$B$1))

Sheet 2 enthaelt eine Matrix mit Zahlen.

Wenn du es dir einfach machen willst, koenntest
du also pro Matrix ein Sheet machen. 100 Matrizen
waeren dann 100 Sheets (Sheet 2 bis Sheet 101).

Der INDIRECT-Befehl schluckt die Adresse der
Zelle, die den Zielwert enthaelt.

Diese Adresse wird vom ADDRESS-Befehl geliefert.
Dem ADDRESS-Befehl wiederum verfuetterst du
„row“, „column“, „abs“ und „sheet“.

Der Wert für „row“ steht in Zelle B2. Die Dollar-Zeichen
machen B und 2 absolut (damit sie sich nicht nach C3
verändern, solltest du die Formel von B4 nach C5 kopieren
wollen).

Der Wert fuer „column“ steht in B3.

Den Wert fuer „abs“ hab ich hart auf „1“ verdrahtet
und steht fuer „absolut“. „4“ waere relativ, und „2“
und „3“ waeren Kombinationsformen aus „absolut“ und
„relativ“ (Spalte und Zeile).

Der Wert fuer „sheet“ steht in B1.

Das jedenfalls ist die Sprache, die OpenOffice
versteht. Ich hatte den Trick selbst vor einer
Woche erst in der OpenOffice-Hilfe entdeckt und
angewandt.

Was Excel daraus macht, wenn du das Sheet mal mit
Excel oeffnest, wuerde mich mal interessieren.

Kannst du mir die Formel im Excel-Dialekt mal
schicken? :smile:

Funktioniert mein Beispiel ueberhaupt in Excel?

Loest das dein Problem?

Hast du zufaellig einen Youtube-Account mit
dieser URL hier?
http://www.youtube.com/user/dirtyacegirl

Sorry fuer die letzte Frage, aber ich bin von Natur
aus sehr neugierig :smile:

Wuerde mich freuen, ob die Aktion hier irgendeinen
Nutzen gebracht hat…

1stein

Hallo Bine,

bist du mit deinem Excel-Projekt vorangekommen?
Für welche Lösung hast du dich nun entschieden?

1stein