VBA - Inhalte in bestimmte Zellen schreiben
#1
Hallo zusammen,

ich habe in einer Tabelle in Spalte A verschiedene (teilweise öfters vorkommende) Namen stehen, die sich ständig erweitern.
In Spalte B soll für jeden Namen eine Zahl stehen, bei gleichen Namen dann auch die gleiche Zahl:

A1: "Hugo"       B1: 1300
A2: "Erik"          B2: 1503
A3: "Thomas"    B3: 1651
A4: "Erik"          B4: 1503
A5: "Thomas"    B5: 1651
...

Es kommen wie gesagt immer wieder neue Zeilen (neue und bereits vorhandene Namen) dazu, was auch gleichzeitig mein Problem ist, ansonsten wärs für mich kein Problem.

Ich würde nun gerne Folgendes machen, weiss ober nicht, wie das am Besten bewerkstelligen kann:

Per VBA sollen die Zahlen für die bereits vorhandenen Namen geändert/aktualisiert werden.
Ich gebe den Namen ein, dessen Zahl geändert werden soll und die neue Zahl und es werden für diesen Namen alle Zahlen auf die neue geändert.

Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt.

Vielen Dank für Eure Hilfen !

Gruß
vom Winni


Angehängte Dateien Thumbnail(s)
   
Top
#2
Hi Winni,

muss es denn unbedingt VBA sein? Schau dir mal die Fkt. SVERWEIS an. Du legst dir ein Tabellenblatt mit den Namen (ohne Duplikate) und den dazugehörigen Nummern an und holst dir die Daten von dort.

Tabelle1

ABCDEFGHIJ
1Hugo1300Jonas1100
2Thomas1500Sarah1200
3Thomas1500Hugo1300
4Lukas1600Hans1400
5Hugo1300Thomas1500
6Hans1400Lukas1600
7Lukas1600
8Hugo1300
9#NV
10#NV
11#NV
Formeln der Tabelle
ZelleFormel
B1=SVERWEIS(A1;$I$1:$J$6;2;0)

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Deine Referenztabelle kannst du auch, so wie in meinem Beispiel, in einen nicht sichtbaren Bereich legen. Die #NV-Meldungen eliminierst du, indem du um die SVERWEIS-Formel noch ein WENNFEHLER legst:

Code:
=WENNFEHLER(SVERWEIS(A1;$I$1:$J$6;2;0);"")
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
[-] Folgende(r) 1 Nutzer sagt Danke an WillWissen für diesen Beitrag:
  • Wiiinnniii
Top
#3
(17.08.2016, 06:29)WillWissen schrieb: Hi Winni,

muss es denn unbedingt VBA sein? Schau dir mal die Fkt. SVERWEIS an. Du legst dir ein Tabellenblatt mit den Namen (ohne Duplikate) und den dazugehörigen Nummern an und holst dir die Daten von dort.

Tabelle1

ABCDEFGHIJ
1Hugo1300Jonas1100
2Thomas1500Sarah1200
3Thomas1500Hugo1300
4Lukas1600Hans1400
5Hugo1300Thomas1500
6Hans1400Lukas1600
7Lukas1600
8Hugo1300
9#NV
10#NV
11#NV
Formeln der Tabelle
ZelleFormel
B1=SVERWEIS(A1;$I$1:$J$6;2;0)

Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4.8

Deine Referenztabelle kannst du auch, so wie in meinem Beispiel, in einen nicht sichtbaren Bereich legen. Die #NV-Meldungen eliminierst du, indem du um die SVERWEIS-Formel noch ein WENNFEHLER legst:

Code:
=WENNFEHLER(SVERWEIS(A1;$I$1:$J$6;2;0);"")

Hi Will Sleepy ,

Danke für Deine Antwort,

Der Aufbau meiner Tabelle lässt Deine Idee vermutlich nicht zu:

Ich habe in Tabellenblatt 1 eine sich ständig erweiternde Liste mit Personen (Spalte A). In Spalte B steht für jede Person eine bestimmte Zahl (gleiche Person = gleiche Zahl). Es kommen ständig sowohl bereits vorhandene Personen, als auch neue hinzu.
Mit einer Matrixfunktion habe ich die doppelten Personen "eliminiert" und somit in einer anderen Spalte (Spalte D) des Tabellenblattes alle Personen nur ein mal stehen. Mit SVERWEIS könnte ich auch leicht, die dazuehörige Zahl  in Spalte E schreiben.

Das Problem ist, dass sich die Zahlen mind. jedes Quartal ändern !

Und jetzt suche ich nach einer Möglichkeit, wie ich die Zahlen am einfachsten jedes Qurtal für best. Personen (die ja auch mehrfach vorkommen) ändern kann, ohne die ganze Spalte B händisch mit den neuen Zahlen zu füllen.

Und da dachte ich halt an VBA:

Eingabe: Name
Eingabe: Neue Zahl

Funktion: Excel sucht in Spalte A nach dem jeweiligen Namen und ersetzt für diesen Namen in Spalte B die alten Zahlen mit der neuen Zahl.

Oder gibts vielleicht doch ne andere Lösung ?

Gruß
vom Winni
Top
#4
Hallo Winni,

mal als Test. Schau mal ob Du damit arbeiten könntest:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFG
1Hugo2500   Thomas2100
2Thomas2100     
3Thomas2100     
4Lukas1600     
5Hugo2500     
6Hans1400     
7Lukas1600     
8Hugo2500     
9Jonas1100     
10Sarah1200     
11Hugo2500     
12Hans1400     
13Thomas2100     
14Lukas1600     

In ein Modul packst Du den folgenden Code


Code:
Sub Suchen()

Dim i As Long
Dim Treffer As Range
Dim strBegriff As String

With Tabelle1
strBegriff = .Range("F1").Value

Set Treffer = Range("A1")

For i = 1 To WorksheetFunction.CountIf(Columns(1), strBegriff)

   Set Treffer = Columns(1).Find(What:=strBegriff, After:=Treffer, _
       LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
       SearchDirection:=xlNext, MatchCase:=False)

    If Not Treffer Is Nothing Then
     Treffer.Offset(0, 1).Value = .Range("G1").Value
     Treffer.Interior.ColorIndex = 6
    End If
   
Next i
End With

End Sub

In F1 gibst Du den zu suchenden Namen ein. In G1 den Wert.
Das Makro sucht nach dem Namen und schreibt hinter alle Treffer den Wert aus G1.
Das Einfärben der Treffer (Treffer.Interior.ColorIndex = 6) habe ich nur zu Testzwecken eingebaut.
Die Codezeile ist überflüssig.

Gruß
Ich
[-] Folgende(r) 1 Nutzer sagt Danke an IchBinIch für diesen Beitrag:
  • Wiiinnniii
Top
#5
Danke für diesen Code, ja genau das möchte ich machen, leider kommt beim Ausführen des Makros die Fehlermeldung: "Typen unverträglich" Sad
Top
#6
(17.08.2016, 15:05)Wiiinnniii schrieb: Danke für diesen Code, ja genau das möchte ich machen, leider kommt beim Ausführen des Makros die Fehlermeldung: "Typen unverträglich" Sad

und: "Laufzeitfehler 13"
Top
#7
Hallo Winni,

also bei mir lief das^^.

Das ist das Problem für uns Helfer wenn keine Beispieldatei zur Hand ist :32:.

Gruß
Ich
Top
#8
(17.08.2016, 11:54)IchBinIch schrieb: Hallo Winni,

mal als Test. Schau mal ob Du damit arbeiten könntest:

Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEFG
1Hugo2500   Thomas2100
2Thomas2100     
3Thomas2100     
4Lukas1600     
5Hugo2500     
6Hans1400     
7Lukas1600     
8Hugo2500     
9Jonas1100     
10Sarah1200     
11Hugo2500     
12Hans1400     
13Thomas2100     
14Lukas1600     

In ein Modul packst Du den folgenden Code


Code:
Sub Suchen()

Dim i As Long
Dim Treffer As Range
Dim strBegriff As String

With Tabelle1
strBegriff = .Range("F1").Value

Set Treffer = Range("A1")

For i = 1 To WorksheetFunction.CountIf(Columns(1), strBegriff)

   Set Treffer = Columns(1).Find(What:=strBegriff, After:=Treffer, _
       LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
       SearchDirection:=xlNext, MatchCase:=False)

    If Not Treffer Is Nothing Then
     Treffer.Offset(0, 1).Value = .Range("G1").Value
     Treffer.Interior.ColorIndex = 6
    End If
   
Next i
End With

End Sub

In F1 gibst Du den zu suchenden Namen ein. In G1 den Wert.
Das Makro sucht nach dem Namen und schreibt hinter alle Treffer den Wert aus G1.
Das Einfärben der Treffer (Treffer.Interior.ColorIndex = 6) habe ich nur zu Testzwecken eingebaut.
Die Codezeile ist überflüssig.

Gruß
Ich

Wenn ich anstatt

Code:
With Tabelle1


Code:
With Sheets("Tabelle1")
schreibe verschwindet zwar die Fehlermeldung, es tut sich aber am Ergebnis nix ...
Top
#9
(17.08.2016, 15:24)IchBinIch schrieb: Hallo Winni,

also bei mir lief das^^.

Das ist das Problem für uns Helfer wenn keine Beispieldatei zur Hand ist :32:.

Gruß
Ich

OK Danke !   Wenns bei Dir lief muß ich hier bei mir auf Fehlersuche gehen !
Top
#10
Wie gesagt...

Bei mir lief's. Kannst Du gerne selbst testen.


.xlsm   Winni.xlsm (Größe: 21,42 KB / Downloads: 5)
[-] Folgende(r) 1 Nutzer sagt Danke an IchBinIch für diesen Beitrag:
  • Wiiinnniii
Top


Gehe zu:


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