2.5k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo zusammen,

folgendes Problem habe ich und komme nicht weiter. Ich hoffe, dass einer von euch eine Lösung weiß. Ich benötige für Excel 2007 ein Makro, dass mir folgende Funktionalität bietet:

In Tabelle 1 sind in Spalte A Namen hinterlegt. In den ersten Zeile sind Variablen hinterlegt (B1 bis H1), so dass sich eine Matrix mit den Namen und den Variablen ergibt. Die Werte der Matrix (also die Schnittpunkte zwischen Namen und Variablen) sind von dem Makro auszufüllen.
Die Werte für die Matrix befinden sich Tabelle 2 in einer Pivottabelle. In dieser Pivottabelle kann man in dem Feld B10 den Namen auswählen (Drop-Down-Menü) , dann in Feld B15 eine der Variablen der Matrix (Tabelle 1, Zeile B1 bis H1) und man erhält als Reslutat einen Wert in D17. Dieser Wert aus D17 soll in die Matrix in Tabelle 1 eingetragen werden.
Hat jemand einen Vorschlag wie man dies mittels Makro durchführen könnte? Könnt ihr meine Problemstellung nachvollziehen?

Gruß

6 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

wenn ich Dich richtig verstanden habe, müsste folgender Code funktionieren, den Du in den Codebereich von Tabelle2 kopierst.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strN As String, strV As String
If Not Intersect(Target, Range("B15")) Is Nothing Then
strN = Range("B10").Value
strV = Range("B15").Value
Worksheets("Tabelle1").Cells(WorksheetFunction.Match(strN, Worksheets("Tabelle1") _
.Range("A:A"), 0), WorksheetFunction.Match(strV, Worksheets("Tabelle1") _
.Range("A1:H1"), 0)) = Range("D17").Value
End If
End Sub


Du wählst zuerst den Namen in B10 und dann die Variable in B15 aus.

Gruss
Rainer

Gruss
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo noch mal,

anbei noch eine Optimierung des Codes

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B15")) Is Nothing Then
With Worksheets("Tabelle1")
.Cells(WorksheetFunction.Match(Range("B10").Value, .Range("A:A"), 0), _
WorksheetFunction.Match(Range("B15").Value, .Range("A1:H1"), 0)) _
= Range("D17").Value
End With
End If
End Sub


Gruss
Rainer
0 Punkte
Beantwortet von
Hi,

leider bekomme ich den Code nicht zum laufen. Ich erstelle zwar das Makro erfolgreich, jedoch erscheint es dann nicht in Excel unter den möglichen auszuführenden Makros...

Warum, keine Ahnung? Kannst du mir da helfen?

Gruß
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

wie ich schon schrieb, der Code gehört in den Code-Bereich der Tabelle 2.

jedoch erscheint es dann nicht in Excel unter den möglichen auszuführenden Makros


dort kann er auch nicht erscheinen, da es sich um ein Worksheet_Change-Ereignis handelt, welches durch Zelleingaben ausgelöst wird.

In Deinem Falle, und das schrieb ich auch,

Du wählst zuerst den Namen in B10 und dann die Variable in B15 aus.


also durch die Wahl einer Variable in Zelle B15.

Wenn Du nicht klar kommst, kannst Du Deine Datei hier uploaden und den Download-Link hier posten.

Gruss
Rainer
0 Punkte
Beantwortet von
Hi,

erstmal vielen Dank für deine Mühen!

Ich benötige aber ein Makro, dass ich einmal anstoße und das dann automatisch alle Werte der Matrix ausfüllt. Also das folgendes tut:
-nimm A1 (Tabelle 1) und gib es in die Pivottabelle in B10 (Tabelle 2) ein
-nimm B1 (Tabelle 1) und gib es in die Pivottabelle in B15 (Tabelle 2) ein
-dann nimm den Wert aus D17 (Tabelle 2) und kopiere ihn in die Matrix in Tabelle 1 (Feld: Schnittpunkt von A1 und B1
-dann nimm C1 und gib es in B 15 ein. Der dann erscheinende Wert aus D17 (Tabelle 2) wird in den Schnittpunkt von A1 und C1 eingetragen.
-fortführen bis H1 und dann das ganze erneut nur mit den Werten aus A2.

Ich weiß, ist sehr schwierig, aber ich schaff es leider nicht :-(

Gruß
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

genau das macht mein Makro, aber eben nur durch Handeingaben in B10 und B15.

Das zu automatisieren, erfordert eine Testumgebung, die nur Du liefern kannst.

Es nützt aber nichts, wenn Du weitere Beschreibungen dazu abgibst, denn zum Eigenbau einer Testumgebung habe ich weder Lust noch Zeit.

Gruss
Rainer
...