Werte aus einer Frachtmatrix wiedergeben

  • #1
M

mav1976

Guest
Moin,

ich zerbreche mir momentan äweng den Kopf. Ich habe eine Frachtmatrix, die sich horizontal nach den Gewichtsintervallen in to (0,5, 1, 1,5, 5, 10, 15 etc.) und vertikal nach Kilometerzonen (30, 60, 90 ... etc.) gliedert.

In einer anderen Tabelle habe ich Daten, die einerseits die Entfernung und das Gewicht enthalten. Ich versuche nun seit einiger Zeit, in einer separaten Spalte die jeweilige Frachtrate zu ermitteln, die man aus der Matrix erhält.

Ich habe es bereits damit versucht, den Befehl Index zu verwenden in Verbindung mit Vergleich. Das hat nicht richtig hingehauen. Ergebnis: #NV. :(

Mittels Sverweis und Vergleich habe ich es auch versucht - selbes Ergebnis. :(

Hat eventuell jemand eine Idee, wie ich zu meinem gewünschten Ergebnis komme? Genutzt wird Office 2007.
 
  • #2
Hallo mav1976,

darf es eine selbstgeschriebene Funktion sein ?

Code:
Option Explicit

Function MatrixGewichtKilometer(vkm As Variant, vgewicht_t As Variant)
->Gibt den Eurowert aus einer Matrix Km/Gewicht zurück oder Fehler
->
->Voraussetzung:
->Matrix -
-> horizontal Gewicht
-> vertikal  Kilometer
-> die Kilometer-Werte(nur die Werte) sind als Name->Kilometer' definiert
-> die Gewicht-Werte (nur die Werte) sind als Name->Gewicht'  definiert
 
 Const cBEREICH_km = Kilometer
 Const cBEREICH_t = Gewicht
  
->Bereichsdefinitionen prüfen
 Dim r_km As Range, r_t As Range
 On Error Resume Next
 Set r_km = Range(ActiveWorkbook.Names(cBEREICH_km))
 Set r_t = Range(ActiveWorkbook.Names(cBEREICH_t))
 If (r_km Is Nothing) Or (r_t Is Nothing) Then
  Err.Clear
  MatrixGewichtKilometer = Fehler: Bereich->Kilometer' oder Bereich->Gewicht' nicht definiert
  GoTo AUFRAEUMEN
 End If
 On Error GoTo 0
 
->Eingangswert km pruefen
 Dim dkm As Double
 On Error Resume Next
 dkm = vkm
 If Err.Number > 0 Or (dkm <= 0) Then
  Err.Clear
  MatrixGewichtKilometer = Fehler: Parameter Kilometer unzul.
  GoTo AUFRAEUMEN
 End If
 On Error GoTo 0
 
->Eingangswert t pruefen
 Dim dt As Double
 On Error Resume Next
 dt = vgewicht_t
 If Err.Number > 0 Or (dt <= 0) Then
  Err.Clear
  MatrixGewichtKilometer = Fehler: Parameter Gewicht unzul.
  GoTo AUFRAEUMEN
 End If
 On Error GoTo 0
 
->Gewicht von/bis Spalte in Zeile
 Dim lt_SPAnf As Long, lt_SPEnd As Long, lt_Z As Long, lSpalte As Long
 lt_SPAnf = r_t.Column
 lt_SPEnd = r_t.Column + r_t.Columns.Count - 1
 lt_Z = r_t.Row
->GewichtsSpalte bestimmen
 Dim d1 As Double, d2 As Double
 d2 = r_t.Parent.Cells(lt_Z, lt_SPEnd)
 If dt > d2 Then lSpalte = lt_SPEnd: GoTo GEWICHT_ENDE
 lSpalte = lt_SPAnf
 Dim sp As Long
 For sp = lt_SPEnd To lt_SPAnf + 1 Step -1
  d1 = r_t.Parent.Cells(lt_Z, sp)
  d2 = r_t.Parent.Cells(lt_Z, sp - 1)
  If (d1 >= dt) And (d2 < dt) Then lSpalte = sp
 Next
GEWICHT_ENDE:
 
->Kilometer von/bis Zeile in Spalte
 Dim lkm_ZAnf As Long, lkm_ZEnd As Long, lkm_SP As Long, lZeile As Long
 lkm_ZAnf = r_km.Row
 lkm_ZEnd = r_km.Row + r_km.Rows.Count - 1
 lkm_SP = r_km.Column
->KilometerZeile bestimmen
 d2 = r_km.Parent.Cells(lkm_ZEnd, lkm_SP)
 If dkm > d2 Then lZeile = lkm_ZEnd: GoTo KILOMETER_ENDE
 lZeile = lkm_ZAnf
 Dim z As Long
 For z = lkm_ZEnd To lkm_ZAnf + 1 Step -1
  d1 = r_km.Parent.Cells(z, lkm_SP)
  d2 = r_km.Parent.Cells(z - 1, lkm_SP)
  If (d1 >= dkm) And (d2 < dkm) Then lZeile = z
 Next
KILOMETER_ENDE:
 
 MatrixGewichtKilometer = r_km.Parent.Cells(lZeile, lSpalte).Value
 
AUFRAEUMEN:
 On Error GoTo 0
 Set r_km = Nothing: Set r_t = Nothing
End Function

Diese Funktion packst du in ein Modul in deiner Mappe.


Für die Funktion mußt du in deiner Matrix
- den Bereich der KM-Werte als Namen Kilometer
- den Bereich der Gewichts-Werte als Namen Gewicht
definieren. (unter 2003: Einfügen->Namen->Definieren)

Wenn z.B.
in B21 ein Kilometerwert steht und
in A21 ein Gewichtswert steht
dann gibt folgende Formel den Euro-Wert zu diesem Pärchen aus:
Code:
=MatrixGewichtKilometer(B21;A21)

Wenn du mir an mein mailaddy mailst, schick ich dir die Beispiel-Datei

Gruß Matjes :)
 
  • #3
Moin,

danke für das Funktionsmakro. Habe dir eine Mail an deine Adresse gesandt.
 
  • #4
Ola,

nur für den Fall, dass eine Lösung ohne Makro gesucht werden sollte: Mit Sverweis als letzten Parameter in eien Wverweis funktion müsste so etwas auch gehen ...
 
  • #5
Moin,

ich habe nach mehrstündigen Analysieren auch eine Lösung ohne Makro gefunden. Mittels Index in Verbindung mit Wenn und Vergleich Funktionen ist dies auch zu bewerkstelligen.

Aber nichts destotrotz würde mich die Funktionsweise des Makros von Matjes dennoch interessieren. Da ich aber mit Makros absolutes Neuland betrete, weiß ich nicht einmal, wie ich diese Funktion oben plazieren sollte bzw. wie sie dann auch arbeitet. Welche Zellen muß ich wie konfigurieren etc.

Vielen Dank bereits für die gegebenen Hilfen.
 
Thema:

Werte aus einer Frachtmatrix wiedergeben

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben