Supportnet Computer Supportnet Games Supportnet Kochen Explipedia
Login: guestBesucher online: 126
Supportnet Computerforum
SUPPORT
Home
Forum
Tipps & Infos
Blitz Angebote
Members
Hilfe
Video

TOP THEMEN
SSD Test
Alles über SSDs

Android Tipps
iPad Tipps
Google Tipps
Windows 8 FAQ
Windows 7 FAQ
E-Mail FAQ
Netzwerk FAQ
Festplatten FAQ
Datenrettung FAQ
Bildbearbeitung FAQ

Top iPhone Apps
Computer Einsteiger
Die 5 besten...
Explipedia
Themen
Direktlinks

Neue Einträge
News einsenden News einschicken
Tipps einsenden Tipp einschicken

SN-LINKS

Suche
Befreundete Seiten
Top Seiten

Supportnet/Forum/Tabellenkalkulation



Supportnet/Forum/Tabellenkalkulation
von twst vom 05.01.2017, 09:00 Diese Seite den Supportnet Favoriten hinzufügen  Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden


Verknüpfung mehrerer Funktionen

 (260 Hits)

Hallo,
ich möchte folgende Funktion haben:
Wenn in Spalte G ("Offener Betrag") kein Wert und in Spalte E
("Rechnungsdatum") ein Datum steht, soll die Zeile ausgeblendet
werden.
Dazu wollte ich einfach eine Spalte einfügen, die aus der
Kombination der beiden Werte für Spalte H ein x/leer berechnet und
dann als Makro folgendes anwenden:
Sub HideRows()
BeginRow = 2
EndRow = 1250
ChkCol = 8

For RowCnt = BeginRow To EndRow
If Cells(RowCnt, ChkCol).Value = "x" Then
Cells(RowCnt, ChkCol).EntireRow.Hidden = True
End If
Next RowCnt
End Sub

Meine Fragen sind jetzt
a) wie sähe eine "=UND"-Funktion aus, die mir diesen Wert für H
ausspuckt aus (also entweder x/leer)?
b) gäbe es eine elegantere Lösung?

Vielen Dank im Voraus,
Wolfgang


Antwort schreiben 50 Bonuspunkte

Antworten...
Antwort 1 von M.O. vom 05.01.2017, 09:52 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo Wolfgang,

auch die Hilfsspalte kannst du verzichten.
Probier es mal so:

Sub HideRows()

Dim Beginrow As Long
Dim Endrow As Long
Dim Rowcnt As Long

Beginrow = 2
Endrow = 1250
ChkCol = 8

For Rowcnt = Beginrow To Endrow
 If Cells(Rowcnt, 5).Value > 0 And Cells(Rowcnt, 7) = 0 Then Rows(Rowcnt).EntireRow.Hidden = True
Next Rowcnt

End Sub


Gruß

M.O.


Antwort noch nicht bewertet Als gute Antwort bewerten
Diese Antwort hat mein Problem gelöst
Antwort 2 von M.O. vom 05.01.2017, 09:53 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo,

Zitat:
auch die Hilfsspalte kannst du verzichten.


Es soll natürlich heißen:

auf die Hilfsspalte kannst du verzichten.

Gruß

M.O.


Antwort noch nicht bewertet Als gute Antwort bewerten
Diese Antwort hat mein Problem gelöst
Antwort 3 von quinoman vom 05.01.2017, 21:10 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo, die Lösung die schon da ist, ist ok, scheint aber nicht die Forderung zu erfüllen, dass nur dann ausgeblendet wird, wenn der Wert in Spalte G =0 und in Spalte H ein DATUMN steht (Abfrage auf Datum erfolgt mit IsDate)
Ansonsten ist es natürlich egal, ob man eine Zählschleife benutzt oder For each/next

Sub hideZero()
Dim Zeile As Range 'Definiert Variable als Range-Objekt
For Each Zeile In Sheets("Tabelle1").Range("G2:H1250").Rows ' Schleife über den Bereich von Interesse
If Zeile.Cells(1) = 0 And IsDate(Zeile.Cells(2).Value) Then 'Bedingungen (G=0 und H=Datum)
Zeile.Hidden = True 'Zeile ausblenden
End If 'IF-Abfrage beendet
Next 'nächste Zeile in der Schleife
End Sub


Antwort noch nicht bewertet
Antwort 4 von quinoman vom 05.01.2017, 21:53 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Ergänzung/Modifikation


Da die Forderung lautet, dass in Spalte H ein Datum stehen muss,
kann man von unten nach oben die erste (somit in der fraglichen Tabelle von oben nach
unten die letzte) Zelle mit einem Datums-Eintrag bestimmen und dann genau den so ermittelten
Bereich "durchackern". Das setzt natürlich voraus, dass im Tabellenblatt keine andere
Daten bzw. Tabelle UNTER der betreffenden Tabelle angelegt wird, was man bei Excel eigentlich
nur macht, wenn es unvermeidbar ist.
Aber auch dann kann man den Bereich dynamisch bestimmen:
Sollte z.B. ab Zeile 1500 eine ganz andere Tabelle anfangen, kann man im vorliegenden Code
intLastRow =Range("G1").Offset(Active.... usw. durch intLastRow=1500 ersetzen. Vorteil: es wird
nur so oft geprüft und ausgeblendet, wie tatsächlich nötig.
Im konkreten Fall bringt das natürlich nur Millisekunden, sollte man aber auf Dauer angewöhenen, als
"guten Stil" 'sozusagen. Der geänderte Code lautet dann:

Sub hideZero()
Dim Zeile As Range 'Definiert Variable als Range-Objekt
Dim lngLastRow As Long 'Definiert Variable als Long

' von ganz unten nach oben Zeilennummer mit letzten Eintrags suchen
intLastRow = Range("G1").Offset(ActiveSheet.Rows.Count - 1).End(xlUp).Row
For Each Zeile In Sheets("Tabelle1").Range("G2:H2").Resize(intLastRow).Rows 'Schleife über Bereich
If Zeile.Cells(1) = 0 And IsDate(Zeile.Cells(2).Value) Then
Zeile.Hidden = True
End If
Next
End Sub

'Die Abfrage IF wurde bewusst auf 3 Zeilen gelegt. Zwar kann man bei nur 1 Aktion auch alles in eine Zeile
'packen, also
If Zeile.Cells(1) = 0 And IsDate(Zeile.Cells(2).Value) Then Zeile.Hidden = True
'(--> den End If muss man dann entfernen !!)
'Es ist in der Praxis aber hilfreich, einen "ordentlichen" Block zu schreiben, denn - falls z.B. später weitewre Aktionen oder gar ein ELSE - Zweig hinzukommen, verliert man sonst leicht die Übersicht, wo der END IF hingehört.
'Zudem ist dies ein Makro , was man in leicht geänderter Form ständig benötigt.Solchen Code kann man sich als Textdatei abspeichern und immer wieder einbauen + anpassen.
Gruss aus Hessen, Quinoman


Antwort noch nicht bewertet
Antwort 5 von Nighty__ vom 05.01.2017, 22:39 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hallo Community ^^

Ein Beispiel ohne Schleife .-)

Gruss Nighty

Nutzung des Autofilter mit 2 Suchbegriffen und deren Ausblendung!
Field 1+3 sind die Spalten des Autofilterbereiches,nicht der Tabelle!
Datum waere mit Cdbl() abfragbar

Sub AusblendenZweiKreterien()
    Dim FilteredRange As Range
    ActiveSheet.Range("A1:D1").AutoFilter
    ActiveSheet.Range("A1").AutoFilter Field:=1, Criteria1:=1
    ActiveSheet.Range("D1").AutoFilter Field:=3, Criteria1:="e"
    Set FilteredRange = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
    ActiveSheet.Range("A1").AutoFilter
    FilteredRange.EntireRow.Hidden = True
    ActiveSheet.Rows("1").EntireRow.Hidden = False
End Sub


Antwort noch nicht bewertet
Antwort 6 von Nighty__ vom 06.01.2017, 08:16 Mißbrauch, Beleidigungen und Blödsinn den Moderatoren melden

Hi Community ^^

Bisl angepasst!

Gruss Nighty

Überschrift vorrausgesetzt

Suchkreterien!
Spalte G ein x
Spalte H ein Datum das kleiner ist als der Laufende Monat(Beispel)

Sub AusblendenZweiKreterien()
    Dim FilteredRange As Range
    Dim Qdate As Date
    Qdate = "01." & Mid(Date, 4, 2) & Mid(Date, 6, 5)
    ActiveSheet.Range("G1:H1").AutoFilter
    ActiveSheet.Range("G1").AutoFilter Field:=1, Criteria1:="x"
    ActiveSheet.Range("H1").AutoFilter Field:=2, Criteria1:="<" & CDbl(Qdate)
    Set FilteredRange = ActiveSheet.AutoFilter.Range.SpecialCells(xlCellTypeVisible)
    ActiveSheet.Range("G1").AutoFilter
    FilteredRange.EntireRow.Hidden = True
    ActiveSheet.Rows("1").EntireRow.Hidden = False
End Sub


Antwort noch nicht bewertet




Hinweis
Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum.

MACHEN SIE IHRE WEBSITE ATTRAKTIVER
Sie haben eine eigene Website und wollen Ihre Besucher auf den Supportnet-Service aufmerksam machen? Kopieren Sie einfach den Quellcode in Ihre Seite und jeder Besucher Ihrer Seite kann direkt auf die Supportnet-Datenbank zugreifen.

My Supportnet


SUCHE

Gruppen im Forum
Betriebsysteme
Software
Hardware
Netzwerk
Programmierung
Sonstiges

Impressum © 1997-2015 SupportNet
Version: supportware 1.8.230E / 18.10.2010, Startzeit:Thu Apr 27 08:45:35 2017