Funktion die überprüft ob ein feld leer ist
#1
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
Top
#2
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

.xlsm   merkdirwasnichtdaist.xlsm (Größe: 19,25 KB / Downloads: 10)
lg Chris
Feedback nicht vergessen.
[Bild: v.gif]
3a2920576572206973742064656e20646120736f206e65756769657269672e
Top
#3
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
Gruß Atilla
Top
#4
Hi,

(22.03.2017, 19: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?
Top
#5
gelöscht, Anfrage falsch verstanden!
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#6
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
Gruß Atilla
Top
#7
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
Top
#8
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
Gruß Atilla
Top
#9
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)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Rjinxil
Top
#10
(25.03.2017, 06: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 
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste