Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
808to812
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
808to812
808to812
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Wert größer aus Tabelle
07.10.2006 10:07:00
DieterB
Ich gebe über Userform/Textbox zwei Werte (z.B. Länge und Breite) ein, diese dann in einer Tabelle einen Preis ergeben und gesucht wird, der dannin eine Celle eingetragen wird. Die Tabelle hat aber nur gerade 100er Sprünge.
Wie kann ich es Regeln, wenn jetzt z.B. 1532 eigegeben wird, die Tabelle aber nur 1500 oder 1600 aufweist. Der Wert soll aber von der Spalte "1600" genommen werden.
Danke schon mal für eine Hilfe.

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert größer aus Tabelle
07.10.2006 11:07:08
Alex
Hi Dieter
Mit dieser ungetesteten Function sollte man das ziel erreichen.

Private Function GetHundred(Value as Long) as Long
GetHundred = Mid(cStr(Value),1,Len(cStr(Value))-2) & "00"
End Function

Gruss Alex
AW: an Alex und GerdL
07.10.2006 13:31:17
DieterB
Hallo Alex
Hallo GerdL
Ich habe beide Möglichkeiten ausprobiert, aber mit meinen Kennissen habe ich keine Chance. Hier im Anhang ist mein derzeitiger Code:
Option Explicit

Private Sub CommandButton1_Click()
Dim ZelleBreite As Range        'Suchbereich für Breite
Dim ZelleTiefe As Range         'Suchbereich für Tiefe
Dim sBreite As String           'gesuchte Breite
Dim sTiefe As String            'gesuchte Tiefe
sBreite = TextBox1.Value
sTiefe = TextBox2.Value
'Suchbereich für Breite ist die Zeile 1. Bei Bedarf veränderbar!
Set ZelleBreite = Worksheets("Tabelle1").Rows(6).Find(sBreite, lookat:=xlWhole)
'Suchbereich für Tiefe ist die Spalte 1. Bei Bedarf veränderbar!
Set ZelleTiefe = Worksheets("Tabelle1").Columns(17).Find(sTiefe, lookat:=xlWhole)
If ZelleBreite Is Nothing Then
MsgBox "Breite nicht vorhanden!"
Exit Sub
End If
If ZelleTiefe Is Nothing Then
MsgBox "Tiefe nicht vorhanden!"
Exit Sub
End If
'Schnittpunkt wird in TextBox3 ausgegeben
'TextBox3.Value = Cells(ZelleTiefe.Row, ZelleBreite.Column).Value
Range("O3").Value = Cells(ZelleTiefe.Row, ZelleBreite.Column).Value
End Sub

Ich möchte in meiner Userform eine Breite sowie eine Tiefe auswählen.
Dadurch ermittel sich ein Preis der in einer Tabelle enthalten ist.
Die Tabelle beginnt in der Breite bei 1100 und setzt sich in 100er Schritten fort.
Das selbe in der Tiefe.
Ein Ausschnitt aus der Tabelle:
Die Sucheingabe = Breite 1100 und Tiefe 600, der Wert 119,00 €, wird dann in die Zelle eingetragen.
119,00 €
Breite
Tiefe 1100 1200 1300 1400
600 119,00 € 129,00 € 144,00 € 152,00 €
700 132,00 € 145,00 € 163,00 € 173,00 €
800 146,00 € 161,00 € 183,00 € 194,00 €
900 164,00 € 182,00 € 209,00 € 221,00 €
Vieleicht habt Ihr die Lösung für meinen Wunsch.
Danke
Anzeige
AW: an Alex und GerdL
08.10.2006 09:58:49
Reinhard
Hi Dieter,
In deinem Code
sBreite = TextBox1.Value
sTiefe = TextBox2.Value
ersetzen durch
sBreite = Application.WorksheetFunction.RoundUp(TextBox1.Value, -2)
sTiefe = Application.WorksheetFunction.RoundUp(TextBox2.Value, -2)
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
AW: an Reinhard
08.10.2006 15:31:21
DieterB
Hallo Reinhard
Danke, das war der Tipp. Es funktioniert.
Kannst Du mir vieleicht noch ein kleines Problemchen lösen ?
Ich habe in einer anderen UserForm auch eine TextBox in der auch Ungerade Zahlen eingegeben werden könnten. Diese Ungerade Zahl, möchte ich ebenfalls aufrunden auf eine ganze 100er Zahl, und diese Aufgerundete Zahl sollte dann auch in der TextBox angezeigt werden.
Dieter
Anzeige
AW: Wert größer aus Tabelle
07.10.2006 11:25:15
Gerd
Hallo Dieter,
oder so.

Sub test()
Dim a As Long, b As Long
a = 1532
b = Application.WorksheetFunction.RoundUp(a, -2)
End Sub

Wie Du das einbauen kannst, ist aus deiner Beschreibung leider nicht ersichtlich.
Gruß
Gerd
AW: Wert größer aus Tabelle
07.10.2006 13:10:09
Daniel
Hallo,
über die Excelfunktion: SVERWEIS(..;..;..,1)
Wichtig ist die 1 als 4. Parameter, die dafür sorgt, daß der Sverweis auch mit zwischenwerten funktioniert.
Zu beachten ist, daß:
- bei bei Eingabe eines Zwischenwertes der nächst-kleinere Wert aus der Tabelle gesucht wird.
- Die Tabelle natürlich aufsteigend sortiert sein muß.
Falls du den SVerweis nicht in Excel sondern in VBA verwenden willst, geht das mit :
WORKSHEETFUNCTION.VLOOKUP(.....)
Gruß, Daniel
Anzeige
AW: Wert größer aus Tabelle
07.10.2006 14:10:08
Daniel
Hallo
schau mal den Code an.
vielleicht findest du ein paar Anregungen.

Sub Preis_ermitteln()
Dim Tiefe, Breite, Spalte, Reihe As Long
Dim PreisTab As Range
'--- Preistablle Festlegen
Set PreisTab = Sheets("Tabelle1").Range("A1:F5")
'--- Werte eingeben und auf Hunderter aufrunden
Tiefe = InputBox("Tiefe?")
Breite = InputBox("Breite?")
Tiefe = WorksheetFunction.RoundUp(Tiefe, -2)
Breite = WorksheetFunction.RoundUp(Breite, -2)
'--- Länge und Breite in Tabelle suchen
On Error GoTo Fehler
Reihe = WorksheetFunction.Match(Tiefe, PreisTab.Columns(1), 0)
Spalte = WorksheetFunction.Match(Breite, PreisTab.Rows(1), 0)
On Error GoTo 0
'--- Preis ermitteln
MsgBox ("Preis ist:" & PreisTab.Cells(Reihe, Spalte).Text)
End
'--- Fehlerbehandlung
Fehler:
MsgBox ("Ihre eingegebnen Größen konnten nicht gefunden werden.")
End Sub

Gruß, Daniel
p.S. "Worksheetfunction.match" entspricht der Excelfunktion "Vergleich" und liefert den Zeilen- oder Spaltenwert eines Suchergebnisses.
damit arbeite ich in solchen Fällen lieber als mit FIND
Anzeige
AW: an Daniel Eisert
07.10.2006 17:03:51
DieterB
Hi Daniel
Danke für deine Tipps, aber ich krieg das eine und das ander nicht hin.
Die Funktion ist nicht das was ich mir Vorstelle.
Danke
AW: an Daniel Eisert
08.10.2006 00:55:01
Daniell
Hallo
dann versuche erstmal, genau zu beschreiben, was du dir vorstellst, um uns nicht im dunkeln raten zu lassen.
Gruß, Daniel
der erste Hauptsatz der Datenverarbeitung ist immer noch: Shit in - Shit out
AW: an Daniel Eisert
08.10.2006 15:25:33
DieterB
Hallo Daniel
Ich danke Dir für Deine Hilfe. Wenn meine Beschreibung nicht Verständlich war "Sorry"
Da ich mit VBA noch sehr wenig Kenntnis habe, tue ich mir sicherlich schwer es für Euch
Verständlich rüber zu bringen.
Die Antwort die ich noch von Reiner erhalten habe, hat das Problem gelöst.
Aber Danke noch einmal. Vieleicht ein andermal.
Dieter
Anzeige
AW: Wert größer aus Tabelle
08.10.2006 17:34:06
Gerd
Hallo,
ad eins: "Shit happens" :-)
ad zwo: Ich plädiere dafür, Fehler bei der Eingabe abzufangen.
Falls es noch jemanden interessiert, da ich mich mit der Sache beschäftigt habe.
Teststellung:
Eine "Userform1" mit den Textboxen "Textbox1"(Breite),"Textbox2"(Tiefe),Textbox3(Preis),
u. dem Commandbutton1(zum Starten der Preisermittlung).
Eine Datei mit "Tabelle1", in der von Zelle "A2" abwärts in Spalte "A" die Tiefen
und von Zelle "B1" nach rechts in Zeile 1 die Breiten stehen u. in den
Zellen "dazwischen" die Preise.

Private Sub CommandButton1_Click()
Call test
End Sub


Private Sub TextBox1_AfterUpdate()
TextBox3.Text = ""
TextBox3.Enabled = False
If CommandButton1.Enabled = False Then
TextBox1.SetFocus
Exit Sub
End If
If TextBox1.Text = Empty Or Not IsNumeric(TextBox1.Value) Then
MsgBox "Nur Zahlen eingeben!"
ElseIf CLng(TextBox1.Value) <= Worksheets("Tabelle1").Cells(1, 2).Value - 100 Then
MsgBox "Mindestwert für Breite in Tabelle = " & Worksheets("Tabelle1").Cells(1, 2).Value - 99
ElseIf CLng(TextBox1.Value) > Worksheets("Tabelle1").Cells(1, 2).End(xlToRight).Value Then
MsgBox "Maximalwert für Breite int Tabelle = " _
& Worksheets("Tabelle1").Cells(1, 2).End(xlToRight).Value
Else
CommandButton1.Enabled = True
End If
End Sub


Private Sub TextBox2_AfterUpdate()
CommandButton1.Enabled = False
If TextBox2.Text = Empty Or Not IsNumeric(TextBox2.Value) Then
MsgBox "Nur Zahlen eingeben!"
ElseIf CLng(TextBox2.Value) <= Worksheets("Tabelle2").Cells(2, 1).Value - 100 Then
MsgBox "Mindestwert für Tiefe in Tabelle = " & Worksheets("Tabelle1").Cells(2, 1).Value - 99
ElseIf CLng(TextBox2.Value) > Worksheets("Tabelle1").Cells(2, 1).End(xlDown).Value Then
MsgBox "Maximalwert für Tiefe in Tabelle = " _
& Worksheets("Tabelle1").Cells(2, 1).End(xlDown).Value
Else
CommandButton1.Enabled = True
End If
End Sub

Sub test()
'in ein Standardmodul
Dim lngBreite As Long
Dim lngTiefe As Long
Dim wsPreise As Worksheet
Dim intLetzteBreitenSpalte As Integer
Dim lngLetzteTiefenZeile As Long
Dim rngBreite As Range
Dim rngTiefe As Range
Dim intColBreite As Integer
Dim lngRowTiefe As Long
Dim curPreis As Currency
If UserForm1.TextBox1 = Empty Or UserForm1.TextBox2 = Empty Then Exit Sub
lngBreite = Application.WorksheetFunction.RoundUp(CLng(UserForm1.TextBox1.Text), -2)
lngTiefe = Application.WorksheetFunction.RoundUp(CLng(UserForm1.TextBox2.Text), -2)
Set wsPreise = ThisWorkbook.Worksheets("Tabelle1")
intLetzteBreitenSpalte = wsPreise.Range("B1").End(xlToRight).Column
Set rngBreite = wsPreise.Range(wsPreise.Cells(1, 2), wsPreise.Cells(1, intLetzteBreitenSpalte))
intColBreite = wsPreise.Range(rngBreite.Address).Find(lngBreite).Column
lngLetzteTiefenZeile = wsPreise.Range("A2").End(xlDown).Row
Set rngTiefe = wsPreise.Range(wsPreise.Cells(2, 1), wsPreise.Cells(lngLetzteTiefenZeile, 1))
lngRowTiefe = rngTiefe.Find(lngTiefe).Row
curPreis = CCur(wsPreise.Cells(lngRowTiefe, intColBreite).Value)
UserForm1.TextBox3.Text = CStr(Format(curPreis, "#,##0.00 €"))
End Sub
Grüße
Gerd
Anzeige
AW: GerdL
08.10.2006 17:54:30
DieterB
Hallo Gerd
Herzlichen Dank, daß Du dir soviel Arbeit gemacht hast.
Ich habe mir deinen Code in ein Muster gespeichert und ausprobiert.
Es ist auch eine Lösung für mein Problem. Werde es auch in meine Anwendung einbauen.
Herzlichen Dank nochmal.
Dieter

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige