Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

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
Antworten 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
Antworten 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
Antworten Top
#4
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?
Antworten 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.
Antworten 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
Antworten 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
Antworten 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
Antworten 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
Antworten Top
#10
(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 
Antworten Top


Gehe zu:


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