сумма номера строки ячейки, удовлетворяющей определенным условиям - PullRequest
0 голосов
/ 23 октября 2018

Мне просто интересно, как рассчитать это в vba:
Рассчитать первую сумму денег, если это да, но не рассчитать сумму, если это нет.Представьте, что есть четыре ячейки:

(cell 1) abcbc bcbcbcb cbcbcbc $1000/kskskksks/$2000//1222/1221/11/yes  
(cell 2) any words will be here $2300/heyhey hey/ //3232//3232/no  
(cell 3) kakjsak  dsdsk kdjskj 2323/ $23232/hhehe 22/33/333/yes  
(cell 4) kakaka kjsdkj ksjskjds kdjsjkdj 11 223 222/ $1121/ $2121/yes

Алгоритм состоит в том, чтобы проверить, является ли это да или нет.Затем в каждой строке найдите первые деньги, начиная с $, вторые деньги в той же строке не будут учитываться.

В этом примере программа будет учитывать $1000, поскольку онаэто да, вторая строка не будет выполнена, так как это нет.И третья ячейка будет брать первые деньги (первые $), $23232.Итак, программа составит $1000+$23232+$1121=$25353

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

При этом используется разделение для изоляции yes / no и InStr для определения местоположения первого символа валюты.

Sub sumYes()
    Dim i As Long, str As String, dbl As Double

    With Worksheets("Sheet10")
        For i = 2 To .Cells(.Rows.Count, "A").End(xlUp).Row
            str = LCase(.Cells(i, "A").Value2)
            If Split(str, "/")(UBound(Split(str, "/"))) = "yes" Then
                If CBool(InStr(1, str, Chr(36))) Then
                    dbl = dbl + Val(Mid(str, InStr(1, str, Chr(36)) + 1))
                End If
            End If
        Next i
        .Cells(2, "B") = dbl
    End With

End Sub

enter image description here

0 голосов
/ 23 октября 2018

Немного другой подход, использующий формулу массива Excel, при условии, что значения вашей ячейки не содержат конечных пробелов,

enter image description here

=SUM(IF(RIGHT(A1:A4,1)="s",MID(A1:A4,SEARCH("$",A1:A4)+1,SEARCH("/",A1:A4,SEARCH("$",A1:A4))-SEARCH("$",A1:A4)-1)*1,""))
0 голосов
/ 23 октября 2018

Полагаю, это именно то, что вам нужно, учитывая, что вы используете первый столбец для размещения каждого значения и имя вашего листа "Sheet1"

Sub SumFirstAmountIfYes()

    Dim AmountSum As Variant ' Declares the AmountSum

    lastRow = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row ' Finds the last used row on the first column

    For i = 1 To lastRow ' Iterates over the rows to the last row
        StringValue = Sheets("Sheet1").Cells(i, 1).Value2 ' Gets the value to a variable
        If StringValue Like "*yes" Then ' Checks if the string terminates with "yes"
            FirstDollar = InStr(StringValue, "$") ' Finds first dollar symbol "$"
            FirstSlashAfterDollar = InStr(FirstDollar, StringValue, "/", 0) ' Finds first slash "\" after the first dollar symbol

            FirstAmount = Mid(StringValue, FirstDollar + 1, FirstSlashAfterDollar - FirstDollar - 1) ' Gets the amount of each row

            AmountSum = AmountSum + CDec(FirstAmount) ' Adds to the sum variable each found amount
        End If
    Next

    MsgBox (AmountSum) ' Shows the final sum of the amounts

End Sub
...