Multiple AverageIf in Excel


1

Ich habe ein Excel-Datenblatt mit vielen, vielen Zeilen, das ungefähr so ​​aussieht

C1    C2    Value
---   ---   -----
 A     C    0.228
 B     D    0.234
 A     D    0.359
 A     C    0.125
...

Ich möchte den Durchschnitt von Valuewhere C1= Aund C2= ermitteln D. Wie gehe ich am besten vor? Ich kenne die AVERAGEIFund COUNTIFund SUMIFFunktionen, aber sie scheinen nicht mit mehreren Bedingungen zu funktionieren ...


Ich würde vorschlagen, eine Formel anzugeben, die Sie ausprobiert haben, und vielleicht kann jemand darauf hinweisen, wo das Problem liegt.
Darius

Antworten:


4

In Excel 2007 und höher können Sie die Funktion AVERAGEIFS wie folgt verwenden:

=AVERAGEIFS(C2:C5, A2:A5, "A", B2:B5, "D")

1

Sie können immer die eingebaute VBA-Sprache verwenden. Ich habe es gerade versucht und es funktioniert - YMMV.

Gehen Sie zu Extras | Makro | Visual Basic Editor.

Ein neues Fenster wird geöffnet.

Gehen Sie zu Extras | Verweise. Aktivieren Sie das Kontrollkästchen neben Microsoft ActiveX Data Objects 2.5-Bibliothek auswählen. OK klicken.

Doppelklicken Sie in der Liste links auf Sheet1. (Der Projekt-Explorer) - Ihr Blatt kann einen anderen Namen haben.

Kopieren Sie den folgenden Code und fügen Sie ihn in das Codefenster ein (das Fenster mit den beiden Dropdown-Listen oben).

Sehen Sie sich die markierte Zeile unten an - bearbeiten Sie sie, um sicherzustellen, dass Sie den vollständigen Pfad zu Ihrer Excel-Arbeitsmappe definieren. dh:

sXLSFile = "s:\brad\book1.xls"

Klicken Sie im Menü Ausführen auf die Option Unter- / Benutzerformular ausführen (F5).

Wenn alle Werte gleich sind (!), Sollte ein Meldungsfeld mit dem Durchschnitt der ausgewählten Zeilen eingeblendet werden - siehe die zweite hervorgehobene Zeile, in der die Abfrage tatsächlich ausgeführt wird.

.Open "**select avg(value) from [sheet1$] where c1='A' and c2='D'**"

Sie müssen nur die obige Zeile ändern, um die Abfrage zu ändern - z. B. wenn Sie den Durchschnitt mit C1 = "B" und C2 = "A" möchten.

Sub Main()

    Dim sXLSFile As String
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    ' set the location of the Excel worksheet
    **sXLSFile = "s:\brad\book1.xls"**
    Set cn = New ADODB.Connection
    With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & sXLSFile & ";Extended Properties=Excel 8.0;"
        .Open
    End With

    If Not cn Is Nothing Then
        Set rs = New ADODB.Recordset
        With rs
            Set .ActiveConnection = cn
            .Open "**select avg(value) from [sheet1$] where c1='A' and c2='D'**"
            MsgBox "The average is: " & rs(0)
        End With

    End If

    If Not rs Is Nothing Then
        If rs.State = adStateOpen Then
            rs.Close
        End If
    End If
    Set rs = Nothing

    If Not cn Is Nothing Then
        If cn.State = adStateOpen Then
            cn.Close
        End If
    End If
    Set cn = Nothing

End Sub

Ich hoffe, das hilft!

Referenz: http://support.microsoft.com/kb/257819


Deshalb sollten mehr Schulen Basic unterrichten. Jeder Friggin benutzt Office. . .
Surfasb

@surfasb Und jeder Friggin benutzt Office unter Windows in einer Umgebung, in der Makros nicht als gefährlich eingestuft werden ;-)
digitxp

@digitxp - lol! aber du hast recht. :)
Bradzo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.