774 Aufrufe
Gefragt in Tabellenkalkulation von
Hallo Excel-Makro-Profi,
sehr oft habt mir schnell mit der Excel-Makro-Programmierung helfen
können und siehe da, ich habe wieder ein Makro-Problem.
Dieses Makro habe ich aufgezeichnet:

Sub Test2()
' Test2 Makro
'
    Range("G10:G20").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=18
    Range("G30:G40").Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
        :=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=-21
    Application.CutCopyMode = False
    Range("B10").Select
End Sub

Das Makro arbeitet wie folgt:
In den Zellen G10 bis G20 als auch in G30 bis G40 existieren
Formeln, und zwar SVerweise.
Wenn ich beispielsweise in der Zelle A10 eine Ziffer eintrage, dann
wird in der Zelle G10 automatisch einen vordefinierten Satz
eingetragen. Soweit so gut. Manchmal möchte ich jedoch den Satz
anpassen. Mit der Ausführung dieses Makros werden alle Zellen (G10
bis G20 und G30 bis G40) in einer Zahl/Text umgewandelt, so dass
ich Änderungen in den jeweiligen Zellen vornehmen kann.
Wenn ich aber dass in der Zelle A12 eine Ziffer eintrage, dann wird
mir nichts mehr in der Zelle G12 eingetragen, da das Makro meine
Formel vernichtet hat.

Wunsch: Das Makro soll so angepasst werden, dass nur die Zellen
(z.B. G10, G11, G30) in einer Zahl/Text umgewandelt werden wenn
einen Text ausgespuckt wird. D.h. in diesem Fall, soll die Formel des
SVerweises in den Zellen G12  bis G20 und G31 bis G40 weiterhin
bestehen bleiben.
Könnte ihr da helfen? Falls ich etwas undeutlich war, bitte einfach
sagen.

Schon jetzt vielen Dank für Eure Hilfe,
Max

12 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

schau mal, ob ich dich richtig verstanden habe:

[code]Sub umwandeln()

Dim Bereich As Range
Dim rngZelle As Range

'Bereich definieren, der geprüft werden soll
Set Bereich = Union(Range("G10:G20"), Range("G30:G40"))

'Jede Zelle im Bereich prüfen
For Each rngZelle In Bereich
  'falls Zellinhalt keine Zahl ist, den Zellinhalt in die Zelle schreiben,
  'so dass Text bearbeitet werden kann
  If IsNumeric(rngZelle.Value) = False Then rngZelle = rngZelle.Value
Next rngZelle

End Sub[/code]

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

Ich freue mich sehr, dass Du wieder versuchst meine Makro-Probleme
zu lösen.

Also, erstmals vielen Dank für Deine Hilfe.
Es scheint, dass ich doch das Problem nicht richtig beschrieben haben.
Bevor ich das Makro laufen lasse, ist beispielsweise die Zelle G10 mit
dieser Formel befüllt:
=WENN(ISTFEHLER(SVERWEIS(A10;$V$10:$W$22;2;0));"";SVERWEI
S(A10;$V$10:$W$22;2;0))

Trage ich in der Zelle A10 beispielsweise die Zahl 3, dann erhalte ich in
der Zelle G10 als Wert/Text das folgende:
Der Umsatz ist um 10% gestiegen.

In den Zellen W10 bis W22 sind nur vorformulierte Texte eingegeben.
In den Zellen V10 bis V22 nur Ziffern.

Ich hoffe, diesmal war es etwas verständlicher von meiner Seite :-)
Falls Du noch weitere Info benötigst, lass mich kurz wissen und vorab
vielen Dank.

Gruß
Max
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Max,

leider verstehe ich nur Bahnhof :-(.

In deiner Frage hast du geschrieben:
[quote]Wunsch: Das Makro soll so angepasst werden, dass nur die Zellen
(z.B. G10, G11, G30) in einer Zahl/Text umgewandelt werden wenn
einen Text ausgespuckt wird.[/quote]

Und was willst du mir jetzt mit deiner neuen Antwort sagen?
ich weiß jetzt immer noch nicht, wann die SVERWEIS-Formel durch den Inhalt ersetzt werden soll. Stell dir doch mal einen Moment vor, dass ich weder deine Tabelle, noch deine Textbausteine kenne, noch weiß, was du erreichen willst ;-).

Schreibe doch mal ein konkretes Beispiel, wann die Formel erhalten bleiben soll und wann sie durch den Text ersetzt werden soll.

Am einfachsten wäre es wahrscheinlich in Abhängigkeit von der Textbausteinnummer die Formel durch den Text zu ersetzen. Dann müsstest du sagen, welche Nummern dies sind.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.
Kein Thema. Hier ein Bsp.
In G10 existiert eine S-Verweis-Formel:
[b]=WENN(ISTFEHLER(SVERWEIS(A10;$V$10:$W$22;2;0));"";SVER
WEI
S(A10;$V$10:$W$22;2;0))[/b]

Ich gebe in der Zelle A10 die Ziffer 3, daraufhin bekomme ich in der
Zelle G10 folgenden Satz angezeigt:
[b]Der Umsatz ist um 10% gestiegen.[/b]

Ich gebe in der Zelle A11 die Ziffer 4, daraufhin bekomme ich in der
Zelle G11 folgenden Satz angezeigt:
[b]Der Umsatz ist um 8% geschrumpft.[/b]

Die Zellen A12 bis A20 und A30 bis A40 bleiben leer, also wird nichts
eingetragen.
Daraufhin sind die Zellen G12 und G20 sowie G30 und G40 mit den S-
Verweis-Formeln weiterhin befüllt. Bsp. für G12:
[b]=WENN(ISTFEHLER(SVERWEIS(A12;$V$10:$W$22;2;0));"";SVER
WEIS(A12;$V$10:$W$22;2;0))[/b]

Diese Zellen spucken keine Texte aus, da die Zelle A12 nicht befüllt ist.
Nun zum Makro:
Wenn ich unter diesen Umständen das Makro ausführe möchte ich die
die Zellen G10 + G11 in Werten umgewandelt werden (also hier dürfen
keine Formeln mehr angezeigt werden). So habe ich die Möglichkeit die
Texte relativ einfach und schnell zu verändern.
Die Zellen G12 bis G20 sowie G30 bis G40 müssen weiterhin die S-
Verweise enthalten.
Falls ich nachhinein (also nachdem das Makro ausgeführt wurde) die
Zelle A35 mit einer Ziffer befülle, dann muss die Zelle G35 den Text aus
der Zelle W35 entnehmen und anzeigen.

So sind die Zellen befülltl:
A10 bis A20 und A30 bis A40 = Dient zur Eingabe von Ziffern
G10 bis G20 und G30 bis G40 = S-Verweise (siehe oben)
V10 = ist die Zahl 1 eingetragen
V12 = ist die Zahl 2 eingetragen
V13 = ist die Zahl 3 eingetragen und so weiter
W1 = Der Umsatz ist um 8% geschrumpft
W2 = Der Umsatz zeigt keine Veränderungen zum Vorjahr
W3 = Der Umsatz ist um 10% gestiegen
und so weiter

Wenn Du mir sagst, wie ich die Datei zur Verfügung stellen kann, wäre
es für uns allen viel leichter.
Gibt es so eine Möglichkeit?
Vielen Dank auch für Deine Geduld.
Gruß
Max
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Max,

schau mal, ob das folgende Makro so funktioniert, wie du willst:

[code]Sub umwandeln()

Dim Bereich As Range
Dim rngZelle As Range

'Bereich definieren, der geprüft werden soll
Set Bereich = Union(Range("A10:A20"), Range("A30:A40"))

'Jede Zelle im Bereich prüfen
For Each rngZelle In Bereich
  'falls in Spalte A etwas steht, dann den Zellinhalt aus Spalte G in die Zelle schreiben,
  'so dass Text bearbeitet werden kann
  If IsEmpty(rngZelle) = False Then Cells(rngZelle.Row, 7) = Cells(rngZelle.Row, 7).Value
Next rngZelle

End Sub[/code]

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

Danke Dir sehr für Deine Hilfe.
Wenn ich die Zellen A10 bis A12 mit einer Ziffer ausfülle und das Makro laufen lasse, dann
werden die Inhalte der Zellen G10 bis G12 so wie erwartet in Texten umgewandelt so dass
ich problemlos Änderungen in diesen Zellen vornehmen kann.

Die S-Verweise der Zellen G13 bis G20 und G30 bis G40 werden dabei gelöscht und genau
das möchte ich nicht. Die Formel sollte also weiterhin vorhanden sein.

Gibt es eine Möglichkeit die Excel-Datei irgendwo hochzuladen?

Geht das?

Danke und Gruß
Max
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Max,

bei mir hat das Makro ohne Probleme geklappt.

Versuch es mal so:

[code]Sub umwandeln()

Dim Bereich As Range
Dim rngZelle As Range

'Bereich definieren, der geprüft werden soll
Set Bereich = Union(Range("G10:G20"), Range("G30:G40"))

'Jede Zelle im Bereich prüfen
For Each rngZelle In Bereich
  'falls in Spalte A etwas steht, dann den Zellinhalt aus Spalte G in die Zelle schreiben,
  'so dass Text bearbeitet werden kann
  If rngZelle.Value <> "" Then rngZelle = rngZelle.Value
Next rngZelle

End Sub[/code]

Falls das auch nicht klappt, kannst du eine Beispieldatei z.B. [url=http://www.zippyshare.com/]hier[/url] hochladen.

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.
irgendwie will es nicht klappen.

Hier habe ich die Datei hochgeladen:

http://www115.zippyshare.com/v/CdB1qzEo/file.html

Habe das Makro nur von der Spalte A auf B geändert, funktioniert jedoch nicht.

Die Datei heißt:
Umsatz.xlsm

Hoffe, es hilft.

Danke und Gruß
Max
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Max,

bei meinem letzten geposteten Makro darfst du den Bereich nicht in B ändern, da hier die Spalte G durchlaufen wird. Leider habe ich  vergessen, den entsprechenden Kommentar zu ändern :-(. Nimmst du das Makro wie gepostet, dann funktioniert es so, wie du willst:

[code]Private Sub CommandButton01_Click()

Dim Bereich As Range
Dim rngZelle As Range

'Bereich definieren, der geprüft werden soll
Set Bereich = Union(Range("G10:G20"), Range("G30:G40"))

'Jede Zelle im Bereich prüfen
For Each rngZelle In Bereich
  'falls Inhalt nicht leer ist, dann Inhalt in Zelle schreiben
  If rngZelle.Value <> "" Then rngZelle = rngZelle.Value
Next rngZelle
    
End Sub
[/code]
Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.

und wieder ein Mal Dank Deiner Hilfe ein weiteres Makro-Problem gelöst :-)

Vielen vielen Dank. Auf Dich ist verlass.

Ich sage einfach .... bis zum nächsten Makro-Thema ;-)

Gruß
Max
...