Filter für Zeilenwert Addition

  • #1
H

Hudson

Bekanntes Mitglied
Themenersteller
Dabei seit
14.04.2005
Beiträge
146
Reaktionspunkte
0
Hallo Ihr,

(aber wahrscheinlich besonders zu Matjes  ;) )

ich habe eine gut gefüllte Excel Tabelle in der ich unterschiedliche aber immer wieder und vorallem häufig vorkommende Werte anhand 2er Spalten benötige.
D.h. ich habe meine Such-Spalte, die ich z.Zt noch manuell nach unten scrollen muss und jedesmal wenn mein gesuchter Wert auftaucht, anhalte und eine Summe bestimmter Werte einer Zeile bilden muss.
Bsp.: 1/A-Z mit Überschriften belegt.
         die Spalte F ist wichtig für meine Werte. die scroll ich jetzt runter (ca3000Zeilen) und nach ca 30 Zeilen taucht wieder so ein Wert auf.
Dort bleib ich stehen (zB. F/30) und summiere die Werte (G-M/30) auf und lasse diese dann in F/3000 anzeigen. (Scroll-Arbeit! :tickedoff: ) Jetzt muss ich aber wieder hoch nach der nächsten Zeile in der F spalte suchen, diese Werte der zeile (zB. von F/62) dann addieren und in F/3001 anschreiben um dann F/3000+F/3001 einzugeben. Und das ganze jetzt dann die ganze Zeit!!!!!

Brauche so eine Art Filter auf eine Spalte der mir dann gleich die Werte, aus der Zeile, in der die Zelle mit SuchWert gefunden wurde, aus gewünschten Spalten addiert und das ganze sooft bis alle Suchwerte gefunden wurden und das ganze in einer Zelle ausgibt?

Komplex? Noch eine Anmerkung hätte ich  ???
Kann man dem filter ein 2tes Suchkriterium geben das mit UND verknüpft wird?
Weil der Wert in Spalte F immer 2x vorkommt, nur differenziert durch eine Wertangabe in Spalte E. (die aber zu allgemein ist um nur nach der zu suchen: zB rechts und links!)
Also zuerst den Suchwert eingeben und dann die UND Bedingung aus Spalte E.
Möglich?

Wäre jedem Dankbar, der so ein ähnliches Problem schon mal hatte und wie er das gelöst hat!
Und ganz besonders nem Makro!

Vielen Dank (überhaupt erstmal zum Problem lesen ;) )

MFg
 
  • #2
Hallo Hudson,

also ich hab mir das mal angeschaut.

Würde zunächstmal die Such-Funktion gestalten und dann das Schreiben der Summen.

Also zunächst zur Suchfunktion:

a) Suchbereich von Zeile 2 bis 2999 (ab 3000 wird ja was eingetragen)
b) Suchspalte F:
Nach was wird gesucht ? Zeichenkette oder Zahl ?
Wie kann man alle relevanten Zeilen durch ein Suchmuster beschreiben ?
c) Suchspalte E (2.Kriterium)
Nach was wird gesucht ? Zeichenkette oder Zahl ?
Wie kann man alle relevanten Zeilen durch ein Suchmuster beschreiben ?
d) Gibt es irgendeine Abhängigkeit zwischen den bereits gefundenen Zeilen bzgl. den zu suchenden?
e) Könntest Du mit einem Autofilter alle relevanten Zeilen finden ?

Gruß Matjes :)

ps: wenn da nicht ganz unerwartete Schwierigkeiten auftauchen, dann drückst Du nächste Woche nur noch 2mal auf den Knopf. ;D
 
  • #3
Danke!!!!!

Ok ich muss das bissl konkretisieren.

Die Suchspalte (nenn die etz mal D, weil ich doch zN. im VB-Code statt nem D auch ein F mit entsprechenden Anpassungen schreiben kann) enthält eine BustabenZahl (zB. 123x) und der Filter darf nur in der Zeile anhalten in der der UND Wert aus Spalte C (auch eine Buchstaben Zahl: F01 (= Integer?!?)) übereinstimmt!
Jetzt soll das Makro einen Wert aus lesen und zwar aus einer Zelle die +3 Spalten und + 1 Zeile steht.
Ok klingt verwirrend also ein Bsp.:

Ich scroll D nach unten bis ich 123x finde; brauch mir aber gar nicht groß die Werte anzuschauen, weil in der Spalte C ein F02 steht...also weiter bis ich wieder 123x finde.
In Zeile D35 werd ich wieder fündig und in C35 steht F01-> Passt!
Jetzt geh ich in G36 und kopiere den Wert in die Zwischenablage.
Spiel von Vorn. Weiter nach 123x suchen, schauen ob F01 in der C Spalte steht, wenn ja +3 spalten + 1 Zeile, Wert der gefundenen Zelle kopieren. Das ganze solange bis ich D durchgesucht habe.
Wenn ich die vielen werte durch bin und hoffentlich keinen vergessen habe, bilde ich die Summe aller gefundenen werte in einer Zelle. Zb. in G3000 (feste Zellen zuweisung im Makro wäre doch ok? kann ich ja dann nach belieben Ändern? )

Ich hoffe man versteht hieraus dass das ganze eine augenanstrengende Sisyphus-arbeit ist :'(, und ein vergessener Wert die Hölle ist! diese Arbeit könnte mir gerne ein Makro abnehmen...hust...

(kann man auch im VB-Code angeben dass die Spalte D nur zwischen 500 und 1500 durchsucht werden soll?)
Auswahl über 2 ComboBoxen die sich auf die Such- bzw UND- Spalten beziehen?
Ich hoffe ich konnte ein bisschen mehr Klarheit bringen...

VIELEN DANK  :1



 
 
  • #4
Hallo Hudson,

ich hab dir einen Prototyp zusammengebaut.

a) Comboboxen sind zunächst durch Inputboxen ersetzt.
b) Die Zeilen, die du anpassen mußt, stehen oben im Makro und sind gekennzeichnet.

Funktionsweise:

Das Makro sammelt die von dir beschriebenen Daten zusammen und gibt sie in einer temp- Mappe aus (Zeile Fundort, Zeile tiefer gefundener Wert, Summe).

So kannst Du vergleichen, ob eine von dir von Hand berechnete Mappe mit dem Makro-Ergebnis übereinstimmt.


Gruß Matjes :)
Code:
Option Explicit

Private Type MyWerte_struct
  lZeile As Long
  dWert  As Double
End Type

'******************************************************************
Sub SuchenIn2SpaltenUndSpezSumme()

'< < < A N P A S S E N > > >
  Const cZ_ERSTESUCHZEILE = 2         ->muß >= 2 sein !!!
  Const cZ_LETZTESUCHZEILE = 2999
  Const cSP_SPALTE_FUER_SUCHBEGRIFF_1 = 6->entspricht F
  Const cSP_SPALTE_FUER_SUCHBEGRIFF_2 = 5->entspricht E
  Const cSP_SPALTE_FUER_SUMMANDEN = 8     'entspricht H
'< < < A N P A S S E N    E N D E > > >
  
  Dim wb As Workbook, ws As Worksheet
  Dim wbt As Workbook, wst As Worksheet
  Dim sSuchbeg1 As String, sSuchbeg2 As String
  
  
 ->Suchbegriffe abfragen
  sSuchbeg1 = InputBox( _
    Eingabe für Suchbegriff 1, Hudsons Erleichterung, )
  If sSuchbeg1 =  Then Exit Sub
   
  sSuchbeg2 = InputBox( _
    Eingabe für Suchbegriff 2, Hudsons Erleichterung, )
    
 ->Nachfrage, ob Suchbegriffe i.O.
  If Not vbYes = MsgBox( _
    Folgende Suchbegriffe wurden eingegeben: & vbLf & _
    Suchbegriff1:  & sSuchbeg1 & vbLf & _
    Suchbegriff2:  & sSuchbeg2 & vbLf & vbLf & _
    Fortgefahren ??? , _
    vbYesNo + vbQuestion + vbDefaultButton1) Then Exit Sub

 ->aktive Mappe/Blatt
  Set wb = ActiveWorkbook: Set ws = ActiveSheet
  
 ->temp. Mappe anlegen
  Set wbt = Workbooks.Add: Set wst = wbt.Worksheets(1)
  
  Call SoTunAlsOb(ws, wst, _
                  sSuchbeg1, cSP_SPALTE_FUER_SUCHBEGRIFF_1, _
                  sSuchbeg2, cSP_SPALTE_FUER_SUCHBEGRIFF_2, _
                  cZ_ERSTESUCHZEILE, cZ_LETZTESUCHZEILE, _
                  cSP_SPALTE_FUER_SUMMANDEN)
  
    
AUFRAEUMEN:
  wbt.Activate
  Set wb = Nothing: Set ws = Nothing
  Set wbt = Nothing: Set wst = Nothing
End Sub

'******************************************************************
Function SoTunAlsOb(ws As Worksheet, wst As Worksheet, _
                    sSB1 As String, lSP1 As Long, _
                    sSB2 As String, lSP2 As Long, _
                    lZAnf As Long, lZEnd As Long, _
                    lSPWert As Long)

  Dim r As Range, Zelle As Range
  Dim lZA As Long, lZE As Long
  Dim fW() As MyWerte_struct, fWCnt As Long
  Dim x As Long, lZtCnt As Long, dWert As Double, dGesSum As Double
    
  lZA = lZAnf - 1
  lZE = lZEnd
  fWCnt = 0: ReDim fW(1 To 100)
  
 Do
  
    If lZA < lZE Then
      Set r = ws.Range(ws.Cells(lZA, lSP1), ws.Cells(lZE, lSP1))
      Set Zelle = r.Find( _
                    What:=sSB1, _
                    After:=ws.Cells(lZA, lSP1), _
                    LookIn:=xlValues, _
                    LookAt:=xlWhole, _
                    SearchDirection:=xlPrevious)
      
      If Zelle Is Nothing Then Exit Do
      
      If sSB2 = ws.Cells(Zelle.Row, lSP2).Value Then
       ->*** Zeile mit Suchbegriff1 und 2 gefunden

       ->Summanden aus der nächsten Zeile lesen
        dWert = ws.Cells(Zelle.Row + 1, lSPWert).Value
        
       ->In Feld merken
        fWCnt = fWCnt + 1
        If UBound(fW()) < fWCnt Then ReDim Preserve fW(1 To fWCnt + 100)
        fW(fWCnt).lZeile = Zelle.Row
        fW(fWCnt).dWert = dWert
        
      End If
  
      lZE = Zelle.Row - 1
    Else
      Exit Do
    End If
  Loop
  
 ->gemerkte Werte auf tmp. Workbook ausgeben
 ->Überschriften in tmp. Workbook
  lZtCnt = 1
  wst.Cells(lZtCnt, 1).Value = Zeile
  wst.Cells(lZtCnt, 2).Value = Wert
  wst.Cells(lZtCnt, 3).Value = Summe
  dGesSum = 0#
  For x = fWCnt To 1 Step -1
    lZtCnt = lZtCnt + 1
    wst.Cells(lZtCnt, 1).Value = fW(x).lZeile
    wst.Cells(lZtCnt, 2).Value = fW(x).dWert
    dGesSum = dGesSum + fW(x).dWert
    wst.Cells(lZtCnt, 3).Value = dGesSum
  Next
  
AUFRAEUMEN:
  Set r = Nothing: Set Zelle = Nothing
End Function
 
  • #5
Hudsons Erleichterung, oooooooh JA! :D

Vielen Dank Matjes, Du bist genial!!!! :1

Arbeite jetzt an der Implementierung und werde Dir aufjedenfall noch ein Feedback schreiben!
(bin aber grad bissl ausgelastet, so dass ich eventuell erst übermorgen dazu komme)

Danke auch für Deine Mühen bezüglich der 'Beschreibungen mml (sind genial)

MFg
 
Thema:

Filter für Zeilenwert Addition

ANGEBOTE & SPONSOREN

Statistik des Forums

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