Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1044to1048
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Funtion und Zahlenformat per VBA

Funtion und Zahlenformat per VBA
01.02.2009 16:23:02
Michael
Hallo zusammen,
ich versuche mich wieder an meinen Exceltabellen - leider mit mäßigem Erfolg :-(
Nun hoffe ich wieder auf eure Hilfe.
In der Zelle BB2 bis BJ2 werden bei Einträgen in A2 bis BA2 verschiedenste Daten eingetragen (klappt).
Nun habe ich versucht die Funktion
=WENN(P2>0,9;60;LINKS(A2;1)*1)
per Makro in BJ (ab Zeile 2) bei Änderungen eintragen zu lassen.
(Wenn ich die Funktion direkt in die Excelzelle BJ2 schreibe klappt es.)
Ausgegeben werden soll eine zweistellige Zahl.
Wenn in P2 eine Zahl gößer 0,99 steht dann soll in BJ2 "99" eingetragen werden,
wenn P2 leer ist, dann soll die Zahlen-/ Buchstabenkombination aus A2 (z.B. 3A)
in BJ2 getrennt werden - also in diesem Fall wäre das Ergebnis 03.
Bei meinen Versuchen mit VBA erscheint in der Zelle BJ2 "FALSCH" :-(
Über eine aufklärende Info würde ich mich freuen.
Gruß
Micha
Diesen Code hatte ich von Hary (von mir leicht abgewandelt):
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountA(Range(Cells(Target.Row, 1), Cells(Target.Row, 53))) = 0 Then
Range("bj" & Target.Row).Value = ""
Else
Range("bj" & Target.Row).Value = ActiveCell.FormulaR1C1 = "=IF(RC[-46]>0.9,99,LEFT(RC[-61] _
_
,1)*1)"
End If
End Sub


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funtion und Zahlenformat per VBA
01.02.2009 16:56:38
Daniel
Hi
probiers mal so:

Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountA(Range(Cells(Target.Row, 1), Cells(Target.Row, 53))) = 0 Then
Range("bj" & Target.Row).Value = ""
Else
Range("bj" & Target.Row).FormulaR1C1 = "=IF(RC[-46]>0.9,99,LEFT(RC[-61],1)*1)"
End If
End Sub


deine Version prüft, ob die Formel in der grade Aktiven Zelle (normalerwiese identisch mit Target), die angegebne Formel drinsteht und gibt das Ergbnis der Prüfung als WAHR oder FALSCH zurück
Gruß, Daniel

AW: Funtion und Zahlenformat per VBA
01.02.2009 17:01:00
Michael
Hi Daniel,
herzlichsten Dank - funktioniert :-)
Ich dachte ich könne die Recordervariante einfach dranhängen ... tja war wohl nix
Gruß
Micha
Anzeige
AW: Funtion und Zahlenformat per VBA
01.02.2009 19:35:31
Michael
Hallo Daniel,
ich habe da schon wieder ein Problem - vielleicht hast du ja noch einen Moment Zeit für mich?

Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountA(Range(Cells(Target.Row, 1), Cells(Target.Row, 53))) = 0 Then
Range("bj" & Target.Row).Value = ""
Else
Range("bj" & Target.Row).FormulaR1C1 = "=IF(RC[-46]>0.9,99,LEFT(RC[-61],1)*1)"
End If
End Sub


Wenn ich jetzt -z.B.- BJ2 in ein anderes Tabellenblatt kopiere, dann steht dort die Funktion drin und bringt einen Fehler:
=WENN(#BEZUG!="";"";GROSS(RECHTS(#BEZUG!;1)))
Ich habe jetzt versucht an das Makro etwas "anzuhängen", was - wie soll es anders sein, wenn ich etwas probiere - nicht funktioniert:
Sub kopieren_u_inhalte_einfuegen() 'so aufgezeichnet
Selection.Copy
Sheets("Quelle").Select
Range("bj2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub


Das habe ich dann an das an das


Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountA(Range(Cells(Target.Row, 1), Cells(Target.Row, 53))) = 0 Then
Range("bj" & Target.Row).Value = ""
Else
Range("bj" & Target.Row).FormulaR1C1 = "=IF(RC[-46]>0.9,99,LEFT(RC[-61],1)*1)".  _
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
End Sub


drangehängt - ohne Erfolg -
Ist es überhaupt möglich, diese per VBA eingefügte Funktion in einen "Wert" ohne Funktion zu kopieren / ändern?
Ich freue mich auf deine hilfreiche Antwort - Danke im Voraus
Gruß
Micha

Anzeige
AW: Funtion und Zahlenformat per VBA
01.02.2009 21:05:46
Daniel
Hi
zu deiner ersten Frage:
die Formel enthält den relativen Zellbezug RC[-61], dh die Formel bezieht sich auf die Zelle, die 61 Zeilen weiter links steht.
damit die Formel sinnvoll funktioniert, musst du sie also mindestens in die 62. Spalte kopieren ("BJ"), sonst verweist der Zellbezug auf nichtexistente Zellen.
Wenn sich die Formel immer auf Spalte A beziehen soll, egal wo du sie hinkopierst, musst du den Zellbezug in der Formel absolut hinschreiben, dh.

Range("bj" & Target.Row).FormulaR1C1 = "=IF(RC16>0.9,99,LEFT(RC1,1)*1)"


wenn am ende des Makros keine Formel, sondern nur das Ergebnis in der Zelle stehen soll, gehts du am besten so vor:


Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountA(Range(Cells(Target.Row, 1), Cells(Target.Row, 53))) = 0 Then
Range("bj" & Target.Row).Value = ""
Else
with Range("bj" & Target.Row)
.FormulaR1C1 = "=IF(RC[-46]>0.9,99,LEFT(RC[-61],1)*1)"
.Formula = .Value
end with
End If
End Sub


die von dir versuchte methode würde auch funktionieren, müsste aber so geschrieben werden:


Range("bj" & Target.Row).copy
Range("bj" & Target.Row).PasteSpecial Paste:=xlPasteValues ' der Rest kann entfallen


vergiss es also, mit dem Recorder aufgezeichnete Makros oder Teile einfach an deine Makros dranzuhängen.
mit dem Recorder aufgezeichneter Code muss immer erst überaerbeitet werden, bevor man ihn sinnvoll verwenden kann.
Dazu bitte das hier lesen:
http://www.online-excel.de/excel/singsel_vba.php?f=84
http://www.online-excel.de/excel/singsel_vba.php?f=78
Gruß, Daniel

Anzeige
AW: Funtion und Zahlenformat per VBA
01.02.2009 21:45:00
Michael
Wow!
Hallo Daniel,
vielen Dank für die ausführliche Beschreibung und die Links.
Das werde ich morgen alles lesen ausprobieren.
Dank & Gruß
Micha

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige