1

У меня есть лист данных Excel с большим количеством строк, который выглядит примерно так

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

Я хочу найти среднее Value где C1 = A и C2 = D , как лучше это сделать? Я знаю о AVERAGEIF и функции COUNTIF и SUMIF но они , кажется, не работать с несколькими условиями ...

2 ответа2

4

В Excel 2007 и более поздних версиях вы можете использовать функцию AVERAGEIFS, например, так:

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

Вы всегда можете использовать встроенный язык VBA. Я только что попробовал это, и это работает - YMMV.

Перейти в Инструменты | Макро | Редактор Visual Basic.

Откроется новое окно.

Перейти в Инструменты | Рекомендации. Установите флажок рядом с Выбрать библиотеку объектов Microsoft ActiveX 2.5. Нажмите Ok.

Дважды щелкните Sheet1 в списке слева. (Project Explorer) - ваш лист может быть назван как-то иначе.

Скопируйте и вставьте следующий код в окно кода (окно с двумя выпадающими списками вверху)

См. Выделенную строку ниже - отредактируйте ее, чтобы убедиться, что вы указали полный путь к своей книге Excel. то есть:

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

Щелкните меню «Выполнить», затем выберите параметр «Выполнить подчиненную / пользовательскую форму (F5)».

При прочих равных (!) Вы должны получить всплывающее окно со средним значением выбранных строк - см. Вторую выделенную строку ниже, которая фактически выполняет запрос.

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

Вам просто нужно изменить вышеприведенную строку, чтобы изменить запрос - например, если вы хотели получить среднее значение, где C1 = "B" и C2 = "A"

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

Надеюсь, это поможет!

Ссылка:http://support.microsoft.com/kb/257819

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .