264 Aufrufe
Gefragt in Tabellenkalkulation von
Bearbeitet
Hallo zusammen,

ich habe eine Frage zum Code.

Option Explicit

Sub Spalte_ausb()
Dim intSpalte As Integer
Application.ScreenUpdating = False
For intSpalte = 1 To 256
If Cells(1, intSpalte) = "" Then
Columns(intSpalte).EntireColumn.Hidden = True
End If
Next
Application.ScreenUpdating = True
End Sub

Wenn ich das richtig verstanden habe, dann gebe ich im Bereich "For intSpalte = 1 To 256" den Abfrage Bereich ein.

und im Bereich "If Cells(3, intSpalte) = "z" Then" gebe ich die Spalte an welche zu durchsuchen ist, in meinem Fall die 3 Spalte und nach was er suchen soll, in meinem Fall ein z.

Ist das so richtig?

Un wie bekomme ich das hin wenn ich das "z" in eine verbunden Zelle habe welche über 4 Spalten zusammenhängt?

Es funktioniert nähmlich nicht :(

Danke und Gruß

Bernd

13 Antworten

0 Punkte
Beantwortet von m-o Profi (20.1k Punkte)

Hallo Bernd,

For intSpalte = 1 To 256

bedeutet, dass die Spalten 1 bis 256, also A bis IV durchlaufen werden.

Mit dem Befehl

If Cells(3, intSpalte) = "z" Then

durchsuchst du die 3. Zeile der Spalten 1 bis 256 nach einem z.

Verbundene Spalten machen eigentlich nur Probleme und sollten vermieden werden.

Mit dem Code wird nur die Spalte ausgeblendet, in der das z steht, der leere Rest der verbundenen Spalten aber nicht, da in verbundenen Spalten i.d.R. nur in der ersten Spalte ein Wert steht und in den anderen nicht.

Sollen über mehrere Spalten verbundene Zellen ausgeblendet werden, so ist das etwas komplizierter:

Sub Spalte_ausb()
Dim intSpalte As Integer
Dim rngStartZelle As Range 'erste Zelle des verbundenen Bereichs
Dim rngEndZelle As Range   'letzte Zelle des verbundenen Bereich

'Bildschirmaktualiserung aus
Application.ScreenUpdating = False
'Spalten 1 bis 256 durchlaufen
For intSpalte = 1 To 256
  'in 3. Zeile prüfen, ob ein z in Zelle steht
  If Cells(3, intSpalte) = "z" Then
    'prüfen, ob verbundene Zellen vorliegen
    If Cells(3, intSpalte).MergeCells Then
      'falls ja, dann
      'erste und letzte Zelle der verbundenen Zellen feststellen
      Set rngStartZelle = Cells(3, intSpalte).MergeArea(1)
      Set rngEndZelle = Cells(3, intSpalte).MergeArea(Cells(3, intSpalte).MergeArea.Cells.Count)
      'Bereich der verbundenen Zellen ausblenden
      Range(rngStartZelle, rngEndZelle).EntireColumn.Hidden = True
     Else
     'falls nein
     'Spalte normal ausblenden
     Columns(intSpalte).EntireColumn.Hidden = True
    End If
  End If
Next intSpalte
'Zuweisungen der 1. und letzten Spalte wieder aufheben
Set rngStartZelle = Nothing
Set rngEndZelle = Nothing
'Bildschirmaktualiserung ein
Application.ScreenUpdating = True
End Sub

Gruß

M.O.

0 Punkte
Beantwortet von
Hallo M.O.,

danke für deine Hilfe!

Leider macht er nicht das was er soll...

Die Spalten werden nicht ausgeblednet, obwohl das Makro sauber durchläuft.

Woran kann das liegen?

Gruß

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

bei läuft das Makro wie es soll. In welcher Zeile soll das z denn gesucht werden? Erkläre doch mal genau, was das Makro tun soll.

Gruß

M.O.
0 Punkte
Beantwortet von
Hm Kann ich dir Irgendwie eine Kopie der datei schicken?

Ich habe einen Prüfplan erstellt und in Spalte C kann ein z stehen, wenn das Prüfmerkmal nicht zutreffend ist.

Das z kann ab Zeile 36 vorkommen.

Gruß

Bernd
0 Punkte
Beantwortet von m-o Profi (20.1k Punkte)

Hallo Bernd,

wie du eine Datei hier im Forum hochlädst, kannst du hier nachlesen: Anleitung

Aber wie ich sehe, willst du die Spalte C nach dem z durchsuchen. Dann kann der Code natürlich nicht klappen, da er ja nur die 3. Zeile der Spalten A bis IV durchsucht.

Was soll den ausgeblendet werden, wenn das z gefunden wird? Doch wohl nicht die ganze Spalte C?

Wie gesagt, erkläre mal genau, was du erreichen willst.

Gruß

M.O.

0 Punkte
Beantwortet von bernd76 Einsteiger_in (18 Punkte)

hallo ich habe dir mal das betroffene Sheet hier verlinkt, damit du es dir mal anschauen kannst und besser verstehst was genau ich meine.

Danke und gruß

Bernd

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

wahrscheinlich bin ich zu blöd, aber wie lädt man bei deinem Link das File herunter (Codeeingabe notwendig?)?

Du kannst die Tabelle auch hier direkt im Forum hochladen (siehe die oben verlinkte Anleitung).

Gruß

M.O.
0 Punkte
Beantwortet von bernd76 Einsteiger_in (18 Punkte)

Datei: https://supportnet.de/forum/?qa=blob&qa_blobid=14579304784382481150

Moin :)

Pobiere es bitte jetzt noch mal.

Danke

Bernd

0 Punkte
Beantwortet von m-o Profi (20.1k Punkte)

Hallo Bernd,

jetzt hat es geklapptsmiley.

Das folgende Makro durchläuft ab Zeile 36 die Spalte C und blendet alle (verbundenen) Zeilen aus, wenn in Spalte C ein z steht:

Sub z_ausblenden()

Dim lngLetzte As Long
Dim rngAnfang As Range
Dim rngEnde As Range
Dim lngZeile As Long

'Bildschirmaktualisierung ausschalten:
Application.ScreenUpdating = False

'letzte beschriebene Zeile im Blatt ermitteln
lngLetzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

'nun die Spalte C ab Zeile 36 durchlaufen
For lngZeile = 36 To lngLetzte
  'und nach z suchen
  If Cells(lngZeile, 3).Value = "z" Then
    'falls z gefunden
    'prüfen, ob Zelle verbunden ist
    If Cells(lngZeile, 3).MergeCells Then
       'falls ja, erste und letzte Zelle des Bereichs ermitteln
       'und in Variable schreiben
       Set rngAnfang = Cells(lngZeile, 3).MergeArea(1)
       Set rngEnde = Cells(lngZeile, 3).MergeArea(Cells(lngZeile, 3).MergeArea.Cells.Count)
       'falls Zeile nicht ausgeblendet ist,
       If Rows(lngZeile).EntireRow.Hidden = False Then
         'Bereich der verbundenen Zellen ausblenden
         Range(rngAnfang, rngEnde).EntireRow.Hidden = True
       End If
    End If
  End If
Next lngZeile

'Zuweisungen wieder aufheben
Set rngAnfang = Nothing
Set rngEnde = Nothing

'Bildschirmaktualisierung einschalten:
Application.ScreenUpdating = True

End Sub

Da in deiner Datei keine einzelne Zeilen mit einem z vorkommen, habe ich mir gespart, diese ggf. auszublenden. Falls du das noch brauchst, dann melde dich einfach noch einmal.

Gruß

M.O.

0 Punkte
Beantwortet von bernd76 Einsteiger_in (18 Punkte)
Bearbeitet von bernd76
Hallo mein lieber,

du bist der beste :) Tolle arbeit!
Die einzelspalten ausblendung wäre nicht schlecht, habe gesehen das es sinn macht schon ab Zeile 14 danach zu schauen und dort sind es Einzelspalten.

Eine kleine bitte hätte ich jetzt noch.

Ist es möglich das ausblenden rückgängig zu machen wenn sich die Eingabe in D1 Ändert?

Danke und Gruß

Bernd
...