Excel 如何将此代码转换为更短的代码?可能通过数组?

Excel 如何将此代码转换为更短的代码?可能通过数组?,excel,vba,Excel,Vba,我有适合我需要的工作代码,但是现在我已经学到了很多,我想回去让它更精简 我尝试过数组,但显然不理解它们 Sub addGreenx(newbook) Set newbook = ActiveWorkbook myrow = 1 mycolumn = "M" For Each r In Intersect(newbook.Sheets("Sheet1").Range("AQ:AQ"), newbook.Sheets("Sheet1").UsedRange) If InStr(r,

我有适合我需要的工作代码,但是现在我已经学到了很多,我想回去让它更精简

我尝试过数组,但显然不理解它们

Sub addGreenx(newbook)
Set newbook = ActiveWorkbook

 myrow = 1
 mycolumn = "M"
 For Each r In Intersect(newbook.Sheets("Sheet1").Range("AQ:AQ"),     newbook.Sheets("Sheet1").UsedRange)
If InStr(r, "Green") And InStr(r, "red") = 0 Then
    newbook.Sheets("Sheet1").Range(mycolumn + Mid(Str(myrow), 2)) = "X"
End If
myrow = myrow + 1
Next r

End Sub

Sub addBluex(newbook)
Set newbook = ActiveWorkbook

myrow = 1
mycolumn = "O"
For Each r In Intersect(newbook.Sheets("Sheet1").Range("AQ:AQ"),     newbook.Sheets("Sheet1").UsedRange)
If InStr(r, "Blue") And InStr(r, "Red") = 0 Then
    newbook.Sheets("Sheet1").Range(mycolumn + Mid(Str(myrow), 2)) = "X"
End If
myrow = myrow + 1
Next r

End Sub

Sub addTealx(newboox)

Set newbook = ActiveWorkbook
myrow = 1
mycolumn = "O"
For Each r In Intersect(newbook.Sheets("Sheet1").Range("AQ:AQ"), newbook.Sheets("Sheet1").UsedRange)
If InStr(r, "Teal") And InStr(r, "Red") = 0 Then
    newbook.Sheets("Sheet1").Range(mycolumn + Mid(Str(myrow), 2)) = "X"
End If
myrow = myrow + 1
Next r

End Sub

这可以缩短,我确信,“mycolumn”中的项目可能同时有蓝色和绿色,或者只有一个或另一个,但是如果它是蓝色,x在一列中,如果绿色在另一列中,如果两者都在。

如果您总是同时运行这些,那么您只需要一个循环,并且在该循环中对每个条件进行测试

Sub CheckForColors()
    Dim r As Range, sht As Worksheet, v

    Set sht = ActiveWorkbook.Sheets("Sheet1")

    For Each r In Intersect(sht.Range("AQ:AQ"), sht.UsedRange)
        v = r.Value
        If InStr(v, "Red") = 0 Then
            If InStr(v, "Green") > 0 Then r.EntireRow.columns("M").Value = "x"
            If InStr(v, "Blue") > 0 Or InStr(v, "Teal") > 0 Then _
                             r.EntireRow.columns("O").Value = "x"
        End If
    Next r

End Sub

一个有点离题的技巧:在代码中使用缩进,这会使代码比您发布的内容更具可读性。我如何在这里复制并粘贴带有缩进的代码?在我的代码中,它是缩进的,但当我粘贴在这里并缩进显示为代码时,我只是没有花时间将它全部缩进,就像在程序中一样。这很奇怪,当我从标准VBA Excel编辑器复制代码时,它会在这里转换缩进。