Excel计数目标然后输出单元格中的值

时间:2015-02-07 03:04:42

标签: excel vba excel-vba count

我有一张三张工作簿(Dash,HT,RV。)

我正在尝试编写一个宏/函数,用于计算工作表'RV'中特定列中'Dash'值存在的次数,然后在'Dash'中的特定单元格中输出该值

我甚至可以说'Dash'中的值是静态的并重复它(来自'Dash'的变量不会因为它是用户名列表而改变)

在我的脑海中,它是这样的:在Dash.B2中的Sheet.RV打印的J列中计算whatever.variable.Dash ......

我能够找到一个可行的MsgBox选项,但我必须手动输入每个用户名(这是一个16字符名称(字符串))然后一个MsgBox告诉我发生的事件。我希望在宏/函数中使用固定/静态用户名自动化此选项,因为'RV'中的行数可以在700个条目到23k条目之间变化

MsgBox选项是:

Dim Count as Integer
Dim Target As String
Dim Cell as Object
Dim N As Integer

Sub Target_Count()
    Count = 0
    Target = InputBox("character(s) to find?")
    If Target = "" Then GoTo Done
        For Each Cell in Selection
            N = InStr(1, cell.Value, target)
            While N <> 0
                Count = count + 1
                N = InStr(n + 1, cell.Value, target)
            Wend
        Next Cell
    MsgBox count & " Occurrences of " & target
Done:
End Sub

我希望输入框目标为'Dash.A1:8',并且要在'Dash.B1:8'中打印出现的内容

2 个答案:

答案 0 :(得分:0)

您可以使用countif()公式而不是编程宏吗?比如你在计算&#34;破折号&#34;的列是表单RV中的B列,然后在表Dash中的单元格中,公式为:

=COUNTIF(RV!B:B,"dash")

enter image description here enter image description here

或者,如果你想改变你的数字,你只需要更换硬编码的&#34;破折号&#34;在带有输入单元格地址的公式中。

enter image description here

答案 1 :(得分:0)

如果你想要VBA,你可以使用它。根据需要调整它。

Sub Target_Count_2()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim Cell As Range
Dim Count As Integer
Dim LastRow As Long
LastRow = wb.Worksheets("RV").Range("A1").SpecialCells(xlCellTypeLastCell).Row
Dim strArr() As Variant
strArr() = wb.Worksheets("RV").Range("J1:J" & LastRow).Value
Dim i As Long
Dim str As String

    For Each Cell In wb.Worksheets("Dash").Range("B1:B8")
        Count = 0
        str = Cell.Offset(, -1).Value2
        For i = LBound(strArr) To UBound(strArr)
            If str = strArr(i, 1) Then Count = Count + 1
            'If InStr(strArr(i, 1), str) > 0 Then Count = Count + 1
        Next
        Cell.Value2 = Count
    Next

Set Cell = Nothing
Set wb = Nothing
End Sub

请注意,str = strArr(i, 1)只匹配单元格中的完整值,而InStr(strArr(i, 1), str) > 0也会匹配单元格中的部分。我们假设您在单元格中查找"AAA",其值为"AAAB"。第一种方法不会向1添加额外的Count,而第二种方法则会。{/ p>