【问题标题】:Cannot search range无法搜索范围
【发布时间】:2016-06-16 17:47:02
【问题描述】:

我对 VB 很陌生。尝试编写宏来帮助我完成日常任务。在这个网站上呆了很多次,帮助我走到了这一步。仍然有问题,所以我想我会发布我的问题。

我需要在 A 列中搜索某个单词,然后在 B 列中搜索某个数字,然后在某个范围内的单元格值中进行计数并显示。

所以本质上如果列 A = "Word" 并且列 B

见下文。它可以工作,但由于某种原因,我得到了写入 ColumnC 范围的所有值,它不读取 A 列“Word”或 B 列 .. 任何 cmets 都会有所帮助。 提前干杯!!

Sub Word()

Dim i As Integer, HDIpctCompl As Single
   For i = 1 To 10000

    If Worksheets("1").Cells(i, 1) = "Word " And Worksheets("1").Cells(i, 2) < 0 Then
        Worksheets("1").Cells(2, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.5", Worksheets("1").Range("C:C"), "<=0.599")

        Worksheets("1").Cells(3, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.4", Worksheets("1").Range("C:C"), "<=0.499")

        Worksheets("1").Cells(4, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.3", Worksheets("1").Range("C:C"), "<=0.399")

        Worksheets("1").Cells(5, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.2", Worksheets("1").Range("C:C"), "<=0.299")

        Worksheets("1").Cells(6, 12).Value = Application.WorksheetFunction.CountIfs(Worksheets("1").Range("C:C"), ">=0.1", Worksheets("1").Range("C:C"), "<=0.199")

HDIpctCompl = i     'Progress bar, works, different Sub
HDIprogress HDIpctCompl

    End If
Next i

End Sub

我也一直在搞砸下面的东西

Sub Word()

Dim i As Long, wb As Workbook, sh1 As Worksheet, ClmA As Range, Find As     Range, FindB As Range, ClmB As Range
Set wb = ThisWorkbook
Set sh1 = wb.Sheets("1")
Set ClmA = sh1.Range("A1:A10000")
Set ClmB = sh1.Range("B1:B10000")
Set Find = ClmA.Find("Word")
Set FindB = ClmB.Find("< 0 ")

For i = 1 To 10000
If Find = 0 And FindB = 1 Then

Else
            sh1.Cells(2, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.4", sh1.Range("C:C"), "<=0.499")
            sh1.Cells(3, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.3", sh1.Range("C:C"), "<=0.399")
            sh1.Cells(4, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.2", sh1.Range("C:C"), "<=0.299")
            sh1.Cells(5, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.1", sh1.Range("C:C"), "<=0.199")
            sh1.Cells(6, 7).Value = Application.WorksheetFunction.CountIfs(sh1.Range("C:C"), ">=0.0", sh1.Range("C:C"), "<=0.099")

    If Find = 1 And FindB = 0 Then

    Else
 MsgBox "No information detected", vbOKOnly    
    Exit Sub       
    VIApctCompl = i
    Viaprogress VIApctCompl
   End If
  End If
 Next i

End Sub

【问题讨论】:

  • 您的第一个代码是查看第 1 行到第 10000 行中的 A 列和 B 列,如果找到正确的信息,则将信息写入 L 列的第 2-6 行。这是你想要的吗? Then 之后没有变量,因此每次满足条件时,它只会不断替换 L 列中第 2-6 行中的值。
  • 是的,在a列中搜索某个单词,如果为真则搜索小于0的数字,如果为真则计数并写在L列中

标签: excel search text numbers vba


【解决方案1】:

您只需在COUNTIFS 语句中添加更多条件:

Sub Word()

With Worksheets("1")
    .Cells(2, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.5", .Range("C:C"), "<=0.599")
    .Cells(3, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.4", .Range("C:C"), "<=0.499")
    .Cells(4, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.3", .Range("C:C"), "<=0.399")
    .Cells(5, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.2", .Range("C:C"), "<=0.299")
    .Cells(6, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.1", .Range("C:C"), "<=0.199")
End With

End Sub

这将基本上消除对进度条的需求,因为它应该立即填写这些内容。

或者,如果您想简化您的代码并使其以后更易于修改,请使用以下代码:

Sub Word()

Dim i As Long, j As Long
With Worksheets("1")
    j = 2
    For i = 5 To 1 Step -1
        .Cells(j, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0." & i, .Range("C:C"), "<=0." & i & "99")
        j = j + 1
    Next i
End With

End Sub

【讨论】:

  • CountIfs 正在搜索 01.1 到 0.199 之间的范围。我认为问题在于当我在范围 A 和范围 B 中执行 .find 时,它完全无视那条线并向右移动到计数。本质上,我需要一个 case、if 或 for 语句,它将在 A 列中找到一个单词,然后该查找的结果将在 B 列中搜索所有
  • @User123 您的代码正在循环遍历 10000 行数据,查看 A 列和 B 列中的数据,然后根据 C 列上的 CountIf 在每个循环中覆盖 L 列中的数据。如果您只想在 A 列和 B 列中的值满足特定条件时计算 C 列中介于给定值之间的单元格总数,我的代码将起作用。您能否分享一个包含典型数据的示例工作簿?
  • 一直很忙,抱歉回复晚了。感谢您的帮助。看起来,像往常一样,我想太多了,把它复杂化了,无法修复,哈哈。我已经对其进行了测试,它似乎正在工作。移除了清理模块的进度条。使用了第一个代码,因为我很快就理解了它,而且时间对此很重要。我会为我的案例编写第二个代码来清理它。如果我有任何问题,我会告诉大家。再次感谢!!
  • 很高兴我能帮上忙!如果这解决了您的问题,请将答案标记为正确。
【解决方案2】:
Sub Word()

With Worksheets("1")
.Cells(2, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.5", .Range("C:C"), "<=0.599")
.Cells(3, 12).Value = Application.WorksheetFunction.CountIfs(.Range   ("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.4", .Range("C:C"), "<=0.499")
.Cells(4, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.3", .Range("C:C"), "<=0.399")
.Cells(5, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.2", .Range("C:C"), "<=0.299")
.Cells(6, 12).Value = Application.WorksheetFunction.CountIfs(.Range("A:A"), "Word", .Range("B:B"), "<0", .Range("C:C"), ">=0.1", .Range("C:C"), "<=0.199")
End With

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2011-07-22
    • 2011-02-06
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多