Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

VBA + zellen vergleichen und rausschreiben





Frage

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 1 von Saarbauer

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

Hallo,

habe aus versehen das makro 2 mal reinkopiert

Gruß

Helmut

Antwort 3 von seebaer_1

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

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

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

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

Hallo,

dann müsste diese Zeile so geändert werden

Wert = Cells(i+2, j).Value

Gruß

Helmut

Antwort 8 von Saarbauer

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

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