检查整列以查看文本是否存在。如果确实如此,则将其记录在其他单元格中

时间:2019-04-11 04:26:03

标签: excel vba

我试图遍历一列,以查看是否存在一定系列的文本。如果可以,那么我想显示范围内存在哪些文本。

我已经尝试过for循环和每个单元格的命令,但是我不确定还有什么命令可以尝试。

对于下面显示的整个列,如果出现AH,DF,我想在范围B10中编写“ AutoCAD施工问题硬拷贝”,在B11中编写“数字文件”。如果仅出现“ DF,P”,我想在范围B10中写入“数字文件”,并在B11中进行打印。但是,如果它们全部都出现了(就像它们在下图中的显示方式一样),我想在B10中编写“ AutoCAD构造问题纸质版”。 B11中的“数字文件”和B12中的打印。我的问题是,每当创建此列表时,我都希望列表从B10开始,并且列表之间不要有空格。列表的顺序必须为AutoCAD Construction Issue硬拷贝,数字文件和打印。

我的代码粘贴在下面:

Sub Descriptions()
    Range("A14:A305").ClearContents

    For r = 14 To Cells(Rows.Count, "B").End(xlUp).Row
        On Error Resume Next  'get rid of that... find error and fix/build logic, don't ignore it

        If Range("A1").Value = "30% Design Review" Or Range("A1").Value = "Final Design Review" Then
            If InStr(Cells(r, "B").Value, "BMC-9") Then
                Cells(r, "E").Value = "Bill of Materials"
                Cells(r, "A").Value = "DF, P"
            ElseIf InStr(Cells(r, "B").Value, "MC-9") Or InStr(Cells(r, "B").Value, "CSR-9") Or InStr(Cells(r, "B").Value, "LC-9") Then
                Cells(r, "A").Value = "DF, P"
            End If
        ElseIf Range("A1").Value = "Construction Submittal" Then
            If InStr(Cells(r, "B").Value, "BMC-9") Then
                Cells(r, "E").Value = "Bill of Materials"
                Cells(r, "A").Value = "DF, P"
            ElseIf InStr(Cells(r, "B").Value, "MC-9") Or InStr(Cells(r, "B").Value, "CSR-9") Or InStr(Cells(r, "B").Value, "LC-9") Then
                Cells(r, "A").Value = "AH, DF"
            End If
        End If
    Next

    For r = 14 To Cells(Rows.Count, "B").End(xlUp).Row
        If Cells(r, "A").Value = "DF, P" Then
            Range("B10").Value = "Digital Files"
            Range("B11").Value = "Prints"
        ElseIf Cells(r, "A").Value = "AH, DF" Then
            Range("B10").Value = "AutoCAD Construction Issue Hard Copy"
            Range("B11").Value = "Digital Files"
        End If
    Next
End Sub

新编辑2019年4月11日

enter image description here

2 个答案:

答案 0 :(得分:0)

我可能对您的要求感到困惑,但是,我认为您可以通过公式来实现这一目标。

enter image description here

...如您所见,这是一个数组公式,因此当您提交它时,请确保按 Shift + Ctrl + Enter ,否则,将使其失效。 / p>

如果它在给定范围内找到您的文本,那么您将从那里得到一个大于或等于1的数字,您可以在另一个单元格中提供另一个查找以显示您的文本。

所以,如果我尝试使用您的确切方案,这就是我想出的...

Example

为便于理解,您可以在此处下载示例工作簿...

Example Workbook

正如我说的那样,我认为将所有这些作为基于公式的方法来进行,将使长期维护变得更加容易。也许那只是我。

我希望能给您您想要的东西。

答案 1 :(得分:0)

enter image description here

Sub SeachDesc()
Dim SrchRng As Range, cel As Range
Set SrchRng = Range("A14:A305")
Range("B10:B12").ClearContents
For Each cel In SrchRng
    If cel.Value = "DF, P" Then
        Range("B10").Value = "Digital Files"
        Range("B11").Value = "Print(s)"
    ElseIf cel.Value = "AH, DF" Then
        Range("B10").Value = "AutoCAD Construction Issue Hard Copy"
        Range("B11").Value = "Digital Files"
    End If
Next cel
    If Range("B11").Value = "Print(s)" And Range("B12").Value = "Print(s)" Then
        Range("B10").Value = "AutoCAD Construction Issue Hard Copy"
        Range("B11").Value = "Digital Files"
        Range("B12").Value = "Print(s)"
    End If
End Sub