[英]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.