首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >满足特定条件的单元格字符串的总和

满足特定条件的单元格字符串的总和
EN

Stack Overflow用户
提问于 2018-10-23 19:37:44
回答 3查看 103关注 0票数 2

我只是想知道如何在vba中计算:

如果是,则计算第一笔金额,如果为否,则不计算金额。假设有四个单元格:

代码语言:javascript
复制
(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

算法是检查是否为yes或no。然后,在每一行上,找到第一笔钱,从$开始,同一行上的第二笔钱不会考虑在内。

在本例中,程序将考虑$1000,因为它是yes,所以第二行不会被执行,因为它是no。第三个单元格将接受第一笔钱(第一个$),即$23232。因此,该程序将对$1000+$23232+$1121=$25353求和

EN

回答 3

Stack Overflow用户

发布于 2018-10-23 20:11:04

我猜这就是您想要的,考虑到您正在使用第一列来放置每个值,并且您的表的名称是"Sheet1“

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2018-10-23 20:32:13

这将使用split来分离yes/no,并使用InStr来定位第一个货币符号。

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2018-10-23 20:38:00

使用excel数组公式的方法略有不同,假设单元格值不包含尾随空格,

代码语言:javascript
复制
=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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52948073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档