【问题标题】:Count cell values in corresponding cell based on the value of another cell in the same row根据同一行中另一个单元格的值计算相应单元格中的单元格值
【发布时间】:2020-06-03 21:43:18
【问题描述】:

我有一个程序,它根据值计算单元格的数量。

例如,如果 E 列中的单元格值 =“75”,则添加到“Air Count”,否则如果列 E =“76”,则添加到“Road Count”

在我的数据集中,S 列中有一个对应的单元格,其中包含项目数。我想根据它们在 E 列中的值来计算这些项目。例如,如果 E 列中的单元格 =“75”,则检查 S 列中的相应单元格,并将其添加到“Air Item Count”中。

我想我对在哪里添加它有点困惑。我试图添加它,但我没有正确,所以我只是把它注释掉了。

这是我的代码:

Sub ParseData()

Dim airConCount As Integer, airItemCount As Integer, roadConCount As Integer, roadItemCount As Integer, totalConCount As Integer, _
totalItemCount As Integer

'Find last value in row
Dim LastSVS As Integer
Dim LastRowITEMS As Integer


LastRowSVS = ActiveSheet.Cells(Rows.Count, 5).End(xlUp).Row
'LastRowITEMS = ActiveSheet.Cells(Rows.Count, 19).End(xlUp).Row

Dim cel As Range
Dim cel2 As Range
Dim airCounter As Integer
Dim roadCounter As Integer

airCounter = airCounter + 1
roadCounter = roadCounter + 1

'CONSIGNMENT NOTE COUNT
    For Each cel In Range("E2:E" & LastRowSVS)

        If cel.Value = "75" Or cel.Value = "48N" Or cel.Value = "15N" Or cel.Value = "29" Or cel.Value = "701" _
        Or cel.Value = "15D" Or cel.Value = "EP3" Or cel.Value = "X12" Or cel.Value = "753" Or cel.Value = "EP5" _
        Or cel.Value = "X12" Or cel.Value = "753" Or cel.Value = "EP5" Or cel.Value = "1" Or cel.Value = "4" _
        Or cel.Value = "INT" Or cel.Value = "17B" Or cel.Value = "73" Then

        airCounter = airCounter + 1

        Set cel2 = Range("S2:S" & airCounter)


        airConCount = airConCount + 1
        'airItemCount = airItemCount + cel2.Item(19)



        ElseIf cel.Value = "76" Then

        roadConCount = roadConCount + 1
        Set cel2 = Range("J2:J" & roadCounter)
        'roadItemCount = roadItemCount + cel2.Item(19)


        End If

    Next cel

这是我的数据集的屏幕截图。

如果项目与服务中的属性匹配,我想计算项目。 因此,如果 Service 为 75,则计算相应行中的所有项目。

【问题讨论】:

  • 您能解释一下您当前的代码有什么问题吗?您是否收到错误或意外结果?如果是后者,您能否描述一下您的预期与实际结果。我要注意的一件事是您正在使用cel2.Item(i, 10),但我没有看到您在任何地方声明或分配任何值给i
  • 我很抱歉。我收到错误代码Object doesn't support this property or method 我遇到的问题是不知道将语句添加到“Air Item Count”的位置,也不知道要使用的正确语法或如何构建它。
  • 你在哪一行得到这个错误?我只是根据您提供的内容运行该代码,并且没有错误。我认为您没有在 airItemCount = airItemCount + cel2.Item(i, 10) 行中指定正确的单元格,但如果不更好地了解您的数据集,就很难说。
  • 您没有收到错误是因为我已经注释掉了导致错误的代码吗?您需要有关我的数据集的更多信息,我会提供。我正在尝试指定“S”列并计算该单元格中的值。我认为这将是第 '10' 行,并且我认为 'i' 指定了 For Each 循环中的值。
  • 您最好添加一个反映您的问题的示例数据的屏幕截图,然后向我们展示预期的输出,并说明到达那里的理由。我认为有一种更简单的方法可以做到这一点,但需要样本数据来确认。

标签: excel vba


【解决方案1】:

我认为这可以满足您的需要。

它循环遍历E2:E 范围内的所有单元格,并根据值是否为 76 将同一行的 S 列中的单元格的值添加到 roadItemCount。如果该值是其他任何值,它会执行相同的逻辑,但会将值添加到 airItemCount

我已经反转了你的 if/else 逻辑,所以如果你真的需要在 E 列中选择那些特定的值,你可以使用你的逻辑。

Sub ParseData()

Dim airConCount As Integer, airItemCount As Integer, roadConCount As Integer, roadItemCount As Integer, totalConCount As Integer, _
totalItemCount As Integer

'Find last value in row
Dim LastSVS As Integer
Dim LastRowITEMS As Integer


LastRowSVS = ActiveSheet.Cells(Rows.Count, 5).End(xlUp).Row
LastRowITEMS = ActiveSheet.Cells(Rows.Count, 19).End(xlUp).Row

Dim cel As Range
Dim airCounter As Integer
Dim roadCounter As Integer

airCounter = airCounter + 1
roadCounter = roadCounter + 1

'CONSIGNMENT NOTE COUNT
For Each cel In Range("E2:E" & LastRowSVS)

    If cel.Value = "76" Then
        roadConCount = roadConCount + 1
        roadItemCount = roadItemCount + ActiveSheet.Cells(cel.Row, 19).Value

        'MsgBox ("roadConCount: " & roadConCount)
        'MsgBox ("roadItemCount: " & roadItemCount)
    Else
        airConCount = airConCount + 1
        airItemCount = airItemCount + ActiveSheet.Cells(cel.Row, 19).Value

        'MsgBox ("airConCount: " & airConCount)
        'MsgBox ("airItemCount: " & airItemCount)
    End If

Next cel

MsgBox ("airItemCount: " & airItemCount)
MsgBox ("roadItemCount: " & roadItemCount)

End Sub

【讨论】:

  • 这很完美,正是我所需要的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2023-02-05
  • 1970-01-01
  • 2019-10-04
  • 2013-12-27
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多