формула в макросе - SUM (VLOOKUP)

Автор Anton Stasenko, 10.06.2011, 09:42

« назад - далее »

Anton Stasenko

Добрый день, если кто поможет – буду очень признателен, так как не могу сообразить, как реализовать следующую задачу в макросе: Надо просуммировать 7 ячеек в файле, который выгружается из бухгалтерской программы. Т.к. могут быть изменения в расположении и названии файла, то я вставил адрес через path и «захват» названия из другого листа. Проблема в том, что из-за ограничения в длине строки (1000 знаков) у меня не хватило места для выборки значения по 7 признаку. Моя формула получилась такой:
ActiveCell.FormulaR1C1 = _
    "=SUM(IFERROR(VLOOKUP(""  2711"",'" & ThisWorkbook.Path & "\[" & Sheets("IS").Range("B2").Value & "]" & "RivileB'!C1:C6,5,FALSE),""""), IFERROR(VLOOKUP(""  2712"",'" & ThisWorkbook.Path & "\[" & Sheets("IS").Range("B2").Value & "]" & "RivileB'!C1:C6,5,FALSE),""""), IFERROR(VLOOKUP(""  2713"",'" & ThisWorkbook.Path & "\[" & Sheets("IS").Range("B2").Value & "]" & "RivileB'!C1:C6,5,FALSE),""""), IFERROR(VLOOKUP(""  2714"",'" & ThisWorkbook.Path & "\[" & Sheets("IS").Range("B2").Value & "]" & "RivileB'!C1:C6,5,FALSE),""""), IFERROR(VLOOKUP(""  2715"",'" & ThisWorkbook.Path & "\[" & Sheets("IS").Range("B2").Value & "]" & "RivileB'!C1:C6,5,FALSE),""""), IFERROR(VLOOKUP(""  2716"",'" & ThisWorkbook.Path & "\[" & Sheets("IS").Range("B2").Value & "]" & "RivileB'!C1:C6,5,FALSE),""""), IFERROR(VLOOKUP(""  2717"",'" & ThisWorkbook.Path & "\[" & Sheets("IS").Range("B2").Value & "]" & "RivileB'!C1:C6,5,FALSE),""""))"
Значение признака №7 – «  2718». Если кто подскажет, как можно уйти от такой сумасшедшей формулы – буду рад узнать. Спасибо.

nilem

У меня формула нормально записалась (около 500 знаков)
Sub tyu()
Dim pth As String, X As String
pth = ThisWorkbook.Path & "\["
X = Sheets("IS").Range("B2").Value & "]RivileB'!C1:C6,5,0),0)"
ActiveCell.FormulaR1C1 = "=SUM(IFERROR(VLOOKUP(""  2711"",'" & pth & X & _
        ", IFERROR(VLOOKUP(""  2712"",'" & pth & X & _
        ", IFERROR(VLOOKUP(""  2713"",'" & pth & X & _
        ", IFERROR(VLOOKUP(""  2714"",'" & pth & X & _
        ", IFERROR(VLOOKUP(""  2715"",'" & pth & X & _
        ", IFERROR(VLOOKUP(""  2716"",'" & pth & X & _
        ", IFERROR(VLOOKUP(""  2717"",'" & pth & X & _
        ", IFERROR(VLOOKUP(""  2718"",'" & pth & X & ")"
End Sub

Еще можно примерно так:
Sub tyutyu()
Dim a$, poisk(), fnd As Range, i&, s#
poisk = Array("  2712", "  2713", "  2714", "  2715", "  2716", "  2717", "  2718")
a = ThisWorkbook.Path & "\" & Sheets("IS").Range("B2").Value
With GetObject(a)
    With .Worksheets("RivileB")
        For i = 0 To UBound(poisk)
            Set fnd = .Columns(1).Find(What:=poisk(i), LookAt:=xlWhole)
            If Not fnd Is Nothing Then s = s + fnd.Offset(, 4).Value
        Next
    End With
    .Close (False)
End With
[a1] = s
End Sub


Anton Stasenko

Спасибо nilem'у, оба варианта добавлю в свою коллекцию макросов.