kavachi
Goto Top

Matrix auslesen VBA

Hallo liebe Leute,

ich habe folgendes Problem. Ich versuche KFZ-Steuern in mehreren Ländern für eine Seminararbeit zu berechnen.
Dazu habe ich folgende Steuerformerl Steuer = A*B , wobei B eine Matrix ist.

B ist eine 10x7 Matrix

Die Zeilen haben angaben zum CO2- Ausstoß und die Spalten zur Hubraumgröße.
             ccm <1000   <1200   <1400   ....     .....   >3000

Co2 < 110         0,3      0,36      0,45
Co2 < 120         0,42     0,5       0,63
......
......
......
......
       > 210

Meine Frage ist jetzt wie es schaffe mir den Richtigen Wert aus der Matrix zu ziehen?

Bsp: Polo Co2 ausstoß von 96 und eine Hubraum 1399ccm
Daraus folgt: Steuer = A*0,45

Vielleicht kann mir ja jemand bei diesem Problem Helfen. Vielen Dank schon mal im Vorfeld für eure Unterstützung.
Liebe Grüße.

PS: verzeiht mir meine komische Formatierung
[Edit Biber] Codeformatierung nachgezogen.[/Edit]

Content-Key: 269884

Url: https://administrator.de/contentid/269884

Printed on: April 19, 2024 at 02:04 o'clock

Member: emeriks
Solution emeriks Apr 22, 2015, updated at Apr 30, 2015 at 09:34:49 (UTC)
Goto Top
Hi,
in welcher Form liegt denn die Matrix vor? Als Array?

Falls Array:
Ich würde ausgehend von den ggb. Werten zunächst Zeile und Spalte der Matrix berechnen. Die Grenzwerte dafür sind gegeben und sicherlich begrenzt viele.
Mit diesen Werten für zeile und Spalte dann den Faktor aus der Matrix lesen.

Zeile = -1
Spalte = -1

Select Case Co2
  case <110
    Zeile = 0
  case <120
    Zeile = 1
  case ...
    Zeile = ...
end select

Select Case Hubraum
  case <1000
    Spalte = 0
  case <1200
    Spalte = 1
  case <1400
    Spalte = 3
  case ...
     Spalte = ...
end select

Faktor = Matrix(Zeile, Spalte)

E.
Member: Kavachi
Kavachi Apr 24, 2015 at 11:27:04 (UTC)
Goto Top
Hey emeriks,
zu erst einmal danke für den Ansatz! Noch habe ich die Matrix nicht erstellt. Ich würde aber gern die Matrix direkt im Quellcode erzeugen und dann auch dementsprechend befüllen. Geht das überhaupt? Ich weiß das dies im eigentlichen Quellcode nichts zu suchen hat, aber ich würde gern vermeiden vorher eine Tabelle in Excel anzulegen und dann diese auslesen.
Member: emeriks
Solution emeriks Apr 24, 2015, updated at Apr 30, 2015 at 09:34:51 (UTC)
Goto Top
zu erst einmal danke für den Ansatz! Noch habe ich die Matrix nicht erstellt. Ich würde aber gern die Matrix direkt im
Quellcode erzeugen und dann auch dementsprechend befüllen. Geht das überhaupt?
Ja, natürlich.
Matrix(0,0) = 0.3
Matrix(0,1) = 0.36
Matrix(0,1) = 0.45
Matrix(1,0) = 0.42
Matrix(1,1) = 0.5
Matrix(1,1) = 0.63
....
Ich weiß das dies im eigentlichen Quellcode nichts zu suchen hat,
Mit statischen Daten, bei denen man davon ausgehen kann kann, dass sich diese nie ändern, kann man das durchaus machen.
aber ich würde gern vermeiden vorher eine Tabelle in Excel anzulegen und dann diese auslesen.
Was aber schnell zum Vorteil werden wird, wenn sich die Matrix mal ändert. Dann muss der Code nicht geändert werden. Sprich, es kann jemand ohne Programmierkenntnisse die Daten anpassen. Der Regelfall.

E.
Member: Kavachi
Kavachi Apr 29, 2015 at 09:58:38 (UTC)
Goto Top
Hallo, vielen Dank für die Hilfe bis hierhin.
Ich habe mal den Code soweit fertig geschrieben und er läuft auch! Das Problem ist, dass ich viel zu große Werte wiederbekomme. Ich weiß nicht woran das liegt. Vielleicht hat jemand eine Ahnung.

Hier der Code:

Dim zeile As Integer
Dim spalte As Integer
Dim Faktor As Single

Dim MatrixA(9, 6) As Variant

MatrixA(0, 0) = "0.3"
MatrixA(0, 1) = "0.36"
MatrixA(0, 2) = "0.45"
MatrixA(0, 3) = "0.51"
MatrixA(0, 4) = "0.6"
MatrixA(0, 5) = "0.81"
MatrixA(0, 6) = "0.99"
MatrixA(1, 0) = "0.42"
............
............


Select Case CO2perKM
Case Is <= 110
zeile = 0
Case Is <= 120
zeile = 1
Case Is <= 130
zeile = 2
Case Is <= 140
zeile = 3
Case Is <= 150
zeile = 4
Case Is <= 165
zeile = 5
Case Is <= 180
zeile = 6
Case Is <= 195
zeile = 7
Case Is <= 210
zeile = 8
Case Is > 210
zeile = 9
End Select


Select Case ccm
Case Is <= 1000
spalte = 0
Case Is <= 1200
spalte = 1
Case Is <= 1400
spalte = 2
Case Is <= 1600
spalte = 3
Case Is <= 2000
spalte = 4
Case Is <= 3000
spalte = 5
Case Is > 3000
spalte = 6
End Select

Faktor = MatrixA(zeile, spalte)

RegTaxCO2 = Faktor * CO2perKM
Member: emeriks
Solution emeriks Apr 29, 2015, updated at Apr 30, 2015 at 09:32:16 (UTC)
Goto Top
Das Problem ist, dass ich viel zu große Werte wiederbekomme.
Wobei? Der Wert aus der Matrix ist zu groß oder das darmit gebildete Produkt ist zu groß?

Und, hast Du in der Schule mit Wörtern rechnen gelernt oder doch mit Zahlen? Vielleicht liegts ja daran?

Dim MatrixA(9, 6) As Single '!  

MatrixA(0, 0) = 0.3
MatrixA(0, 1) = 0.36
MatrixA(0, 2) = 0.45
MatrixA(0, 3) = 0.51
MatrixA(0, 4) = 0.6
MatrixA(0, 5) = 0.81
MatrixA(0, 6) = 0.99
MatrixA(1, 0) = 0.42
......

E.
Member: Kavachi
Kavachi Apr 30, 2015 at 09:34:38 (UTC)
Goto Top
Hey emeriks,

vielen vielen Dank, jetzt läuft alles und die Ergebnisse stimmen auch! Noch mal vielen Dank!