VBA + zellen vergleichen und rausschreiben
hallo,
gibt es per VBA-Code eine Möglichkeit zellen folgendermaßen zu vergleichen.
in zelle A1 steht der wert "290.1"
dieser wert soll nun in den zellen B1-B3 gefunden werden und dann in die zelle A100 ausgelesen werden, steht der wert "290.1" nicht genau exakt in dem zellen B1-B3 dann soll der wert der 290.1 am nächsten ist, ausgelesen, d.h. der wert mit den geringsten abweichungen soll ausgelesen werden.
bsp:
B1: 250
B2: 360
B3: 288
dh in zelle A100 soll 288 ausgelesen werden da dieser wert 290.1 am nächsten ist.
Vielen Dank für die Hilfe im Voraus,
MfG
seebaer
Antwort schreiben
Antwort 1 von Saarbauer vom 13.02.2020, 11:13 Options
Hallo,
versuch es mal damit
Sub nächsterWert()
Min = Range("A1").Value
wert = Range("A1").Value
For i = 1 To 3
If Abs(Range("A1").Value - Range("B" & i).Value) < Min Then
Min = Abs(Range("A1").Value - Range("B" & i).Value)
wert = Range("B" & i).Value
End If
Next i
Range("A100").Value = wert
End Sub
Sub nächsterWert()
Min = Range("A1").Value
wert = Range("A1").Value
For i = 1 To 3
If Abs(Range("A1").Value - Range("B" & i).Value) < Min Then
Min = Abs(Range("A1").Value - Range("B" & i).Value)
wert = Range("B" & i).Value
End If
Next i
Range("A100").Value = wert
End Sub
Gruß
Helmut
Antwort 2 von Saarbauer vom 13.02.2020, 11:34 Options
Hallo,
habe aus versehen das makro 2 mal reinkopiert
Gruß
Helmut
Antwort 3 von seebaer_1 vom 13.02.2020, 12:10 Options
hallo helmut,
danke für deine schnelle antwort,
ich werde so schnell jedoch nicht dazu kommen es auszuprobieren, ich werde mich dann noch melden obs funktioniert hat, danke.
MfG
seebaer
Antwort 4 von seebaer_1 vom 13.02.2020, 14:41 Options
hallo helmut,
dies makro ist genau das was ich gesucht habe, es funktioniert.
wie würde das veränderte makro denn aussehen, wenn mit A1 nicht B1-B3 verglichen werden würde sondern zB der Bereich C6:E10
geht das dann auch so schön oder nicht?
vielen dank
MfG
seebaer
Antwort 5 von Saarbauer vom 13.02.2020, 15:16 Options
Hallo,
dann so
Sub nächsterWert()
Min = Range("A1").Value
Wert = Range("A1").Value
For i = 6 To 10
For j = 3 To 5
If Abs(Range("A1").Value - Cells(i, j).Value) < Min Then
Min = Abs(Range("A1").Value - Cells(i, j).Value)
Wert = Cells(i, j).Value
End If
Next j
Next i
Range("A100").Value = Wert
End Sub
Gruß
Helmut
Antwort 6 von seebaer_1 vom 14.02.2020, 13:31 Options
hallo helmut,
danke für deine AWs, das funktioniert.
hätte jetzt allerdings zur AW 4 noch eine kleine änderung. Wenn im bereich C6:E10, sagen wir D8 als dieser gesuchte wert gefunden worden ist (der a1 am nächsten ist), dann soll der wert der zelle, 2 zeilen darunter also D10 (und nicht D8) in A100 geschrieben werden, hast du hier eine idee?
danke
MfG
seebaer
Antwort 7 von Saarbauer vom 14.02.2020, 13:45 Options
Hallo,
dann müsste diese Zeile so geändert werden
Wert = Cells(i+2, j).Value
Gruß
Helmut
Antwort 8 von Saarbauer vom 14.02.2020, 14:10 Options
hallo,
noch eine kleine Ergänzung zu deinen Fragen und meinen Antworten. Du solltest nich immer nur ganz kleine Brocken deines Problems darstellen und dann das nächste nachlegen. Man muss sich jedesmal wieder reindenken und da verliert man auch irgendwann die Lust
Gruß
Helmut
Antwort 9 von seebaer_1 vom 26.02.2020, 08:36 Options
hallo zusammen,
ich hätte hier noch eine kleine ergänzungsfrage.
die zellenabfrage aus AW4 (c6:e10) wurde durch AW5 beantwortet.
weis jemand wie sich der code aus AW5 ändert, wenn erneut in dem bereich C6 bis E10 gesucht werden soll, in diesem bereich aber auch "leere" zellen stehen können, denn wenn dies der fall ist klappt der code aus AW 5 nicht, dh der code macht nichts.
danke
mfg
seebaer