Как найти все «0» в фиксированной строке и разных столбцах, а затем суммировать их? - PullRequest
1 голос
/ 04 марта 2012

Мне нужна помощь с моим кодом, я не уверен, почему он не работает должным образом и занимает очень много времени. То, что я пытаюсь сделать, это найти повторяющиеся временные значения, например, 0. После определения местоположения 0 я продолжу искать еще 0 во временном ряду, если есть, я буду суммировать test1 из B3 и test1 из H3 вместе ... это будет продолжаться до конца строки и будет вставлено в столбец N или O, который является пустым столбцом. После этого придется сделать то же самое для 100, в целом.

enter image description here

Результирующий должен быть таким

enter image description here

У меня проблемы с запуском следующего кода, который я пытался написать.

Dim temprow As Long, ColMax1 As Long, tempcell As Range, ColCount1 As Long
Dim temprow1 As Long, valuetohighlight As Variant, valuetohighlight1 As Variant 
Dim totalvalue As Double, findvalues As Long

temprow = 1
ColMax1 = 10

Do

   Set tempcell = Sheets("Sheet1").Cells(temprow, 1)

    'Look for the word temp in column A

    If tempcell = "temp" Then
     'Look for values = 0
     For ColCount1 = 2 To ColMax1

        findvalues = Sheets("Sheet1").Cells(temprow, ColCount1)

        If findvalues = 0 Then

            temprow1 = temprow + 1

            valuetohighlight = Sheets("Sheet1").Cells(temprow1, ColCount1)

        End If
        Next

     'Look for other values that is equal to 0
    For ColCount1 = 3 To ColMax1

        findvalues = Sheets("Sheet1").Cells(temprow, ColCount1)

        If findvalues = 0 Then

            temprow1 = temprow + 1

            valuetohighlight1 = Sheets("Sheet1").Cells(temprow1, ColCount1)

        End If
        Next

        temprow = temprow + 1

End If

Loop

For ColCount1 = 1 To ColMax1

    If Sheets("Sheet1").Cells(temprow, ColCount1) = "" Then


       totalvalue = 0

       totalvalue = valuetohighlight + valuetohighlight1

     End If

     Next

End Sub

Если у вас есть идеи или мнения, поделитесь ими со мной .. буду признателен за вашу помощь!

Небольшие изменения

enter image description here

Теперь нужно также рассмотреть имя.

1 Ответ

2 голосов
/ 04 марта 2012

То, чего вы хотите достичь, можно сделать с помощью формулы.Хитрость заключается в том, чтобы заголовки ячеек в столбцах от O до Q в строке 2 соответствовали фактическим значениям, которые вы хотите сравнить.

Формула в ячейке O3

=SUMPRODUCT(($B$2:$M$2=$O$2)*B3:M3)

Снимок

enter image description here

СЛЕДОВАТЬ ВВЕРХ

Привет, я помню, как вы использовали эту формулу и набрали ее в VBA для меня раньше, я попробовал, и она работает .. Sheets ("Sheet1"). [O5] = Evaluate ("SUMPRODUCT ((B2: M2 = O2)* (B5: M5)) ") но у меня не может быть фиксированного столбца для напечатанного результата, а также температура может не совпадать со строкой 2 ...

Вот пример кода.Измените 15 на соответствующий столбец, в котором вы хотите отобразить результат.Я прокомментировал код, чтобы у вас не было проблем с пониманием кода.Если вы все еще делаете, то просто спросите:)

КОД

Option Explicit

Sub Sample()
    Dim ColNo As Long, tempRow As Long
    Dim ws As Worksheet
    Dim aCell As Range

    '~~> Change this to the column number where you want to display the result
    '~~> The code assumes that Row 2 in this column has headers
    '~~> for which you want to retrieve values
    ColNo = 18 '<~~ Example :- Column R

    '~~> Change this to relevant sheet name
    Set ws = Sheets("Sheet1")

    '~~> Get the row number which has "Temp"
    Set aCell = ws.Columns(1).Find(What:="Temp", LookIn:=xlValues, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

    If Not aCell Is Nothing Then
        '~~> This is the row which has 'Temp'
        tempRow = aCell.Row

        '~~> Sample for putting the value in Row 3 (assuming that 'temp' is not in row 3)
        '~~> SNAPSHOT 1
        ws.Cells(3, ColNo).Value = Evaluate("=SUMPRODUCT(($B$" & tempRow & ":$M$" & tempRow & "=" & _
        ws.Cells(2, ColNo).Address & ")*(B3:M3))")

        '~~> If you want to use formula in the cell in lieu of values then uncomment the below

        '~~> SNAPSHOT 2
        'ws.Cells(3, ColNo).Formula = "=SUMPRODUCT(($B$" & tempRow & ":$M$" & tempRow & "=" & _
        ws.Cells(2, ColNo).Address & ")*(B3:M3))"

    Else
        MsgBox "Temp Not Found. Exiting sub"
    End If
End Sub

SNAPSHOT (ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ОЦЕНКУ В ВЫШЕ КОДЕ)

enter image description here

SNAPSHOT (ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ ФОРМУЛУ В ВЫШЕ КОДЕКСЕ)

enter image description here

HTH

Sid

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...