Для каждого L oop в Google Sheets? VBA для примера - PullRequest
1 голос
/ 07 января 2020

На рисунке 1 зеленая ячейка означает столбец с формулой. Единственные столбцы, которые я хочу суммировать в строке 13, - это столбцы, в которых нет формул, и столбцы, которые = «первоначальные затраты» и объединены со строкой 10. Таким образом, на рисунке 1 ответом будет $ 97 (сумма из (A13: F13) - D13).

Изображение 1 enter image description here

VBA для рисунка 1 Пример

Sub test()
 Dim cl As Object, count As Double
    For Each cl In Sheets("Sheet1").Range("10:10")
        If cl.MergeCells Then
            If cl.Offset(3, 0).HasFormula = False And cl.MergeArea.Cells(1, 1).Value = "Upfront Costs" Then
                count = count + cl.Offset(3, 0).Value
            End If
        Else
            MsgBox count
            Exit Sub
        End If
    Next cl
End Sub

На рисунке 2, если "Авансовые затраты" были объединены из " B10: L10 "ответ будет $ 289 (сумма (B13: L13) - D13).

Изображение 2 PICTURE 2

В примере на рисунке 3, если «Первоначальные затраты» были объединены с «L10: N10», ответ составил бы 122 доллара США (сумма L13 : N13 ")

Изображение 3 enter image description here

Ответы [ 2 ]

2 голосов
/ 08 января 2020

Вы можете сделать так:

function fnct_sum() 
{
    var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
    var cl , count=0 ;
    var yourRange = sheet.getRange("10:10");
    for (var i = 1; i < yourRange.getNumColumns()+1; i++)
    {
        cl=yourRange.getCell(1, i);
        if (cl.isPartOfMerge())
        {
            Logger.log(cl.getMergedRanges()[0].getCell(1, 1).getValue());
            if (cl.offset(3, 0).getFormula()=="" && cl.getMergedRanges()[0].getCell(1, 1).getValue()=='Upfront Costs') 
            {
               count = count + cl.offset(3, 0).getValue();
            }

            else 
            {
               Logger.log (count);
               //break;
            }   
       }
    }
    Logger.log (count);
};
1 голос
/ 08 января 2020

Суммирующие ячейки ниже объединенного диапазона

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

function runTwo() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(10,1,1,sh.getLastColumn());
  if(rg.getMergedRanges()[0].getValue()=="Upfront Costs") {
    var mrg=rg.getMergedRanges()[0];
    var vA=sh.getRange(13,mrg.getColumn(),1,mrg.getWidth()).getDisplayValues()[0];
    var fA=sh.getRange(13,mrg.getColumn(),1,mrg.getWidth()).getFormulas()[0];
    var sum=0;
    vA.forEach(function(e,i){if(!fA[i]){sum+=Number(e);}})
    SpreadsheetApp.getUi().alert('Range: ' + mrg.getA1Notation() + ' Sum: ' + sum);
    return sum;
  }else{
    SpreadsheetApp.getUi().alert('Does not meet criteria');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...