Clever-Excel-Forum

Normale Version: VBA Formel unter einer Tabellenspalte ersetzen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Schönen guten Samstag, liebe Leute,

ich müsste ein bisschen VBA lernen, ohne kann ich das Problem selber lösen. Anbei eine Beispieltabelle.

Die originale Tabelle hat mehrere hundert Zeilen und mehr als 50 Spalten. Immer wieder mal wird irgendeine Spalte eingefügt. Darum möchte ich unter der Tabellenüberschrift "Nullmenge" die Zählenwenn - Funkion via VBA von

Code:
=ZÄHLENWENN(B2:F2;0)


in

Code:
=ZÄHLENWENN(Tabelle1[@[Montag]:[Freitag]];0)


ändern, wobei Tabelle1 die einzige Tabelle auf dem aktuellen Tabellenblatt sein sollte.

Danke für evtl. Anregungen
du brauchst doch nur die Formel eintragen und die wird automatisch in alle Zeilen übernommen. 

 wieso dann vba?
es ist nur ein teilaspekt eines "für mich" größeren projekts.
Hallo,

schau mal hier wird es ganz gut erklärt, wie man mit Listobjects programmiert (leider in Englisch):
https://www.thespreadsheetguru.com/blog/...cel-tables

In Deinem Fall sollte das ausreichen:
Code:
Range("Tabelle1[[#Totals],[Montag]]").FormulaR1C1 = "=COUNTIF(Tabelle1[[Montag]:[Freitag]],0)"
Vielen Dank, die Seite werde ich mir bei Gelegenheit genauer ansehen. Aber hey, das offenbart meine Lücken. in meiner Beispieldatei bekomme ich für


Code:
Option Explicit

Sub zw_aendern()
'
' zw_aendern
'
    Range("Tabelle1[[#Totals],[Montag]]").FormulaR1C1 = "=COUNTIF(Tabelle1[[Montag]:[Freitag]],0)"

End Sub

die fehlermeldung
Zitat:Die Methode 'Range' für das Objekt '_Global' ist fehl geschlagen

Leider verstehe ich nicht, wie im Vorschlag die Zelle mit der zu verändernden Formel gefunden werden soll. Huh



Das Makro funktioniert. Das wählt aber auch die zu verändernde Zelle direkt an, die ja in meinem Konstrukt veränderlich ist und erst gefunden werden muss.

Code:
Option Explicit

Sub zw_aendern()
'
' zw_aendern Makro
'
    Range("G2").Select
    ActiveCell.FormulaR1C1 = "=COUNTIF(Tabelle1[@[Montag]:[Freitag]],0)"

End Sub
PHP-Code:
With ActiveSheet.ListObjects("Tabelle1").ListColumns("Nullmenge")
    .DataBodyRange.Formula "=COUNTIF(Tabelle1[@[Montag]:[Freitag]],0)"
End With 
Kühl, funktioniert und ich verstehe auch etwa wie.  :17: Dankeschön.

Eine Kleinigkeit (hoffentlich nur) noch: Die Tabelle wird turnusmäßig erneuert. Das heißt, die Tabellenbezeichnung ändert sich mit jedem neuen Arbeitsblatt. Es wird aber immer nur eine Tabelle je Blatt geben. Kann ich die Tabelle des aktuellen Blatts ohne Namen (hier also ohne 'Tabelle1') ansprechen?
Wenn es nur ein Listobjekt in der Tabelle gibt, dann sollte es so funktionieren:
Code:
ActiveSheet.ListObjects(1).
Yeah, Merci! :28:

Code:
Option Explicit

Sub zw_aendern()
'
' zw_aendern
'
With ActiveSheet.ListObjects(1).ListColumns("Nullmenge")
    .DataBodyRange.Formula = "=COUNTIF([@[Montag]:[Freitag]],0)"
End With

End Sub