none
Excel Формула не работает в скрипте... RRS feed

  • Общие обсуждения

  • Привет Всем,

     

    вопрос от начинающего. Вот пытаюсь написать VBS скрипт который бы разбирал лог файл. Почему то решил что мне это будет сделать удобнее всего в Экселе. В принципе все так и должно быть, но что то я застрял на реализации формулы. Файл у меня такого вида

     

    Name          Copies      Total

    Ivan                  2

    Andrey            6

    Ivan                  7

    Ivan                  78

    Andrey           4

    Sergey           1

    Sergey           89

    Masha            2

     

    Хочу в третий столбец посчитать общее количество по каждому имени (потом удалю второй столбец, потом удалю повторяющиеся строки - и буду иметь тотал по каждому пользователю). Делаю все по примеру http://www.microsoft.com/technet/scriptcenter/funzone/games/solution5.mspx

    Вот что получилось

     

    Const xlDescending = 2

    Const xlYes = 1

    Const xlDown = -4121

    Const xlPasteValues = -4163

    LogFile = "C:\TEST\Formula2.xls"

    Set objExcel1 = CreateObject("Excel.Application")

    objExcel1.Visible = True

    Set objWorkbook = objExcel1.Workbooks.Open(LogFile)

    Set objRange = objExcel1.Range("$A$1")

    objRange.End(xlDown).Activate

    intLastRow = objExcel1.ActiveCell.Row

    WScript.Echo intLastRow

    For i = 2 to intLastRow

    objExcel1.Cells(i, 3).Activate

    strFormula = "=SUMIF(R2C1" & ":R" & intLastRow & "С1" & ",R" & i & "C1" & R2C1 & ",R2С2:" & "R" & intLastRow & "C2)"

    objExcel1.Cells(i, 3).FormulaR1C1 = strFormula

    Next

     

    Не работает ! Стоит только поменять формулу на какуюнибудь попроще, ну скажем на

    strFormula = "=R2C2*R3C2"

    и все начинает работать - в чем тут дело ?

    10 ноября 2008 г. 15:53

Все ответы

  • Если вы затеяли это в Excele, то что вам мешает применить сортировку к столбцу Имя и затем расчитать промежуточные итоги? Получите результат без строчки кода.

    10 ноября 2008 г. 18:51
  • Вот код который у тебя будет работать

    только очень важно чтоб данные в 1-м стобце были идентичные

     

    k = 2
    Do While Len(Worksheets("Лист1").Cells(k, 1).Value) > 0
    k = k + 1
    Loop
    For i = 2 To k
      SUM1 = Worksheets("Лист1").Cells(i, 2).Value
      PK = Worksheets("Лист1").Cells(i, 1).Value
    LK1 = Len(Trim(PK))
    If LK1 > 0 Then
        For j = i + 1 To k
        If PK = Worksheets("Лист1").Cells(j, 1).Value And Len(Worksheets("Лист1").Cells(j, 1).Value) > 0 Then
        SUM1 = SUM1 + Worksheets("Лист1").Cells(j, 2).Value
        Worksheets("Лист1").Cells(j, 1).Value = " "
        Worksheets("Лист1").Cells(j, 2).Value = " "
        End If
        Next
        MK1 = "+" + PK
    Worksheets("Лист1").Cells(i, 1).Value = IIf(Len(Worksheets("Лист1").Cells(i, 1).Value) > 0, MK1, "")
    Worksheets("Лист1").Cells(i, 3).Value = IIf(Len(Worksheets("Лист1").Cells(i, 1).Value) > 0, SUM1, " ")
    End If
    Next
    10 ноября 2008 г. 23:47
  •  

    Андрей, спасибо за ответ. Я хочу сделать скрипт который можно было бы запускать по расписанию каждый день , и чтобы этот скрипт делал все автоматически - то есть совсем без кода никак не получится. Как это реализавать и какие конкретные способы использовать - в принципе все равно, лишь бы результат был. Мне показалось что проще всего сделать то что я описал выше - то есть с SUMIF. Непонятно только почему эта функция не работает в скрипте ! Я подозреваю что реализация Вашего способа через скрипт бедет не легче, так как требует исаользования похожих формул (Вы имели в виду SUBTOTAL ?)
    11 ноября 2008 г. 9:14
  •  Slaide написано:

    только очень важно чтоб данные в 1-м стобце были идентичные

     

    Спасибо за оответ, но в том то и дело что в первом столбце данные не идиентичные - там набор помторяющихся имен. Сколько каждое имя повторяется - неизвестно. Любое имя может и не встречаться.

    11 ноября 2008 г. 9:19
  • на счет по расписанию это Sheduled Tasks

    на счет количество строк оно может быть переменным

    на счет идентичных данных я имел в виду то чтоб повторяющиеся данные были одинаковы

    1 ivan

    2 Adrey

    .

    .

    .

    . ivan

    . Ivan

     

    а код который я кинул, проверен работает прекрасно

    11 ноября 2008 г. 23:05