Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zellen abhängig kopieren/berechnen

Zellen abhängig kopieren/berechnen
26.07.2022 11:27:25
Gunnar
Hallo,
absoluter VBA-Noob hier, sorry. Keine Ahnung von Excelmakros, muss da aber durch:
Ich muss Daten aus einer Tabelle ("Tabelle1") in eine andere ("Report") im selben Worksheet kopieren.
Dabei gibt es allerdings ein paar Bedingungen und Berechnungen, die ich mal in mehrere Schritte hier aufteile:
1) WENN Zellinhalt in Report Spalte B = Zellinhalt Tabelle1 Spalte F UND Zellinhalt Tabelle1 Spalte E = "min" DANN kopiere Zellinhalt Tabelle 1 Spalte C nach Report Spalte C
Das scheint mir noch relativ einfach möglich zu sein, und das Ganze dann ganz leicht abgewandelt für "max", "Treshold" und "CountAll" zu wiederholen sollte kein großes Problem sein.
dann aber
2) In Report Spalte H soll nur die Anzahl der Werte aus Tabelle 1 rein, für die gilt:
Zellinhalt in Report Spalte B = Zellinhalt Tabelle1 Spalte F UND Zellinhalt Tabelle1 Spalte E = "outlier"
(also wenn es in Tabelle1 für "irgendeinText NummerEins" 15 Einträge mit Type=outlier gibt, dann soll da bei "Report" nur eine 15 stehen.
und weiter mit
3) In Report Spalte E soll der durchschnittliche Wert aller Zellen stehen, für die gilt:
Zellinhalt in Report Spalte B = Zellinhalt Tabelle1 Spalte F UND Zellinhalt Tabelle1 Spalte E ~= "AVGDAY_%"
(also bei allem, was in Spalte E von Tabelle1 mit "AVGDAY_" anfängt und den gleichen "irgendeinText..." hat, sollen die Werte addiert und durch die Anzahl geteilt werden)
Eine Beispieldatei hänge ich mal an.
https://www.herber.de/bbs/user/154381.xlsm

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Teil-Lösung...
26.07.2022 12:33:34
MCO
Hallo Gunnar!
Fang damit mal an.

Sub Datenübertragung()
'WENN Zellinhalt in Report Spalte B = Zellinhalt Tabelle1 Spalte F UND Zellinhalt Tabelle1 Spalte E = "min" DANN kopiere Zellinhalt Tabelle 1 Spalte C nach Report Spalte C
With Sheets("Report")
For Each rw In .Range("B2:B" & .UsedRange.Rows.Count).SpecialCells(xlConstants)
If rw = Sheets("Tabelle1").Cells(rw, "F") Then
Select Case Sheets("Tabelle1").Cells(rw, "E")
Case "min": Spalte = "C"
Case "max": Spalte = "D"
'Case "AVGDAY_19": Spalte = "E"
Case "Treshold": Spalte = "F"
Case "Countall": Spalte = "G"
Case "Countall": Spalte = "H"
End Select
Sheets("Tabelle1").Cells(rw, "C").Copy .Cells(rw, Spalte)
Next rw
End With
End Sub
Formel fehlt noch dazu, die sollte vielleicht so aussehen: =SUMMEWENNS(--(Tabelle1!C:C"");Tabelle1!F:F;B2;links(Tabelle1!E:E;6);"AVGDAY")
Leider funktioniert sie aber noch nciht....
SUMMENPRODUKT hieß die Funktion, die das früher mal abgebildet hat....
Viel Erfolg!
Gruß. MCO
Anzeige
AW: Zellen abhängig kopieren/berechnen
26.07.2022 13:13:34
Gunnar
Hat sich erledigt... war doch einfacher als gedacht :)
Lösung wäre (wenn auch recht lang laufend):
(und ja: Ich habe mich schamlos hier und in anderen Foren "bedient" :) danke an alle, die Ihren Code gepostet hatten)

Sub ImportKPI()
Dim sFile As String
Dim lngLetzte As Long
Dim lngQuelle As Long
Dim lngStartLetzte As Long
Dim lngStart As Long
Dim cntOutlier As Long
Dim sumAVG As Long
Dim cntAVG As Long
Range("A:L").ClearContents
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.InitialFileName = ActiveWorkbook.Path & "\"
If .Show = -1 Then
sFile = .SelectedItems(1)
Else
'Abbrechen falls keine Datei ausgewählt
MsgBox "Keine Daten zum Import ausgewählt!", , "Abbruch"
Exit Sub
End If
End With
If sFile  "" Then
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & sFile, Destination:=Range("A1"))
.Name = "Importdatei"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 1252
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(2, 1, 2, 2, 2, 2)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
Columns("B:B").Select
Selection.NumberFormat = "d/m/yy h:mm;@"
'Zahlen auch als Zahlen darstellen:
With Worksheets("Tabelle1").Columns("C")
.NumberFormat = "General"
.Value = .Value
End With
With Worksheets("Report")
' letzte benutzte Zeile in Spalte B
lngStartLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 2)), .Cells(.Rows.Count, 2).End(xlUp).Row, .Rows.Count)
For lngStart = 2 To lngStartLetzte
cntOutlier = 0
sumAVG = 0
cntAVG = 0
With Worksheets("Tabelle1")
' letzte benutzte Zeile in Spalte I
lngLetzte = IIf(IsEmpty(.Cells(.Rows.Count, 6)), .Cells(.Rows.Count, 6).End(xlUp).Row, .Rows.Count)
' Schleife über alle Zeilen von 1 bis zur letzten ermittelten Zeile
For lngQuelle = 1 To lngLetzte
' laufende Zelle in F ist nicht leer
If .Cells(lngQuelle, 6) = Worksheets("Report").Cells(lngStart, 2) And .Cells(lngQuelle, 5) = "min" Then
'kopieren nach Report Zielzelle
.Cells(lngQuelle, 3).Copy Worksheets("Report").Cells(lngStart, 3)
'und den treshold direkt noch mit:
.Cells(lngQuelle, 4).Copy Worksheets("Report").Cells(lngStart, 6)
End If
If .Cells(lngQuelle, 6) = Worksheets("Report").Cells(lngStart, 2) And .Cells(lngQuelle, 5) = "max" Then
'kopieren nach Report Zielzelle
.Cells(lngQuelle, 3).Copy Worksheets("Report").Cells(lngStart, 4)
End If
If .Cells(lngQuelle, 6) = Worksheets("Report").Cells(lngStart, 2) And .Cells(lngQuelle, 5) = "CountAll" Then
'kopieren nach Report Zielzelle
.Cells(lngQuelle, 3).Copy Worksheets("Report").Cells(lngStart, 7)
End If
If .Cells(lngQuelle, 6) = Worksheets("Report").Cells(lngStart, 2) And .Cells(lngQuelle, 5) = "outlier" Then
'outlier hochzaehlen
cntOutlier = cntOutlier + 1
End If
If .Cells(lngQuelle, 6) = Worksheets("Report").Cells(lngStart, 2) And .Cells(lngQuelle, 5).Value Like "AVGDAY_*" Then
'outlier hochzaehlen
If .Cells(lngQuelle, 3).Value  "NaN" Then
cntAVG = cntAVG + 1
sumAVG = sumAVG + .Cells(lngQuelle, 3).Value
End If
End If
Next lngQuelle
Worksheets("Report").Cells(lngStart, 8) = cntOutlier
If sumAVG  0 Then
Worksheets("Report").Cells(lngStart, 5) = sumAVG / cntAVG
Else
Worksheets("Report").Cells(lngStart, 5) = "NaN"
End If
End With
Next lngStart
'Zahlen auch als Zahlen darstellen:
With Worksheets("Report").UsedRange
.NumberFormat = "General"
.Value = .Value
End With
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige