Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA: Benachbarte Zellen automatisch füllen, wenn...
#1
Hallo zusammen,

ich habe eine Excel-Tabelle und folgendes Problem (anbei die Excel-Datei).

Auf dem Tabellenblatt "Objekte" hätte ich gerne, dass Excel mir die "x"-e automatisch für die Gesellschafter (hier Kürzel: JPS, JPJ, SPP, ...) setzt, wenn die gleiche Gesellschaft schon mal in einer Zeile drüber eingetragen worden ist.

Kennt sich hier jemand aus und kann mir helfen?

Danke im Voraus :)


Angehängte Dateien
.xlsm   P1_20200318.xlsm (Größe: 215,84 KB / Downloads: 7)
Antworten Top
#2
Hallo,

teste mal:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
   If Target.Column = 2 And Target.Row > 8 Then
      If Target <> "" Then
         If Application.CountIf(Range("B8:B" & Target.Row - 1), Target.Value) Then
            Range(Cells(Target.Row, 3), Cells(Target.Row, 8)) = "x"
         End If
      Else
         Range(Cells(Target.Row, 3), Cells(Target.Row, 8)) = ""
      End If
   End If
End If
End Sub
Gruß Atilla
Antworten Top
#3
Danke, aber klappt bei mir irgendwie nicht. Hast du es mal eingegeben und es hat geklappt? Hab die Datei mit angefügt.
Antworten Top
#4
Hallo,

ja, das habe ich und es hat geklappt.

Du fügst den Code in das Code Fenster der Tabelle "Objekte".

Sobald Du in Spalte B etwas einträgst, wird geprüft ob der gleiche Wert in den darüber liegenden Zeilen vorkommt.
Wenn Ja, werden die Nachbarzellen entsprechend mit x gefüllt.

Wenn Du den Wert löschst, dann werden auch die x' en wieder gelöscht.
Gruß Atilla
Antworten Top
#5
Kannst du mir bitte die Datei schicken, kenn mich mit VBA gar nicht aus. Vielleicht mach ich da was falsch.

Danke im Voraus.
Antworten Top
#6
Hallo,

du brauchst Dich nicht auskennen.
Das bekommst Du mit Einweisung hin.

Mach ein Rechts Klick auf den Tabellenreiter der Tabelle "Objekte"
Es erscheint ein Kontextmenü.
Dort, etwa in der Mitte, "Code anzeigen" wählen.

Es erscheint das Codefenster der Tabelle.
Rechts in das Fenster fügst Du den unten stehenden Code ein.

Das war es. teste jetzt mit Eingaben in Spalte B.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
   If Target.Column = 2 And Target.Row > 9 Then
      If Target <> "" Then
         If Application.CountIf(Range("B9:B" & Target.Row - 1), Target.Value) Then
            Range(Cells(Target.Row, 3), Cells(Target.Row, 8)) = "x"
         End If
      Else
         Range(Cells(Target.Row, 3), Cells(Target.Row, 8)) = ""
      End If
   End If
End If
End Sub

Macht zwar nichts aus, aber hier beginnt die Prüfung ab Zeile 9 und nicht wie vorhin ab Zeile 8.
Gruß Atilla
Antworten Top
#7
Habe es jetzt doch hinbekommen, doch füllt er die gesamte Zeile mit x und nicht so wie es in einer vorherigen Zeile für die Gesellschaft gemacht worden ist. Ist das bei dir auch so?

Ich hab mal ein Bildschirmfoto gemacht. Er füllt einfach die ganze Zeile mit den x und nicht wie schonmal für die Gesellschaft in eine vorherigen Zeile. Habe ich was falsch gemacht? Bzw. kannst du mir da helfen?

Danke vorab für deine bisherige Hilfe :)

hier das Bild


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#8
Hallo,

ja, so habe ich es programmiert.
Habe wohl zu einfach gedacht.

Gleich stelle ich dann eine Korrektur ein.
Gruß Atilla
Antworten Top
#9
Danke :)
Antworten Top
#10
Hallo,

sind ein paar Zeilen Code hinzugekommen, aber schau mal, ob es jetzt Deinen Wünschen entspricht:

Code:
   Dim i As Long
   Dim vantX
   If Target.Count = 1 Then
      If Target.Column = 2 And Target.Row > 9 Then
         If Target <> "" Then
            vantX = Application.Match(Target.Value, Range("B9:B" & Target.Row - 1), 0)
            If IsNumeric(vantX) Then
               Range(Cells(Target.Row, 3), Cells(Target.Row, 8)) = ""
               For i = 1 To 6
                  If Cells(vantX + 8, i + 2) = "x" Then Target.Offset(0, i) = "x"
               Next i
            End If
         Else
            Range(Cells(Target.Row, 3), Cells(Target.Row, 8)) = ""
         End If
      End If
   End If
Gruß Atilla
[-] Folgende(r) 1 Nutzer sagt Danke an atilla für diesen Beitrag:
  • murphie_g
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste