繁体   English   中英

使用VBA循环遍历范围时查找确切的字符串

[英]Find exact strings while looping through a range using VBA

我有以下代码通过表。 当它在C列中找到“报告”字样并且在列B中找到“OSI”时,它会从列DEF为列B和C中的标准为真的每一行创建一个名为“OSIRep”的范围。

Set sht = ThisWorkbook.Worksheets("Features")


'Reporting and OSI

Set featuresRng = sht.Range(sht.Range("B1"), sht.Range("C" & sht.Rows.Count).End(xlUp))
rngArray = featuresRng
ReDim NewArr(1 To 1)
y = 1
For i = 1 To UBound(rngArray)
    If rngArray(i, 2) = "Reporting" And rngArray(i, 1) = "OSI" Then
        ReDim Preserve NewArr(1 To y)
        NewArr(y) = featuresRng.Rows(i).Resize(1, 3).Offset(0, 2).Address
        y = y + 1

    End If
Next i

sRng = Join(NewArr, Application.DecimalSeparator)
ThisWorkbook.Names.Add "OSIRep", sht.Range(sRng)

但是,我有两个问题:1-当我将单词更改为“安全”和“OSI”以创建范围“OSISec”时,我收到错误,我不知道为什么。 错误是'运行时错误1004 - 对象'_Worksheet'的方法'范围'失败',这发生在sht.Range(sRng)上

它搜索的范围没有什么不同,我试图创建的名称尚不存在。 有任何想法吗?

2-当我将字符串更改为“报告”和“搜索和过滤”时,代码会创建一个范围,其中包含单词“搜索”或“和”或“过滤器”的任何单元格都包含在该范围内。 如何搜索EXACT字符串? 我相信它使用Find和xlwhole? 我不知道怎么用这个呢?

我试过对工作表进行保护,解锁单元格并探索错误代码,但都无济于事。

提前感谢您提供的任何帮助或见解! 我很感激我是一个完全的初学者,所以非常感谢任何帮助。

我不完全理解这个问题,但是你的文件可能存在一些问题。 当我使用此测试设置时:

在此输入图像描述

使用此代码:

Sub SOCode()
Set sht = ThisWorkbook.Worksheets("Features")

Set featuresRng = sht.Range(sht.Range("B1"), sht.Range("C" & sht.Rows.Count).End(xlUp))
rngArray = featuresRng

ReDim NewArr(1 To 1)
y = 1
For i = 1 To UBound(rngArray)
    If rngArray(i, 2) = sht.Range("F2") And rngArray(i, 1) = sht.Range("F1") Then
        ReDim Preserve NewArr(1 To y)
        NewArr(y) = featuresRng.Rows(i).Resize(1, 3).Offset(0, 2).Address
        y = y + 1

    End If
Next i

'delete all named ranges first
Dim nm As Name
For Each nm In ThisWorkbook.Names
    nm.Delete
Next nm

sRng = Join(NewArr, Application.DecimalSeparator)
ThisWorkbook.Names.Add sht.Range("F3").Value, sht.Range(sRng)

'delete output of named ranges from last test
Range("H2:H1000").ClearContents

'paste named ranges in col "H"
i = 2
For Each nm In ThisWorkbook.Names
    Cells(i, 8).Value = nm.Name
    i = i + 1
Next nm
End Sub

您提到的所有可能的字符串都在我的网站上运行。

在此输入图像描述 我会创建一个新的新文件并再次测试它。 我只是在读取F列中的可能字符串时更改了代码(F1中的OSI,例如reporting = F2,rangeName = F3),最后将所有创建的名称粘贴到H列,仅用于调试。 请记住,当找不到组合时我会收到错误,因为在“sRng”中创建带有空字符串的命名范围会导致错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM