Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1252to1256
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

Index formel und wenn formel in Vba integrieren

Index formel und wenn formel in Vba integrieren
Angelika
Hallo
ich möchte zwei formeln die ich in meinem Datenblatt ( Daten1 ) habe in VBA einfügen.
die Formeln sollen in VBA weil immer wieder Zeilen aus der Tabelle gelöscht werden.
Leider ist das zu hoch für mich. Kann mir bitte jemand sagen wie ich das machen kann.
Ich habe die Tabelle beigefügt
https://www.herber.de/bbs/user/79139.xlsm
Danke in voraus
Angelika

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Index formel und wenn formel in Vba integrieren
01.03.2012 07:23:48
Angelika
guten morgen,
hab ich etwas falsch gemacht ?
Die Frage ist noch offen.
Vielleicht findet sich jemand der mir hilft
Danke
Angelika
AW: Fragen
01.03.2012 07:34:08
fcs
Hallo Angelika,
das Problem in den Formeln
=INDEX(rF1.archivieren;Focus1!42:42;1)

scheint ja der Teil "Focus1!42:42" zu sein.
Welche Werte müssen den Hier stehen, damit das korrekte Ergebnis angezeigt wird?
Es müssen ja Werte von 1 bis max. zur Anzahl Zeilen des Bereichs rF1.archivieren sein.
Welche Werte/Kriterien soll eine VBA-Lösung (falls überhaupt erforderlich) verwenden, um hier Werte einzutragen statt mit Formeln zu arbeiten?
Gruß
Franz
Anzeige
Erklärung zum Problem
01.03.2012 08:40:14
Angelika
Hallo Franz
danke für Dein Interesse.
TB=Tabellenblatt
Die Formeln die im TB "Daten1" in Spalte AB + AC stehen
kommen aus dem TB "Focus1".
Bereiche benannt :
rF1.archivieren = Bereich TB "Focus1" AQ40:AQ250 und
rF1.Kennzahl = Bereich TB "Focus1" AR40:AR250
wenn im TB "Daten1" nun in der Spalte archivieren ein "x" steht, kann der Anwender
nach Bedarf diese Zeile archivieren, sprich die Zeile wird ins Archiv verschoben.
Wenn ich nun in der Spalte AB + AC eine Formel hinterlege ist diese natürlich beim verschieben
weg, und deshalb möchte ich das ganze per VBA machen.
Wie Du in der Tabelle siehst habe ich schon einiges zusammengebastelt, dank diesem FORUM.
Aber ich kenne mich eben noch zu wenig aus in VBA, und benötige deshalb Hilfe.
Vielen Dank im voraus
an alle die mir helfen
Angelika
Anzeige
AW: Erklärung zum Problem
02.03.2012 06:06:55
fcs
Hallo Angelika,
mit der folgenden Formel in Spalte AB sollte es funktionieren
=INDEX(rF1.archivieren; ZEILE()-39; 1)

Diese Formel liefert auch den korrekten Zeilen-Index, wenn Zeilen gelöscht werden oder die Daten enu sortiert werden.
Wen du die Formeln nach dem Archivieren immer neu eintragen willst, dann muss du im Makro "Archivieren" nach dem Sortieren die folgenden Anweisungen ergänzen:
      'sortiert Daten1 ab zeile 40
ActiveSheet.Range("K40:AF60000").Select
Selection.Sort Key1:=ActiveSheet.Range("k40"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'neu-Anfang
i = 0
Application.EnableEvents = False    ' Ereignisbehandlung ausschalten
'Anzahl ausgefüllte Zeilen in Spalte K ermitteln
With ActiveSheet
Do Until .Range("K40").Offset(i, 0) = ""
i = i + 1
Loop
If i > 0 Then
'Formeln in Spalte AB einfügen
.Range(.Range("AB40"), .Range("AB40").Offset(i - 1, 0)).FormulaR1C1 = _
"=INDEX(rF1.archivieren, ROW()-39, 1)"
'Formeln in Spalte AC einfügen
.Range(.Range("AC40"), .Range("AC40").Offset(i - 1, 0)).FormulaR1C1 = _
"=IF(R[0]C[-1]=""X"",Focus1!R23C44, """")"
End If
End With
Application.EnableEvents = True    ' Ereignisbehandlung einschalten
'neu-Ende

Gruß
Franz
Anzeige
Formel umbauen
04.03.2012 14:33:44
Angelika
Hallo Franz,entschuldige dass ich mich erst jetzt melde- hatte viel zu tun.
vielen Dank für Deine Hilfe. Leider wollen meine Chefs jetzt die Tabelle vereinfacht-schade.
ich habe Deinen Code umgearbeitet, aber er funktioniert nicht so wie ich will.
kannst Du mir bitte nochmal helfen.
Ich danke Dir im voraus
Ich hab einfach eine Formel eingefügt

Private Sub CommandButton1_Click()
Call Archivieren
End Sub

Private Sub Archivieren()
' Aus Tabelle Daten1 die zu archivierenden Datensätze in Tabelle Archiv verschieben
Dim bereich As Range, Zeilen As Object, Zähler As Long
Dim Zelle As Range, i As Long, ziel As Range, Arr As Variant
Set Zeilen = CreateObject("Scripting.Dictionary")
Set bereich = Me.Range("Z40:Z" & Me.Range("Z" & Rows.Count).End(xlUp).Row)
For Each Zelle In bereich.Cells
If LCase(Zelle.Text) = LCase("X") Then
Set Zeilen(Zähler) = Zelle.Offset(0, 11 - Zelle.Column).Resize(1, 23)
Zähler = Zähler + 1
End If
Next Zelle
If Zähler = 0 Then Exit Sub
Zähler = Zähler - 1
Set ziel = Sheets("Archiv").Range("A65536").End(xlUp).Offset(1, 0)
Application.ScreenUpdating = False
'Werte übertragen
For i = 0 To Zähler
Arr = Zeilen(i).Value
ziel.Resize(1, Zeilen(i).Cells.Count).Value = Arr
Set ziel = ziel.Offset(1, 0)
Next i
'Werte löschen
For i = Zähler To 0 Step -1
Zeilen(i).EntireRow.Clear
Next i
Application.EnableEvents = True    ' Ereignisbehandlung einschalten
Zeilen.RemoveAll
'sortiert Daten1 ab zeile 40
ActiveSheet.Range("K40:AF60000").Select
Selection.Sort Key1:=ActiveSheet.Range("k40"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'neu-Anfang
i = 0
Application.EnableEvents = False    ' Ereignisbehandlung ausschalten
'Anzahl ausgefüllte Zeilen in Spalte K ermitteln
With ActiveSheet
Do Until .Range("K40").Offset(i, 0) = ""
i = i + 1
Loop
If i > 0 Then
'Formeln in Spalte AB einfügen
.Range(.Range("z40"), .Range("z40").Offset(i - 1, 0)).FormulaR1C1 = _
"=WENN(UND(R40=""X"";S40="");""X"";WENN(UND(R40=""X"";W40=""X"");""X"";WENN( _
UND(  _
_R40=""X"";S40=""X"");"";))), ROW()-39, 1)"
'Formeln in Spalte AC einfügen
'.Range(.Range("AC40"), .Range("AC40").Offset(i - 1, 0)).FormulaR1C1 = _
'  "=IF(R[0]C[-1]=""X"",Focus1!R23C44, """")"
End If
End With
Application.EnableEvents = True    ' Ereignisbehandlung einschalten
'neu-Ende
End Sub

die spalten haben sich geändert. Ich sende die Tabelle nochmal mit. Es fehlen natürlich noch einige Formatierungen, aber im Moment sind die Formeln das wichtigste
Gruss Angelika
Anzeige
AW: Formel umbauen
04.03.2012 20:39:43
fcs
Hallo Angelika,
wenn man Formeln per VBA einfügt, dann sind 3 Punkte zu beachten:
1. Alle " in der Formel müssen durch "" ersetzt werden.
2. Soll die Formel in der lokalen Schreibweise in VBA verarbeitet werden?
Zellbereich.FormulaLocal = "=FormelText"
oder in der US (internationalen) Synax?
Zellbereich.FormulaR1C1= "=FormelText" oder Zellbereich.Formula= "=FormelText"
Ich persönlich bevorzuge die FormulaR1C1 schreibweise. Diese unabhäng ist von den Systemeinstellungen (Sprache, Trennzeichen etc) und beim Programmieren oft flexibler ist.
3. In der internationalen (USA) VBA-Syntax müssen:
- die entsprechenden englisch-sprachigen Funktionsbezeichnungen verwendet werden
- alle ";" der deutschen Syntax durch "," ersetzt werden.
- bei Zahlen in der Formel der Punkt als Dezimaltrennzeichen verwendet werden.
Für die korrekte VBA-Syntax ist es am einfachsten, die Formeleingabe per Makro aufzuzeichnen.
Noch ein Hinweis:
Damit nach dem Löschen von Zeilen die Formate nach dem Archivieren erhalten bleiben solltest du nur die Zellinhalte löschen. Dann muss du nicht mühsehlig die Formate per VBA wieder erstellen.
Gruß
Franz
Private Sub Archivieren()
' Aus Tabelle Daten1 die zu archivierenden Datensätze in Tabelle Archiv verschieben
Dim bereich As Range, Zeilen As Object, Zähler As Long
Dim Zelle As Range, i As Long, ziel As Range, Arr As Variant
Set Zeilen = CreateObject("Scripting.Dictionary")
Set bereich = Me.Range("Z40:Z" & Me.Range("Z" & Rows.Count).End(xlUp).Row)
For Each Zelle In bereich.Cells
If LCase(Zelle.Text) = LCase("X") Then
Set Zeilen(Zähler) = Zelle.Offset(0, 11 - Zelle.Column).Resize(1, 23)
Zähler = Zähler + 1
End If
Next Zelle
If Zähler = 0 Then Exit Sub
Zähler = Zähler - 1
Set ziel = Sheets("Archiv").Range("A65536").End(xlUp).Offset(1, 0)
Application.ScreenUpdating = False
'Werte übertragen
For i = 0 To Zähler
Arr = Zeilen(i).Value
ziel.Resize(1, Zeilen(i).Cells.Count).Value = Arr
Set ziel = ziel.Offset(1, 0)
Next i
'Werte löschen
For i = Zähler To 0 Step -1
Zeilen(i).EntireRow.ClearContents                     'angepasst -Formate bleiben  _
erhalten!
Next i
Application.EnableEvents = True    ' Ereignisbehandlung einschalten
Zeilen.RemoveAll
'sortiert Daten1 ab zeile 40
ActiveSheet.Range("K40:AF60000").Select
Selection.Sort Key1:=ActiveSheet.Range("k40"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'neu-Anfang
i = 0
Application.EnableEvents = False    ' Ereignisbehandlung ausschalten
'Anzahl ausgefüllte Zeilen in Spalte K ermitteln
With ActiveSheet
Do Until .Range("K40").Offset(i, 0) = ""
i = i + 1
Loop
If i > 0 Then
'Formeln in Spalte Z einfügen
'Formel hier in der loalen Sprache/Syntax einfügen
.Range(.Range("z40"), .Range("z40").Offset(i - 1, 0)).FormulaLocal = _
"=WENN(UND(R40=""X"";S40="""");""X"";WENN(UND(R40=""X"";W40=""X"");""X"";" _
& "WENN(UND(R40=""X"";S40=""X"");"""";)))"
'oder so - in VBA-Sprache - international US-(englisch) in R1C1-Schreibweise
.Range(.Range("z40"), .Range("z40").Offset(i - 1, 0)).FormulaR1C1 = _
"=IF(AND(RC[-8]=""X"",RC[-7]=""""),""X"",IF(AND(RC[-8]=""X"",RC[-3]=""X"")," _
& """X"",IF(AND(RC[-8]=""X"",RC[-7]=""X""),"""",)))"
'Formeln in Spalte AC einfügen
'.Range(.Range("AC40"), .Range("AC40").Offset(i - 1, 0)).FormulaR1C1 = _
'  "=IF(R[0]C[-1]=""X"",Focus1!R23C44, """")"
End If
End With
Application.EnableEvents = True    ' Ereignisbehandlung einschalten
'neu-Ende
End Sub

Anzeige
AW: Formel umbauen
05.03.2012 09:01:21
Angelika
Hallo Franz,
ich danke Dir herzlichst für Deine Hilfe und auch für Deine Tipps.
Ich habe mir diese Seite ausgedruckt, und werde alles in Ruhe durcharbeiten.
Den Code habe ich getestet und wie soll es anders sein- er funktioniert bei mir.
Nochmals vielen vielen lieben Dank.
Angelika

340 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige