Excel: Formeln nur in benutzte Zeilen übernehmen

  • #1
A

Ace_NoOne

Bekanntes Mitglied
Themenersteller
Dabei seit
07.04.2002
Beiträge
403
Reaktionspunkte
0
Ort
Germany
Hallo,

bei einer Vorlage für eine einfache Kontaktliste habe ich u.a. die Spalten Name, Vorname und Nachname.
Letztere werden automatisch ausgefüllt, indem der Name aufgesplittet wird (dank Matjes: http://www.wintotal-forum.de/index.php/topic,92133.0.html :) ).
Allerdings möchte ich natürlich nicht alle 65.536 Zeilen mit dieser Formel füllen, zumal oft nur 10-20 Einträge in der Liste stehen. Der Nutzer soll aber auch nicht gezwungen sein, die Formel von Hand in die nächste Zeile zu kopieren.
Gibt es eine Möglichkeit, diesen Vorgang zu automatisieren? Sobald eine neue Zeile in Angriff genommen wird, sollen auch die Formeln in den entsprechenden Spalten übernommen werden. (Sowas kommt wohl relativ häufig vor, daher gibt es bestimmt eine entsprechende Funktion, die ich bisher noch nicht entdecken konnte... !?)
 
  • #2
Da die Option Listenformat und Formeln erweitern (bzw. Datenbereich und Formeln erweitern) hier seltsamerweise nicht funktioniert (Beispieldatei zum Testen: http://www.herber.de/bbs/user/27395.xls - die Makros sind nur Matjes' Code zum Aufsplitten des Namens, also garantiert nichts Schädliches!), hab' ich Folgendes versucht:
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, _
    ByVal Source As Range)
  Dim lastRow
  lastRow = ActiveSheet.UsedRange.Rows.Count
  If ActiveCell.Row > lastRow Then
    Cells(ActiveCell.Row, 3) = GibVorname(Cells(ActiveCell.Row, 2))
    Cells(Activecell.Row, 4) = GibNachname(Cells(ActiveCell.Row, 2))
  End If
End Sub
Allerdings führt das seltsamerweise zu einer Art Endlosschleife, weshalb ich Excel per Task Manager beenden muss... :(
 
  • #3
Hallo Ace_NoOne,

im Prinzip ist das schon der richtige Weg.

Das soll ja eine Kontakt-Liste werden, und da nehme ich mal an, dass das nur ein Blatt ist.

Mit->Workbook_SheetChange' überwachst du alle Änderungen aller Arbeitsblätter. Besser wäre hier das Change-Ereignis im Tabellenblatt zu überwachen, und dabei die Spalte Name zu filtern. Ich mach dir mal ein Beispiel.

Aus dem Makro entnehme ich, das es sich um die Spalten 2,3,4 handelt.

Gruß Matjes :)
 
  • #4
Hallo Ace_NoOne,

der nachfolgende Makro muß in der Code-Seite des Blattes liegen.

Dort gelangt man am einfachsten hin, in dem man die Lasche des Blattes anklickt und->Code anzeigen' auswählt.

Gruß Matjes :)

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  
  Const c_SP_EINGABENAME = 2
  Const c_SP_VORNAME = 3
  Const c_SP_NACHNAME = 4
  Const c_Z_ERSTEWERTEZEILE = 2
  
  Dim Zelle As Range
  
 ->Alle geänderten Zellen untersuchen
  For Each Zelle In Target
    
   ->Zelle liegt in der EingabeNamen Spalte ?
    If Zelle.Column = c_SP_EINGABENAME Then
      
     ->Zelle ist nicht Überschrift
      If Zelle.Row >= c_Z_ERSTEWERTEZEILE Then
        
       ->Formel in korrespondierender Zelle in Spalte Vorname eintragen
        Zelle.Offset(0, c_SP_VORNAME - c_SP_EINGABENAME).Formula = _
        =GibVorname( & _
        Zelle.Address(RowAbsolute:=False, ColumnAbsolute:=False) & )
        
       ->Formel in korrespondierender Zelle in Spalte Name eintragen
        Zelle.Offset(0, c_SP_NACHNAME - c_SP_EINGABENAME).Formula = _
        =GibNachname( & _
        Zelle.Address(RowAbsolute:=False, ColumnAbsolute:=False) & )
        
      End If
    End If
  Next
AUFRAEUMEN:
  Set Zelle = Nothing
End Sub
 
  • #5
Klappt perfekt - merci beaucoup!
 
Thema:

Excel: Formeln nur in benutzte Zeilen übernehmen

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.959
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben