1

我是vba noobie,请帮忙。我有 3000 行和 40 列。

从第 5 行到最后一行,仅查看第 8、11、14、17、20、23、26、29、32 列。

我需要写一个代码,如果第 8、11、14、17、20、23、26、29、32 列和同一行中的每个单元格绝对小于等于 5,则在单元格处进行注释(row,40)="OK IN PROGRESS" 如果同一行中的一个单元格(列 8,11,14,17,20,23,26,29,32)绝对大于等于 5,则在单元格(行,40)=(大于 5 的列)&“未进行中”

我还需要重命名每一列的编号。

8=george
11=cindy
14=jennifer
17=lucas
20=apple
23=jeff
26=may
29=kevin
32=oscar

例如,在单元格(第 40 行),如果它的 8 NOT IN PROGRESS,则 8 将被 George 替换。

然后是下一行

4

1 回答 1

0

如果您需要,这是一个快速的 VBA 解决方案:

Sub ProcessRows()
    Dim rSt As Integer, rEn As Integer, val As Integer, r As Integer
    Dim cSt As Integer, cEn As Integer, c As Integer
    Dim name As String, inProgressMsg As String, notInProgressMsg1 As String, notInProgressMsg2 As String
    rSt = 5
    rEn = 3004
    val = 5
    cSt = 8
    cEn = 32
    inProgressMsg = "OK IN PROGRESS"
    notInProgressMsg2 = "NOT IN PROGRESS"

    For r = rSt To rEn
        notInProgressMsg1 = ""
        For c = cSt To cEn Step 3
            If Cells(r, c).Value > val Then
                name = ReplaceNumberWithName(c)
                notInProgressMsg1 = notInProgressMsg1 & name & " "
            End If
        Next c

        If notInProgressMsg1 = "" Then
            Cells(r, 40).Value = inProgressMsg
        Else
            Cells(r, 40).Value = notInProgressMsg1 & notInProgressMsg2
        End If
    Next r
End Sub

Function ReplaceNumberWithName(n As Integer) As String
    ReplaceNumberWithName = "NO_NAME_FOUND"

    If n = 8 Then
        ReplaceNumberWithName = "george"
    ElseIf n = 11 Then
        ReplaceNumberWithName = "cindy"
    ElseIf n = 14 Then
        ReplaceNumberWithName = "jennifer"
    ElseIf n = 17 Then
        ReplaceNumberWithName = "lucas"
    ElseIf n = 20 Then
        ReplaceNumberWithName = "apple"
    ElseIf n = 23 Then
        ReplaceNumberWithName = "jeff"
    ElseIf n = 26 Then
        ReplaceNumberWithName = "may"
    ElseIf n = 29 Then
        ReplaceNumberWithName = "kevin"
    ElseIf n = 32 Then
        ReplaceNumberWithName = "oscar"
    End If
End Function
于 2013-08-06T08:37:57.880 回答