Как проверить, сбалансированы ли значения Ячеек друг с другом - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать формулу, которая проверяет 4 ячейки рядом друг с другом, если они имеют одинаковое число раз положительное и отрицательное, см. В примере:

Example to recreate Sheet

Если формула видит, что есть плюс 50 и минус 50, она должна закрасить ячейку с правой стороны или ячейки с синими цифрами.

Список представляет собой список нескольких магазинов, если один магазин продает много этого товара и может закончиться, они просят другой магазин пополнить товар. Иногда они забывают отправить записку. Этот список должен максимально упростить управление.

Я ожидаю, что формула закрасит ячейку в правой части списка синим цветом, если 2 ячейки имеют одинаковое значение в плюс и минус.

Я пытался использовать правила форматирования ячеек, но это невозможно сделать с этим.

Еще один пример, поскольку у людей, похоже, возникают проблемы с пониманием того, что должна делать формула:

Я пометил каждую ячейку синим цветом, как и в формуле, и причина в желтом цвете.

enter image description here

Ответы [ 2 ]

3 голосов
/ 27 марта 2019

Вы можете сделать это, используя условное форматирование, используя эту формулу (только для первой строки):

=OR(A1+B1=0;B1+C1=0;C1+D1=0)

Эта формула проверяет, равна ли сумма двух соседних ячеек нулю, что является еще одним способом сказать, что они должны иметь одинаковое значение, но противоположные знаки.

Очевидно, вы могли бы рассмотреть возможность изменения этой формулы, например ::
Вместо:

A1+B1=0

вы положили:

AND(A1+B1=0;A1<>0)

Если сумма двух значений равна нулю и хотя бы одно из них не равно нулю, то оба значения не равны нулю.

Все это вместе в одной формуле дает следующее:

=OR(AND(A1+B1=0;A1<>0);AND(B1+C1=0;B1<>0);AND(C1+D1=0;C1<>0))

Используйте такую ​​формулу в условном форматировании ячейки E1 и примените ее ко всем ячейкам в столбце E.

2 голосов
/ 27 марта 2019

Попробуйте:

Option Explicit

Sub test()

    Dim Row As Long, Column As Long
    Dim rng As Range

    'Let us assume that we use Sheet1 & columns A to F
    With ThisWorkbook.Worksheets("Sheet1")

        For Row = 2 To 100 ' <- Let us assume that data starts in row 2 and ends in row 100
            Set rng = .Range("B" & Row & ":E" & Row)

            For Column = 2 To 6
                If .Cells(Row, Column).Value <> 0 Then
                    If Application.WorksheetFunction.CountIf(rng, (-1 * .Cells(Row, Column).Value)) > 0 Then
                        .Range("F" & Row).Interior.Color = vbBlue
                        Exit For
                    End If
                End If
            Next Column
        Next Row

    End With

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