Tengo tres celdas, cualquier combinación de las cuales puede estar en blanco. Quiero comprobar si todas las celdas que no están en blanco son iguales. Si las celdas 1 y 2 tienen un valor y la celda 3 está en blanco, quiero que la fórmula devuelva VERDADERO si las celdas 1 y 2 son iguales.
Si no haynativofórmula para esto, entonces simplemente escribiré una macro VBA.
Actualizar: En realidad, fue más rápido escribir simplemente una macro VBA. Soy un desarrollador de .NET/c# y he olvidado gran parte de mi VBA de antaño, por lo que estoy abierto a mejoras en mi código aquí (especialmente configurar el valor de retorno y salir de la función).
Public Function NonblankValuesAreEqual(cells As Range) As Boolean
Dim lastval As String
lastval = cells(1).Value
For i = 2 To cells.Count
If lastval <> "" Then
If cells(i).Value <> "" Then
If cells(i).Value <> lastval Then
NonblankValuesAreEqual = False
Exit Function
End If
End If
End If
lastval = cells(i).Value
Next
NonblankValuesAreEqual = True
End Function
Respuesta1
Ya te has respondido a ti mismo con una macro, pero aquí tienes una solución que no es VBA. Es una fórmula matricial y debe confirmarse con Ctrl+Mayús+Intro:
=(SUM(IFERROR(1/COUNTIF(A1:A3,A1:A3),0))=1)
Esta fórmula cuenta la cantidad de valores únicos en su rango, ignorando las celdas en blanco. Si el número de valores únicos es 1, entonces todos los valores son iguales y la fórmula devuelve VERDADERO. Lo único que no se especificó en su pregunta es qué hacer si todas las celdas están en blanco. En este momento la fórmula devolverá VERDADERO, pero sería fácil agregar alguna lógica adicional para cambiar eso.
Respuesta2
Compruebe si cada par de columnas es exactamente igual (distingue entre mayúsculas y minúsculas) o contiene un espacio en blanco.
=OR(EXACT(A2,B2),ISBLANK(A2),ISBLANK(B2))
=OR(EXACT(A2,C2),ISBLANK(A2),ISBLANK(C2))
=OR(EXACT(B2,C2),ISBLANK(B2),ISBLANK(C2))
=AND(D2:F2)
Ejemplo:
A B C AB AC BC AND
1 1 1 TRUE TRUE TRUE TRUE
1 1 TRUE TRUE TRUE TRUE
A TRUE TRUE TRUE TRUE
A TRUE TRUE TRUE TRUE
A TRUE TRUE TRUE TRUE
a A a FALSE TRUE FALSE FALSE
a a TRUE TRUE TRUE TRUE
a 2 TRUE FALSE TRUE FALSE
A A TRUE TRUE TRUE TRUE
A A TRUE TRUE TRUE TRUE
A B TRUE TRUE FALSE FALSE
A B C FALSE FALSE FALSE FALSE
Nota: Para conjuntos más grandes, el número de columnas adyacentes aumentará considerablemente: n! / 2
Respuesta3
Prueba este pequeñoUDF():
Public Function EqualTest(r1 As Range, r2 As Range, r3 As Range) As Variant
Dim BlankCount As Long, v1 As Variant, v2 As Variant, v3 As Variant
v1 = r1.Value
v2 = r2.Value
v3 = r3.Value
BlankCount = 0
If v1 = "" Then BlankCount = BlankCount + 1
If v2 = "" Then BlankCount = BlankCount + 1
If v3 = "" Then BlankCount = BlankCount + 1
If BlankCount > 1 Then
EqualTest = True
Exit Function
End If
If BlankCount = 0 Then
If v1 = v2 And v1 = v3 And v2 = v3 Then
EqualTest = True
Exit Function
Else
EqualTest = False
Exit Function
End If
End If
If v1 = v2 Or v1 = v3 Or v2 = v3 Then
EqualTest = True
Else
EqualTest = False
End If
End Function
NOTA:
Las celdas no tienen que ser contiguas y elUDF()funcionará tanto para celdas numéricas como para celdas de texto.
Respuesta4
Intentar:
=COUNTA(A:A)=COUNTIF(A:A,A1)
Básicamente, cuente el número de celdas que no están en blanco. Cuente el número de celdas que coinciden con la primera celda. Si son iguales, entonces todos deben ser iguales. Realmente no importa a quién cuentes para el segundo CONTAR.SI... ya que probablemente no será igual a CONTAR si no todos son iguales;)
[editar] si su primera celda podría estar en blanco... intente esto en su lugar:
=COUNTA(A:A)=COUNTIF(A:A,VLOOKUP("*",A:A,1,FALSE))
Intentará encontrar la primera celda que no esté en blanco para verificar en CONTAR.SI.