Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Lookuptabelle in Code verpacken

Lookuptabelle in Code verpacken
18.02.2015 18:53:58
Peter
Guten Abend
Ich weise einer Variable die Schriftgrösse eines Targets zu.
dblFontSize = Target.Font.Size
Nun möchte ich ausgehend von der Schriftgrösse der Variable dblZeHoehe eine Zahl zuweisen. Normalerweise würde ich mir eine Lookuptabelle anlegen. Doch aus verschiedenen Gründen muss ich diese Werte direkt im VBA-Code "versorgen". Die linke Spalte enspricht der ermittelten Schriftgrösse; der jeweilige Wert aus der rechten Spalte soll der Variable dblZeHoehe zugewiesen werden.
Möglich wäre, dies mit Select Case zu bewerkstelligen. Vielleicht gibt es aber noch eine bessere Variante.
Danke für jeden Hinweis.
Gruss, Peter
15.00 18.75
14.50 18.00
14.00 18.00
13.50 17.25
13.00 16.50
12.50 16.50
12.00 15.25
11.50 14.50
11.00 14.50
10.50 13.75
10.00 13.00
9.50 13.00
9.00 12.25
8.50 11.50
8.00 11.50
7.50 10.25
7.00 9.50

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Lookuptabelle in Code verpacken
18.02.2015 19:29:23
ransi
Hallo
Das könnte so aussehen:
Option Explicit

Sub MACHS()
    Dim arr(1 To 17, 1 To 2)
    Dim dblZeHoehe
    Dim dblFontSize
    arr(1, 1) = 15: arr(1, 2) = 18.75
    arr(2, 1) = 14.5: arr(2, 2) = 18
    arr(3, 1) = 14: arr(3, 2) = 18
    arr(4, 1) = 13.5: arr(4, 2) = 17.25
    arr(5, 1) = 13: arr(5, 2) = 16.5
    arr(6, 1) = 12.5: arr(6, 2) = 16.5
    arr(7, 1) = 12: arr(7, 2) = 15.25
    arr(8, 1) = 11.5: arr(8, 2) = 14.5
    arr(9, 1) = 11: arr(9, 2) = 14.5
    arr(10, 1) = 10.5: arr(10, 2) = 13.75
    arr(11, 1) = 10: arr(11, 2) = 13
    arr(12, 1) = 9.5: arr(12, 2) = 13
    arr(13, 1) = 9: arr(13, 2) = 12.25
    arr(14, 1) = 8.5: arr(14, 2) = 11.5
    arr(15, 1) = 8: arr(15, 2) = 11.5
    arr(16, 1) = 7.5: arr(16, 2) = 10.25
    arr(17, 1) = 7: arr(17, 2) = 9.5
    dblFontSize = ActiveCell.Font.Size
    dblZeHoehe = WorksheetFunction.VLookup(dblFontSize, arr, 2, True)
End Sub



ransi

Anzeige
AW: Lookuptabelle in Code verpacken
18.02.2015 19:38:43
fcs
Hallo Peter,
wenn man die Zahlenreihen in 2 Arrays übergibt, dann kann man mit Match nach der gesuchten Zeilenhöhe suchen.
Gruß
Franz
Sub aaTest()
Dim dblFontSize, dblZeHoehe
dblFontSize = Target.Font.Size
dblZeHoehe = fncGetZeilenhoehe(dblZeichenHoehe:=dblFontSize)
End Sub
Public Function fncGetZeilenhoehe(ByVal dblZeichenHoehe As Double) As Double
Dim arrZeichenH, arrZeilenH
Dim varTreffer As Variant
arrZeichenH = Array(15#, 14.5, 14#, 13.5, 13#, 12.5, 12#, 11.5, 11#, 10.5, 10#, 9.5, _
9#, 8.5, 8#, 7.5, 7#)
arrZeilenH = Array(18.75, 18#, 18#, 17.25, 16.5, 16.5, 15.25, 14.5, 14.5, 13.75, 13#, 13#, _
12.25, 11.5, 11.5, 10.25, 9.5)
varTreffer = Application.Match(dblZeichenHoehe, arrZeichenH, -1)
If IsNumeric(varTreffer) Then
fncGetZeilenhoehe = arrZeilenH(varTreffer - 1)
Else
fncGetZeilenhoehe = 15
MsgBox "Keine Übereinstimmung für Zeichenhöhe " & dblZeichenHoehe & " gefunden", _
vbInformation + vbOKOnly, "fncGetZeilenhoehe = Ermitteln Zeilenhöhe"
End If
End Function

Anzeige
AW: Lookuptabelle in Code verpacken
19.02.2015 23:18:08
Peter
Hallo ransi, hallo Franz
Vielen Dank für eure Hilfe.
Ich habe mal versucht, beide Codes für meine Bedürfnisse anzupassen - so habe ich auch aus dem Sub von Ransi eine Funktion gemacht - allerdings ist mir das nicht ganz gelungen, wie die Ergebnisse in der Tabelle zeigen - was habe ich falsch gemacht?
Bei Franz habe ich die MsgBox auskommentiert (werde eher mit einem Debug.Print arbeiten). Ich habe zu deinem code noch eine Verständnisfrage:
Was bedeutet das -1 in diesen beiden Zeilen:
varTreffer = Application.Match(dblZeichenHoehe, arrZeichenH, -1)
If IsNumeric(varTreffer) Then
fncGetZeilenhoehe = arrZeilenH(varTreffer - 1) ?
Vielen Dank und Gruss, Peter
https://www.herber.de/bbs/user/95884.xlsm

Anzeige
AW: Lookuptabelle in Code verpacken
20.02.2015 00:36:53
fcs
Hallo Peter,
Was bedeutet das -1 in diesen beiden Zeilen:
varTreffer = Application.Match(dblZeichenHoehe, arrZeichenH, -1)

-1 ist eine von 3 Optionen fuer diesen Parameter wie bei Tabellenfunktion VERGLEICH.
-1 kann bei absteigend sortierten Werten verwendet werden. Die Funktion Match gibt dann die Position des kleinsten Elements in der Vergleichsliste wieder das größer oder gleich dem Suchkriterium ist. So wird auch bei Zwischenwerten ein Ergebnis zurückgegeben. Bei Parameter 0 wird auf genaue Übereinstimmung eines Listenwerts mit dem Suchkriterium geprüft und die Liste muss nicht sortiert sein.
If IsNumeric(varTreffer) Then
fncGetZeilenhoehe = arrZeilenH(varTreffer - 1)

Im per Array erzeugten Listen beginnt die Zählung der Elemente in der Liste bei 0, Match gibt die Position in der Liste beginnend bei 1 zurück. Deshalb muss von der Position 1 abgezogen werden, um die Nummer des Elements zu erhalten.
Gruss
Franz

Anzeige
AW: Lookuptabelle in Code verpacken
20.02.2015 07:25:45
Peter
Hallo Franz
Vielen Dank.
Das verstehe ich jetzt.
Gruss, Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige