Supportnet / Forum / Tabellenkalkulation
Excel-Makro
Frage
hallo
ich bräuchte hilfe bei einem Makro in Excel
eine Schleife soll eine Spalte durchlaufen und bei allen gleichnahmigen Zellen, Werte addieren. Die Werte befinden sich eine Spalte weiter links
zB
| Spalte 1 | Spalte 2 |
| 4 | Name 1 |
| 2 | Name 3 |
| 3 | Name 1 |
| 1 | Name 2 |
also
Name 1 = 7
Name 2 = 1
Name 3 = 2
die ergebnisse am Besten in eine neue Tabelle in der selben Datei schreiben
Wäre für jegliche Hilfe dankbar
Antwort 1 von Saarbauer
Hallo,
wäre ohne Makro mit Summewenn() zu machen
Gruß
Helmut
wäre ohne Makro mit Summewenn() zu machen
Gruß
Helmut
Antwort 2 von finger59
Hallo,
falls es nicht unbedingt ein Makro sein soll, so wäre das zusammenzählen auch eine Sache, die man über die Pivottabelle lösen und in einem zweiten Tabellenblatt abbilden
könnte.
Sollte sich dann später noch Werte ändern, so kann man über aktualisieren die Datenwerte entsprechend anpassen.
In diesem Sinne... have a nice Day.... Gruß Helmut
falls es nicht unbedingt ein Makro sein soll, so wäre das zusammenzählen auch eine Sache, die man über die Pivottabelle lösen und in einem zweiten Tabellenblatt abbilden
könnte.
Sollte sich dann später noch Werte ändern, so kann man über aktualisieren die Datenwerte entsprechend anpassen.
In diesem Sinne... have a nice Day.... Gruß Helmut
Antwort 3 von Marvin123
Danke schonmal für die Hilfestellung, aber wie müsste dieses SumIf denn aussehen?
Bei Values kommen die Werte rein, aber wie sag ich dem, dass er nur die gleichen zusammenzählen soll?
Gruß
Bei Values kommen die Werte rein, aber wie sag ich dem, dass er nur die gleichen zusammenzählen soll?
Gruß
Antwort 4 von finger59
Hallo,
die Funktion summewenn habe ich deswegen nicht vorgeschlagen, da man jeden Suchwert einzeln vorgeben muss.
Der Formelaufbau für Summewenn wäre:
=summewenn(a1:b4;"Name 1";a1:a4)
Alternativ könnte natürlich auch statt "Name 1" b1 stehen.
In diesem Sinne... have a nice Day.... Gruß Helmut
die Funktion summewenn habe ich deswegen nicht vorgeschlagen, da man jeden Suchwert einzeln vorgeben muss.
Der Formelaufbau für Summewenn wäre:
=summewenn(a1:b4;"Name 1";a1:a4)
Alternativ könnte natürlich auch statt "Name 1" b1 stehen.
In diesem Sinne... have a nice Day.... Gruß Helmut
Antwort 5 von Marvin123
Ok dann kommt sumwenn nicht infrage, da ich nicht alle Werte kenne die in Spalte 2 stehen können. Ich würde die Problemstellung gerne mit einem Klick lösen können, deshalb wollte ich ursprünglich ein Makro.
Was ist eine pivot Tabelle eigentlich?
Hatte mit sowas noch nie zu tun.
Gruß
Was ist eine pivot Tabelle eigentlich?
Hatte mit sowas noch nie zu tun.
Gruß
Antwort 6 von finger59
upps...
noch eine Korrektur zu der Aussage mit dem Summewenn...
Der Suchbegriff muss links und der Wert rechts stehen!
In diesem Sinne... have a nice Day... Gruß Helmut
noch eine Korrektur zu der Aussage mit dem Summewenn...
Der Suchbegriff muss links und der Wert rechts stehen!
In diesem Sinne... have a nice Day... Gruß Helmut
Antwort 7 von finger59
Hallo,
da die Erklärung einer Pivottabelle hier zu aufwändig wäre, habe ich Dir mal einen Link eingefügt, der den Aufbau einer Pivottabelle beschreibt.
http://www.diesoftwareagentur.de/Microsoft/Office2003/Excel/Pivot-T...
Am Anfang sieht das viel und erschreckend aus, aber wenn man sich mal eingearbeitet hat, ist es eine feine Sache.
In diesem Sinne... have a nice Day... Gruß Helmut
da die Erklärung einer Pivottabelle hier zu aufwändig wäre, habe ich Dir mal einen Link eingefügt, der den Aufbau einer Pivottabelle beschreibt.
http://www.diesoftwareagentur.de/Microsoft/Office2003/Excel/Pivot-T...
Am Anfang sieht das viel und erschreckend aus, aber wenn man sich mal eingearbeitet hat, ist es eine feine Sache.
In diesem Sinne... have a nice Day... Gruß Helmut
Antwort 8 von Marvin123
Pivot tabellen sehen ziehmlich praktisch aus aber für diese Aufgabe wohl eher ungeeignet, da ich immer wieder Excel Datein aus einem anderem Programm ausgespuckt bekomme. Deshalb hätte ich am liebsten ein Makro, nur ich weiß eben noch nicht genau wie, da ich mit VB-Code unerfahren bin.
Meine Idee wäre es ja Spalte 2, Zeile für Zeile auszulesen und den Inhalt in ein Array zu speichern, die Werte werden in ein zweites Array gespeichert. Wenn ein Eintrag schon vorhanden ist wird der Wert einfach mit dem bereits vorhandenem addiert(Hier muss man aufpassen den richten bereits gespeicherten Wert zu treffen)
Nur leider hab ich keine Ahnung wie das in VB aussehen sollte...
Gruß und Danke an Alle, die mir bisher zu helfen versuchten
Meine Idee wäre es ja Spalte 2, Zeile für Zeile auszulesen und den Inhalt in ein Array zu speichern, die Werte werden in ein zweites Array gespeichert. Wenn ein Eintrag schon vorhanden ist wird der Wert einfach mit dem bereits vorhandenem addiert(Hier muss man aufpassen den richten bereits gespeicherten Wert zu treffen)
Nur leider hab ich keine Ahnung wie das in VB aussehen sollte...
Gruß und Danke an Alle, die mir bisher zu helfen versuchten
Antwort 9 von Marvin123
Falls das nicht realisierbar ist, bitte mir mitteilen
Gruß
Gruß
Antwort 10 von Marvin123
Da mir wohl niemand helfen will/kann, hab ich mal mit Hilfe des Internets was versucht
Funktioniert leider noch nicht richtig und ich brauche noch eine if bedingung das er Duplikate nicht erneut anzeigt.
Bitte helfen
Gruß
Sub chart()
Dim search As String
Dim found As Range
Dim length, count, num As Long
Dim address As String
Application.ScreenUpdating = False
length = Worksheets("load_table").UsedRange.Rows.count
For count = 10 To length
'if() Then
search = Worksheets("load_table").Cells(count, 11)
With Worksheets("load_table").Range("K1:K" & length)
Set found = .find(What:=search, LookIn:=xlValues)
If Not found Is Nothing Then
num = Sheets("load_table").Cells(found.Row, 10)
Sheets("load_table").Cells(found.Row, 11).Copy
Sheets("chart").Cells(Sheets("chart").Range("A65536").End(xlUp). _
Offset(1, 0).Row, 1).PasteSpecial Paste:=xlValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Do
Set found = .FindNext(found)
num = num + Sheets("load_table").Cells(found.Row, 10)
Loop While Not found Is Nothing And found.address <> found.address
Sheets("chart").Cells(Sheets("chart").Range("B65536").End(xlUp). _
Offset(1, 0).Row, 2) = num
End If
End With
'End If
Next
End Sub
Funktioniert leider noch nicht richtig und ich brauche noch eine if bedingung das er Duplikate nicht erneut anzeigt.
Bitte helfen
Gruß
Antwort 11 von Marvin123
Sub chart()
Dim search As String
Dim found As Range
Dim length, count, num, fistfound As Long
Dim address As String
Application.ScreenUpdating = False
length = Worksheets("load_table").UsedRange.Rows.count
For count = 10 To length
'if() Then
search = Worksheets("load_table").Cells(count, 11)
With Worksheets("load_table").Range("K1:K" & length)
Set found = .find(What:=search, LookIn:=xlValues)
If Not found Is Nothing Then
num = Sheets("load_table").Cells(found.Row, 10)
Sheets("load_table").Cells(found.Row, 11).Copy
Sheets("chart").Cells(Sheets("chart").Range("A65536").End(xlUp). _
Offset(1, 0).Row, 1).PasteSpecial Paste:=xlValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
firstfound = found.address
Do
Set found = .FindNext(found)
num = num + Sheets("load_table").Cells(found.Row, 10)
Loop While Not found Is Nothing And found.address <> firstfound
Sheets("chart").Cells(Sheets("chart").Range("B65536").End(xlUp). _
Offset(1, 0).Row, 2) = num
End If
End With
'End If
Next
End Subblöder Fehler, jetzt funktioniert es und es fehlt nurnoch die Bedingung das er nicht immer alle Duplikate extra bearbeitet
Antwort 12 von Marvin123
Sub chart()
Dim search As String
Dim found As Range
Dim length, length2, count, num, fistfound As Long
Dim address As String
Application.ScreenUpdating = False
length = Worksheets("load_table").UsedRange.Rows.count
length2 = Worksheets("chart").UsedRange.Rows.count
For count = 10 To length
search = Worksheets("load_table").Cells(count, 11)
With Worksheets("chart").Range("A1:A" & length2)
Set found = .find(What:=search, LookIn:=xlValues)
End With
If found Is Nothing Then
search = Worksheets("load_table").Cells(count, 11)
With Worksheets("load_table").Range("K1:K" & length)
Set found = .find(What:=search, LookIn:=xlValues)
If Not found Is Nothing Then
num = Sheets("load_table").Cells(found.Row, 10)
Sheets("load_table").Cells(found.Row, 11).Copy
Sheets("chart").Cells(Sheets("chart").Range("A65536").End(xlUp). _
Offset(1, 0).Row, 1).PasteSpecial Paste:=xlValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
firstfound = found.address
Do
Set found = .FindNext(found)
num = num + Sheets("load_table").Cells(found.Row, 10)
Loop While Not found Is Nothing And found.address <> firstfound
Sheets("chart").Cells(Sheets("chart").Range("B65536").End(xlUp). _
Offset(1, 0).Row, 2) = num
End If
End With
End If
length2 = Worksheets("chart").UsedRange.Rows.count
Next
End Sub
so bin fertig
jetzt bräuchte ich noch eine kleine erweiterung der mir von den werten in Tabellenblatt "chart" ein Balkendiagramm erstellt.
Antwort 13 von Marvin123
Sub chart()
Dim search As String
Dim found As Range
Dim length, length2, count, num, fistfound As Long
Dim address As String
Application.ScreenUpdating = False
length = Worksheets("load_table").UsedRange.Rows.count
length2 = Worksheets("chart").UsedRange.Rows.count
For count = 10 To length
search = Worksheets("load_table").Cells(count, 11)
With Worksheets("chart").Range("A1:A" & length2)
Set found = .find(What:=search, LookIn:=xlValues)
End With
If found Is Nothing Then
search = Worksheets("load_table").Cells(count, 11)
With Worksheets("load_table").Range("K1:K" & length)
Set found = .find(What:=search, LookIn:=xlValues)
If Not found Is Nothing Then
num = Sheets("load_table").Cells(found.Row, 10)
Sheets("load_table").Cells(found.Row, 11).Copy
Sheets("chart").Cells(Sheets("chart").Range("A65536").End(xlUp). _
Offset(1, 0).Row, 1).PasteSpecial Paste:=xlValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
firstfound = found.address
Do
Set found = .FindNext(found)
num = num + Sheets("load_table").Cells(found.Row, 10)
Loop While Not found Is Nothing And found.address <> firstfound
Sheets("chart").Cells(Sheets("chart").Range("B65536").End(xlUp). _
Offset(1, 0).Row, 2) = num
End If
End With
End If
length2 = Worksheets("chart").UsedRange.Rows.count
Next
Sheets("chart").Select
Charts.Add
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("chart").Range("A2:B10"), PlotBy:= _
xlRows
ActiveChart.Location Where:=xlLocationAsObject, Name:="chart"
With ActiveChart
.HasAxis(xlCategory, xlPrimary) = False
.HasAxis(xlValue, xlPrimary) = True
End With
ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic
End Sub
keine Ahnung warum ich eigentlich hier reinschreibe....
Hier ist jedenfalls ein Makro von MIR, das ein Sheet nach Duplikaten durchsucht und Werte die sich daneben befinden addiert. Diese werden in sheet 2 ausgegeben und ein Diagramm wird erstellt

