Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1304to1308
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

Formel umbauen :)

Formel umbauen :)
02.04.2013 10:11:35
Christopher
Hallo Mitmenschen,
ich möchte gerne eine Ressourcenplanung zusammenbasteln. So weit so gut.
Ich habe eine Tabelle in der Aufträge angelegt sind und als drop down ein Status hinterlegt werden kann.
Nun möchte ich in einer anderen Tabelle die Planung vornehmen die Abteilungsübergreifend ist.
Also möchte ich dort Aufträge angezeit bekommen die noch offen sind.
Wie kann ich diese Formel so umbauen dass sie das tut was sie jetzt schon tut blß dass sie nicht nur nach einem Wort sucht?
Public Sub Filter()
Dim i As Integer
Dim cell As Range
i = 1
For Each cell In Tabelle2.Range("O:O")
If Not cell Is Nothing Then
If cell.Value = "Begonnen" Then    {Hier gibt es mehrere Status die möglich sind)
cell.EntireRow.Copy Destination:=Tabelle5.Rows(i)
Tabelle5.Cells(i, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
i = i + 1
End If
End If
Next cell
End Sub
Ich hoffe ich konnte mein anliegen verständlich rüberbringen ;)

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formel umbauen :)
02.04.2013 10:28:12
Uwe
Hallo Christopher,
meinst Du das in der Art:
If cell.Value = "Begonnen" Or cell.Value = "Startet" Or cell.Value = "Läuft" Then
...
Gruß
Uwe
(:o)

AW: Formel umbauen :)
02.04.2013 10:40:55
Christopher
Hmm, soweit funktioniert das. Aber es passieren seltsame Sachen. z.B. erscheint in der daraus resultierenden Aufstellung in manchen Zellen ein =zählewenn
Ich vermute das rührt daher, dass er die verknüpfungen übernimmt. Gibt es eine Möglichkeit, nur die tatsächlich entahltenen Werte zu übernehmen und nicht die darin enthaltene Verknüpfung oder Formel zu einer anderen Tabelle?

AW: Formel umbauen :)
02.04.2013 10:50:18
Klaus
Hallo Christopher,
ermittel den Wert per Formel, wie Uwe gezeigt hat, dann überschreibe die Formel mit dem Wert selbst! In deinem Makro sähe das so aus:
Tabelle5.Cells(i, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
Tabelle5.Cells(i, 5).value = Tabelle5.Cells(i, 5).value
Grüße,
Klaus M.vdT.

Anzeige
AW: Formel umbauen :)
02.04.2013 11:14:55
Christopher
Hab den Code jetzt so geändert
Public Sub Filter()
Dim i As Integer
Dim cell As Range
i = 1
For Each cell In Tabelle2.Range("O:O")
If Not cell Is Nothing Then
If cell.Value = "Begonnen" Or cell.Value = "Messen" Or cell.Value = "Gemessen" Then
cell.EntireRow.Copy Destination:=Tabelle6.Rows(i)
Tabelle6.Cells(i, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
Tabelle6.Cells(i, 5).Value = Tabelle6.Cells(i, 5).Value
i = i + 1
End If
End If
Next cell
End Sub
Die zählewenn formel ist verschwunden. Was geblieben ist, sind die Verknüpfungen zu anderen Arbeitsmappen.
Bsp: =WENN([Cable.xlsm]Overview!F1="";"";[Cable.xlsm]Overview!F1)
Ich lad die Krücke mal hoch ;)
https://www.herber.de/bbs/user/84672.txt (ist eine .rar weil zu groß)
wie man sieht sind die Daten die ich filtern will in Cable_DATA und das Ergebnis soll irgendwann in Tabelle2 erscheinen.
momentan verwirrt mich das Ergebnis

Anzeige
AW: Formel umbauen :)
02.04.2013 11:29:04
{Boris}
Hi,
nur am Rande bemerkt:
Dim cell As Range
For Each cell In Tabelle2.Range("O:O")
If Not cell Is Nothing Then
Cell ist niemals Nothing, da Cell eine Objektvariable ist und jede Zelle in Spalte O ist ein Objekt. Somit läuft Deine Schleife immer 2^20 mal durch ;-)
VG, Boris

pedantischer als Boris!
02.04.2013 12:37:20
Klaus
Hallo Boris,
Cell ist niemals Nothing, da Cell eine Objektvariable ist und jede Zelle in Spalte O ist ein Objekt. Somit läuft Deine Schleife immer 2^20 mal durch ;-)
Diese Schleife läuft so oder so 2^20 mal durch, selbst wenn er If Not cell Is Nothing Then durch IF Not cell.value = "" Then ersetzt.
Ob bei jedem Durchlauf der Code innerhalb des IF-Blockes ausgeführt wird oder nicht, ist eine andere Frage.
Grüße und nichts für ungut,
Klaus M.vdT.

Anzeige
Korrektur
02.04.2013 11:11:46
Klaus
Hi,
bitte ignoriere meinen ersten Vorschlag. Direkt nach "senden" habe ich gesehen, dass ich deinen Code nicht genug gelesen hatte und du warscheinlich etwas ganz anderes als "werte" haben möchtest. Bei der Gelegenheit habe ich mir aber erlaubt, deinen Code etwas zu entschlacken:
Option Explicit
Public Sub Filter()
Dim lRow As Long
Dim rBereich As Range 'umbenannt
'cells ist ein Excel-Begriff! Vermeide Excel-Begriffe als Variablenname!
'du hattest "cell" als Name. Das ist zwar nicht "cells", aber zu ähnlich -  _
verwechslungsgefahr
With tabelle2
'nicht die gesamte Spalte, sondern nur den gefüllten Bereich - das spart Zeit!
lRow = .Cells(.Rows.Count, 15).End(xlUp).Row
For Each rBereich In .Range("O1:O" & lRow)
'IF umgebaut gemäß Uwe's Vorschlag
If rBereich.Value = "Begonnen" Or _
rBereich.Value = "Startet" Or _
rBereich.Value = "Läuft" Then
'Werte einsetzen, nicht Formeln einsetzen
rBereich.EntireRow.Copy
Tabelle5.Rows(rBereich.Row).PasteSpecial xlPasteValues
'Summewenn Formel einsetzen - auch durch Werte ersetzen?
Tabelle5.Cells(rBereich.Row, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
'Tabelle5.Cells(rBereich.Row, 5).Value = Tabelle5.Cells(rBereich.Row, 5).Value
'den Counter i habe ich komplett rausgeworfen.
'in der For-Each-Range hast du schon eine Zeilenangabe, und zwar Range.row
'benutz lieber die, anstatt die Zeilen extra in i hochzutickern
End If
Next rBereich
End With
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Korrektur
02.04.2013 11:28:07
Christopher
Das funktioniert.
Das mit dem .PasteSpecial hatte ich auch mal im Kopf aber einfach nicht auf dei Reihe bekommen ;)
2 Fragen noch.
1) Warum erscheint diese Zählewenn Formel überhaupt? In meiner Tabelle sind garkeine Zählewenn Formel drin O.o
Wofür ist dieser Code?
'Summewenn Formel einsetzen - auch durch Werte ersetzen?
Tabelle5.Cells(rBereich.Row, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
'Tabelle5.Cells(rBereich.Row, 5).Value = Tabelle5.Cells(rBereich.Row, 5).Value
2) Er gibt den Wert jetzt genau in der Zeile aus in der er ihn gefunden hat. Das könnte in meiner Zurgundeliegenden Tabelle bald mal sehr weit unten sein. Kann er nicht einfach immer oben anfangen aufzulisten und dann runter?

Anzeige
AW: Korrektur
02.04.2013 12:18:46
Klaus
Hi,
ich kann dir glaube ich nicht helfen! Du schreibst:
1) Warum erscheint diese Zählewenn Formel überhaupt? In meiner Tabelle sind garkeine Zählewenn  _
Formel drin O.o
Wofür ist dieser Code?
'Summewenn Formel einsetzen - auch durch Werte ersetzen?
Tabelle5.Cells(rBereich.Row, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
'Tabelle5.Cells(rBereich.Row, 5).Value = Tabelle5.Cells(rBereich.Row, 5).Value
Tja ... woher soll ich denn wissen, woher dieser Code ist? Den hast du so in deinem Eingangsmakro stehen, dass heisst diese Frage musst DU MIR beantworten!
Vielleicht ist das einfach ein Artefakt aus dem Codefetzen den du dir ursprünglich kopiert hast. Schmeiss diese Zeile doch mal komplett aus dem Makro raus.
2) Er gibt den Wert jetzt genau in der Zeile aus in der er ihn gefunden hat. Das könnte in meiner Zurgundeliegenden Tabelle bald mal sehr weit unten sein. Kann er nicht einfach immer oben anfangen aufzulisten und dann runter?
Achso, DAFÜR war der seltsame i-Counter in deinem Ursprungscode! Ja, der war ja auch innerhalb eines IF gefangen und zählte nicht für jedes EACH mit nach oben, jetzt sehe ich das. Rüge: schlecht kommentierter Code ist schlecht verständlich! (Aber der Code ist ja nicht von dir gewesen)
Probiers mal hiermit, die misteriöse ZÄHLENWENN Zeile habe ich rausgeworfen:
Option Explicit
Public Sub Filter()
Dim lRow As Long
Dim lRow2 As Long
Dim rBereich As Range
'fange in Tabelle5 bei Zeile 1 an zu schreiben
lRow2 = 1
With tabelle2
'letzte Zeile Tabelle 2
lRow = .Cells(.Rows.Count, 15).End(xlUp).Row
'nur relevanten Bereich durchsuchen
For Each rBereich In .Range("O1:O" & lRow)
'modifizierte IF-Formel für drei Stati (plural Status!)
If rBereich.Value = "Begonnen" Or _
rBereich.Value = "Startet" Or _
rBereich.Value = "Läuft" Then
'Zeile kopieren
rBereich.EntireRow.Copy
'Inhalte einfügen, nicht Formeln einfügen
tabelle5.Rows(lRow2).PasteSpecial xlPasteValues
'Zeilenticker erhöhen
lRow2 = lRow2 + 1
End If
Next rBereich
End With
End Sub
Oder noch besser so:
(fängt in Tabelle5 nicht immer bei Zeile 1 an, sondern immer in der ersten freien Zeile)
Public Sub Filter()
Dim lRow As Long
Dim lRow2 As Long
Dim rBereich As Range
'fange in Tabelle5 bei Zeile 1 an zu schreiben
lRow2 = 1
With tabelle2
'letzte Zeile Tabelle 2
lRow = .Cells(.Rows.Count, 15).End(xlUp).Row
'nur relevanten Bereich durchsuchen
For Each rBereich In .Range("O1:O" & lRow)
'modifizierte IF-Formel für drei Stati (plural Status!)
If rBereich.Value = "Begonnen" Or _
rBereich.Value = "Startet" Or _
rBereich.Value = "Läuft" Then
'Zeile kopieren
rBereich.EntireRow.Copy
'Zeile ermitteln
lRow2 = tabelle5.Cells(tabelle5.Rows.Count, 1).End(xlUp).Row + 1
'Inhalte einfügen, nicht Formeln einfügen
tabelle5.Rows(lRow2).PasteSpecial xlPasteValues
End If
Next rBereich
End With
End Sub
Achtung! Spalte A muss immer bis zum Ende gefüllt sein. Wenn es bei dir Spalte C ist, ändere diese Codezeile entsprechend:
lRow2 = tabelle5.Cells(tabelle5.Rows.Count, 3).End(xlUp).Row + 1

(Spalte A = 1, Spalte C = 3 und so weiter)
Grüße,
Klaus M.vdT.

Anzeige
AW: Korrektur
02.04.2013 13:05:07
Christopher

Public Sub Filter()
Dim i As Integer
Dim cell As Range
i = 1
Das war der ursprüngliche Code. Natürlich geklaut, weil ich würds nie auf die Reihe bringen -.-
For Each cell In Tabelle2.Range("O:O")
If Not cell Is Nothing Then
If cell.Value = "Begonnen" Then
cell.EntireRow.Copy Destination:=Tabelle5.Rows(i)
Tabelle5.Cells(i, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])" (Ich dachte diese und die nä _
chste
i = i + 1                                                    Zeile, wären dazu da, dass  _
er den
ganzen Mist nicht in die  _
selbe
Zeile schreibt ;) Ich  _
wusste nicht
dass das eine Zählewenn  _
Anweisung
ist)
End If
End If
Next cell
End Sub

Die erste Variante war genau mein Ding ;)
Option Explicit
Public Sub Filter()
Dim lRow As Long
Dim lRow2 As Long
Dim rBereich As Range
'fange in Tabelle5 bei Zeile 1 an zu schreiben
lRow2 = 1
With tabelle2
'letzte Zeile Tabelle 2
lRow = .Cells(.Rows.Count, 15).End(xlUp).Row
'nur relevanten Bereich durchsuchen
For Each rBereich In .Range("O1:O" & lRow)
'modifizierte IF-Formel für drei Stati (plural Status!)
If rBereich.Value = "Begonnen" Or _
rBereich.Value = "Startet" Or _
rBereich.Value = "Läuft" Then
'Zeile kopieren
rBereich.EntireRow.Copy
'Inhalte einfügen, nicht Formeln einfügen
tabelle5.Rows(lRow2).PasteSpecial xlPasteValues
'Zeilenticker erhöhen
lRow2 = lRow2 + 1
End If
Next rBereich
End With
End Sub

Merci

Anzeige
Danke für die Rückmeldung! Mit Text
02.04.2013 13:37:10
Klaus
Hi Christopher,
freut mich dass ich dir doch helfen konnte! Ich weiss, bei deinem Level steht "VBA Nein" aber trozdem: Das geht gar nicht:
Ich wusste nicht dass das eine Zählewenn Anweisung ist
Auch wenn du die Vokabeln nicht kannst, Code einfach mal laut lesen.
Tabelle5.Cells(i, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])"
Du hast ein Problem (gehabt) mit einer mysteriösen Zählenwenn Formel, im Code steht "Formel = Zählenwenn" ... darauf hättest du doch schließen können!
(Ok, dazu muss man wissen dass Zählenwenn auf Englisch Countif heisst ... aber ich rate eh jedem der mich fragt, das Excel auf englisch zu stellen. Aus genau diesem Grund).
Grüße,
Klaus M.vdT.

Anzeige
AW: Danke für die Rückmeldung! Mit Text
02.04.2013 13:53:08
Christopher
Ich weiß wohl dass Countif, zählewenn heisst. So hinterm Mond bin ich dann doch nicht.
Dennoch finde ich dass es für VBA leihen, nicht eindeutig klar ist, dass dieser Code
Tabelle5.Cells(i, 5).FormulaR1C1 = "=COUNTIF(C[-2],RC[-2])
Irgendwo =zählewenn als Formel reinschreibt.
Trotzdem Danke.
Da ich mehrere Quelltabellen habe kamen mir deine beiden Codes ganz recht. Da ich sie so alle schön aneinanderreihen kann. ;)

...aber nur absoluten Laien mit geborgtem VBA! ;-)
02.04.2013 15:06:16
Luc:-?
Gruß Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige