Excel 基于两列中的条件创建范围

Excel 基于两列中的条件创建范围,excel,vba,Excel,Vba,这与我最近发布的另一个问题有关,@Stavros Jon善意地帮助了我 我试图根据B列和C列中的条件创建一个命名范围。如果B列包含单词“OSI”,C列包含单词“Language”,我想创建一个范围 我已经试着编辑我以前的代码,但是我不能得到正确的语法,并且计数器行出现对象错误 Sub another() 'Create Ranges: Dim featuresRng As Range Dim rng As Range Dim sht As Worksheet Dim counter As L

这与我最近发布的另一个问题有关,@Stavros Jon善意地帮助了我

我试图根据B列和C列中的条件创建一个命名范围。如果B列包含单词“OSI”,C列包含单词“Language”,我想创建一个范围

我已经试着编辑我以前的代码,但是我不能得到正确的语法,并且计数器行出现对象错误

Sub another()

'Create Ranges:

Dim featuresRng As Range
Dim rng As Range
Dim sht As Worksheet
Dim counter As Long
Dim cell As Range
Set sht = ThisWorkbook.Worksheets("Features")
Set featuresRng = sht.Range(sht.Range("C1"), sht.Range("C" & sht.Rows.Count).End(xlUp)) 'dynamically set the range of features
Set featuresRng2 = sht.Range(sht.Range("B1"), sht.Range("B" & sht.Rows.Count).End(xlUp))

counter = 0 'this counter will help us avoid Union(Nothing, some range), which would give an error

For Each cell In featuresRng 'loop through the range of features
    If featuresRng.cell.Value = "Language" And featuresRng2.cell.Value = "OSI" Then
        counter = counter + 1
        If counter = 1 Then
            Set rng = sht.Range(cell.Offset(0, 1), cell.Offset(0, 3))
        Else
            Set rng = Union(rng, sht.Range(cell.Offset(0, 1), cell.Offset(0, 3))) 'build the range
        End If
    End If
Next cell
Debug.Print rng.Address
ThisWorkbook.Names.Add "OSILAng", rng

End Sub
如何编辑代码以包含这两个条件

此外,有时我在B列中的文本将包含其他单元格中的单词,如“Filter”和“Filter and Search”,我还希望使我的范围与C列单元格中的确切文本保持一致,而不仅仅是“包含此文本”

提前谢谢

试试这个

Sub another()

Dim featuresRng As Range, NewArr As Variant
Dim rng As Range
Dim sht As Worksheet
Dim sRng As String
Dim i As Long

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) = "Language" And rngArray(i, 1) = "OSI" Then
        ReDim Preserve NewArr(1 To y)
        NewArr(y) = featuresRng.Rows(i).Offset(0, 3).Address
        y = y + 1

    End If
Next i

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

End Sub

但是出了点问题,是否要创建多个范围?还是只有最后一个?@PKen在你之前的问题中,我发布了两个不同的独立sub,每个sub根据期望的结果以不同的方式处理问题。你需要从中选择一个,然后从那里继续前进。那太好了,谢谢!我没有意识到我可以将featuresRng设置为对应于两列,而且我以前从未使用过ReDim,这非常有用,谢谢!我怎样才能找到精确的值呢?这是精确的值
rngaray(I,2)=“Language”
这就像值
如果instr(rngArray(I,2),“Language”)>0那么…
非常感谢,这是否意味着引号中的字符串只能是一个单词?我正在尝试“报告管理”并得到一个对象错误?它可以是任何你想要的。数字字符串或带通配符的字符串