Clever-Excel-Forum

Normale Version: Funktion die überprüft ob ein feld leer ist
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo

ich habe folgendes Problem:

Feld A1 soll feld A2 entsprechen solange A2 nicht leer ist.

für den Fall, wenn A2 leer ist soll A1 den letzten wert von A2 anzeigen bevor es leer war.

nochmal zur Verdeutlichung:


A2 enthält eine Funktion die entweder "" oder einen Namen zurückgibt.

im falle wenn es ein Name ist wird dieser in A1 kopiert. 


wenn sich A2 in "" ändert, bliebt der name solange in A1 bis A2 einen neuen namen hat.

hoffe ich konnte mich verständlich ausdrücken


danke an Hilfswillige im voraus
Hi,

keine Ahnung für was dies gebraucht wird?

nur etwas widersprüchlich

"Feld A1 soll feld A2 entsprechen solange A2 nicht leer ist."

"wenn sich A2 in "" ändert, bliebt der name solange in A1 bis A2 einen neuen namen hat."

Ich habe das jetzt so gelöst (falls mal wieder A1 angezeigt werden sollte)
 -> Wenn A2 leer ist -> rechtsklick auf A2 danach einen Doppelklick
[attachment=10357]
Hallo,

ich habe das viel simpler verstanden:


Code:
Private Sub Worksheet_Calculate()
 If Range("A2") <> "" Then Range("A1") = Range("A2")
End Sub

Code in das Klassenmodul der Tabelle
Hi,

(22.03.2017, 18:40)atilla schrieb: [ -> ]ich habe das viel simpler verstanden:

wenn aber, nachdem in A2 etwas stand, 5x in A2 leer eingetragen wird, soll A1 so lange auf dem alten Stand bleiben, bis in A2 wieder was neues eingetragen wird:

Ok, ich glaube, das geht doch.

A2 = Apfel => A1 = Apfel
A2 = "" => A1 = Apfel
A2 = "" => A1 = Apfel
A2 = "" => A1 = Apfel
A2 = "" => A1 = Apfel
A2 = "" => A1 = Apfel
A2 = Kirsche => A1 = Kirsche

Aber bei mir wird nichts automatisch geändert, ich muß das Makro manuell im Editor starten.
Klassenmodul der Tabelle ist doch bei Tabelle1 das rechte Fenster?
gelöscht, Anfrage falsch verstanden!
Hallo Ralf,

der TE schreibt:


Zitat:A2 enthält eine Funktion

Ich habe das so interpretiert, dass dort eine Formel drin ist, die Ihren Wert von anderer Stelle erhält.

z.B. so etwas: =Wenn(B1="";"";B1)

Um eine Veränderung der Zelle A1 zu sehen, muss in diesem Fall der Wert in B1 verändert werden, denn erst dann wird die Formel neu berechnet und das Calculate springt an.

Warum dann nicht direkt auf B1 reagieren, weil ich nicht weiß, welche Formel der TE .
Aber es kann auch alles ganz anders kommen. Alle Angaben sind hier ohne Gewähr. Blush
Hallo
danke an alle antworten, und an die die sich zeit genommen haben mir zu helfen

da primär die frage aufgekommen ist, wozu ich diese Funktion brauche liegt am xml import


Dateiupload bitte im Forum! So geht es: Klick mich!


ich habe ein sheet mit vielen xml imports was sich automatisch aktualisiert.
da es jedoch viele importe sind dauert das laden sehr lange.

die felder C bis G werden aus einer xml ausgelsen und es soll aussehen wie es in der ersten Zeile ist
die zweite zeile zeigt jedoch leere felder da es lange dauert bis das ganze geladen ist.

das ganze aktualisert sich auch relativ oft so dass ca 1/3 des Dokuments oftmals so aussieht wie Zeile 32

mein Lösungsansatz war die ganze funktion zu verschieben und die felder C-G auf die entsprechenden felder der funktion zu verweisen.

was jedoch nur sinn macht wenn man vorher überprüfen kann ob diese leer sind oder nicht. weil wenn man bedingungslos alles kopiert, habe ich den selben Salat.


jedoch meinte ich mit funktion einfach eine "formel" für das feld  wie zb 
=if(Cell("b",A2),,Cell("contents",A2))
=if(cell A2 is blank), keep old value of A1 (if true), take value of A2 (if false)


die funktion von Chris funktioniert ganz gut. vielen dank für die arbeit. wäre es ein problem wenn man diese auf ca 400 felder bei google docs nutzen würde oder wäre das zu viel Rechenleistung?
am liebsten wäre mir wie gesagt eine formel die ich einfach in das feld schrieben kann ohne vba editor
Hallo,

Dein Vorhaben geht nicht mit einer Formel.
Es muss VBA eingesetzt werden.

Wenn VBA eingesetzt wird, würde ich es für diesen Fall nicht unbedingt so aufwendig machen wie Chris.

Es müsste so etwas reichen:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
 If Target.Count = 1 Then
   Application.EnableEvents = False
   If Target <> "" Then Target.Offset(0, 1) = Target
   Application.EnableEvents = True
 End If
End If
End Sub

Der Code kommt in das Code Fenster der Tabelle.
Was macht er:
-er reagiert auf Änderungen in Spalte A
-wenn in einer Zelle in Spalte A ein Wert steht, wird er in die Nachbarzelle in Spalte B übernommen
-wird der Wert gelöscht in Spalte A, ändert sich in Spalte B nichts
Hallöchen,

es geht auch mit Formeln.

Stelle unter Optionen | Formeln die maximale Iterationszahl auf 1 und schreibe anschließend in A1 die Formel

=WENN(A2<>"";A2;A1)
(25.03.2017, 05:51)schauan schrieb: [ -> ]Hallöchen,

es geht auch mit Formeln.

Stelle unter Optionen | Formeln die maximale Iterationszahl auf 1 und schreibe anschließend in A1 die Formel

=WENN(A2<>"";A2;A1)

vielen dank. das war die lösung für das problem.

die Formel sieht jetzt so aus:



=if((cell("type",A1)="b"),Cell("contents",A2),Cell("contents",A1))

und funktioniert einwandfrei.

danke an alle die mitgeholfen haben 
Seiten: 1 2