Возврат, если все значения столбца Excel не совпадают - PullRequest
4 голосов
/ 07 марта 2011

У меня есть следующие данные в электронной таблице Excel:

    A  B  C
 1  b  b  b

Я хотел бы поместить формулу в столбец после данных, которая сравнивает каждое (текстовое) значение в строке и возвращает TRUE, еслиони все одинаковы, т.е. A = B = C.Я хотел бы, чтобы он возвращал FALSE, если одно или несколько значений не совпадают.то есть

    A  B  C  D
 1  b  b  b  TRUE
 2  b  e  b  FALSE
 3  e  b  b  FALSE

Я знаю о логических функциях, таких как AND, поэтому мог бы создать что-то вроде

AND(A1=B1,A1=C1.. etc), однако, это скоро становится громоздким, как только количество столбцов увеличивается.

Перестройка данных невозможна.

Кто-нибудь знает решение OOTB / VB?

Ответы [ 3 ]

7 голосов
/ 07 марта 2011

Если countif находит то же число, что и count, тогда они все одинаковые.

=IF(COUNTIF(A1:C1,A1)=COUNTA(A1:C1),"true","false")

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

Обновление

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

Это вернет false, даже если в диапазоне есть пустая ячейка:

=IF(AND(COUNTIF(A1:C1;A1)=COUNTA(A1:C1);COUNTBLANK(A1:C1)=0);"true";"false")
1 голос
/ 26 февраля 2016

Хотя это будет немного медленнее, вы также можете использовать формулу массива (нажав Ctrl + Shift + Enter после ввода его в ячейку):

{=IF(SUM(COUNTIF(A1:C1,A1:C1))=POWER(COUNTA(A1:C1), 2),"true","false")}

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

.

UPDATE:
Эта формула массива также работает, убедившись, что в диапазоне есть только 1 уникальное значение. Он также по-прежнему возвращает точное значение, даже если в диапазоне есть пробелы:

{=SUM(IFERROR(1 / COUNTIF(A2:C2,A2:C2), 0)) = 1}
1 голос
/ 07 марта 2011

Вот UDF VBA: чтобы сделать его чувствительным к регистру, удалите Option Compare Text

Option Explicit
Option Compare Text
Public Function AllSame(theRange As Range) As Boolean
    Dim vR As Variant
    Dim vC As Variant

    AllSame = True
    vR = theRange
    If IsArray(vR) Then
        vC = vR(1, 1)
        For Each vC In vR
            If vC <> vR(1, 1) Then
                AllSame = False
                Exit For
            End If
        Next vC
    End If
End Function
...