en la celda N12 tengo esto:
=SI(CONTAR.SI($N$2:$N$9;B12)>1; $N$10; "")
más abajo se repite, cambiando B12 por B13, etc
Más abajo la fórmula cambia a:
=SI(Y(CONTAR.SI($N$2:$N$9;A19)>0; CONTAR.SI($N$2:$N$9;B19)>0); $N$10; "")
más abajo se repite, cambiando A19 y B19, por A20 y B20, luego 21, etc
Finalmente, más abajo cambia a:
=SI(CONTAR.SI($N$2:$N$9;B124)>0; $N$10; "")
y más abajo se repite cambiando B124 por B125, etc
Debo crear columnas al lado de esa, y es muy tedioso cambiar las letras.
A y B deben mantenerse, pero si le pongo los $ no van a cambiar los números cuando quiera que lo hagan hacia abajo.
Y N debe cambiar a M, luego a O, etc, pero si no le pongo los $ aumentarían los números de los rangos cuando quiera que la fórmula se aplique más abajo.
¿comprendes? ¿hay alguna forma de automatizar eso mejor? Por ejemplo se me ocurre hacer un programa que genere las fórmulas separadas con tab, luego creo las columnas y pego esas fórmulas
...
La respuesta de GPT es complicada para mí:
Sí, comprendo el problema: necesitas arrastrar fórmulas hacia abajo (que cambien los números de fila) y también copiarlas hacia la derecha a nuevas columnas, donde la letra de la columna de búsqueda (N) cambie a M, O, P, etc., pero sin que se “rompan” las referencias al arrastrar.
Claves para resolverlo sin macros:
- Usa referencias mixtas para filas/columnas según necesites que varíen.
- Usa DESREF/INDICE con COINCIDIR o con COLUMNAS/ FILAS para construir rangos que cambien de columna al copiar a la derecha.
- Evita “letras fijas” en las fórmulas; genera el rango por posición.
Propuesta 1: construir el rango N2:N9 de forma dinámica según la columna
- Supón que pegas en la primera columna (por ejemplo, columna C) y que quieres que:
- En esa columna use N2:N9.
- A la derecha, use O2:O9, luego P2:P9, etc. (o M, O, … ajusta el desplazamiento).
- Usa INDICE con DESREF o directamente DESREF sobre N2:N9 y desplaza por el número de columnas copiadas.
Ejemplo base (para la primera fórmula):
- Rango base: $N$2:$N$9
- Desplazamiento horizontal: COLUMNAS($C:C)-1 si pegas primero en C; ajusta a tu columna real.
Fórmula que cambia N→O→P al copiar a la derecha y mantiene filas al copiar hacia abajo:
=SI(CONTAR.SI(DESREF($N$2:$N$9;0;COLUMNAS($C:C)-1); B12)>1; INDICE($N:$N;10); "")
Notas:
- DESREF($N$2:$N$9;0;COLUMNAS($C:C)-1) empieza en N2:N9 y se mueve 0 filas y (n-1) columnas a la derecha cuando copias a la derecha.
- B12 no lleva $ para que al arrastrar hacia abajo cambie a B13, B14, etc.
- INDICE($N:$N;10) devuelve N10. Si quieres que también cambie de N a O al copiar a la derecha, usa DESREF para N10 igual que para el rango:
DESREF($N$10;0;COLUMNAS($C:C)-1)
Entonces la versión completa que también mueve la celda de resultado:
=SI(CONTAR.SI(DESREF($N$2:$N$9;0;COLUMNAS($C:C)-1); B12)>1; DESREF($N$10;0;COLUMNAS($C:C)-1); "")
Para la segunda fórmula (con A y B):
=SI(Y(CONTAR.SI(DESREF($N$2:$N$9;0;COLUMNAS($C:C)-1); A19)>0; CONTAR.SI(DESREF($N$2:$N$9;0;COLUMNAS($C:C)-1); B19)>0); DESREF($N$10;0;COLUMNAS($C:C)-1); "")
Para la tercera fórmula:
=SI(CONTAR.SI(DESREF($N$2:$N$9;0;COLUMNAS($C:C)-1); B124)>0; DESREF($N$10;0;COLUMNAS($C:C)-1); "")
Cómo usar:
1) Pega la fórmula en la primera columna donde quieras empezar (ajusta $C:C a tu columna inicial).
2) Arrastra hacia abajo: A/B/Bx cambian de fila; los rangos 2:9 y 10 quedan fijos en filas.
3) Copia hacia la derecha: el DESREF moverá N→O→P… y también N10→O10→P10.
Si en vez de N→O→P necesitas M→N→O (empezar en M), cambia el offset:
- Usa COLUMNAS($B:C)-1 si la primera columna de pegado es C pero quieres que el desplazamiento empiece ya en +1 (es decir, M cuando offset = -1). Más claro es anclar una columna “origen”:
DESREF($M$2:$M$9;0;COLUMNAS($C:C)-1)
y
DESREF($M$10;0;COLUMNAS($C:C)-1)
Así la primera columna usa M; a la derecha será N, luego O, etc.
Alternativa sin DESREF (más “segura” por volatilidad) usando INDICE:
- Rango variable 2:9:
INDICE($N:$Z; FILA($2:$9); COINCIDIR(COLUMNAS($C:C)+COLUMNA($N:$N)-COLUMNA($N:$N); COLUMNA($N:$Z); 0))
Esto es más enrevesado; en la práctica DESREF es suficiente y más legible.
Consejo final:
- Evita $ en la letra de A y B si quieres que cambien de fila al arrastrar.
- Usa $ en los números 2:9 y 10 para fijar esas filas.
- Controla el cambio de N→O→P con DESREF y COLUMNAS ancladas a la primera columna de pegado.
Si me indicas:
- En qué columna empiezas a pegar,
- Si quieres iniciar en M o en N,
- Y el patrón exacto de columnas,
te devuelvo las tres fórmulas ya ajustadas listas para copiar-pegar.
Para empezar debo pegar esto:
=SI(CONTAR.SI(DESREF($N$2:$N$9;0;COLUMNAS($C:C)-1); B12)>1; DESREF($N$10;0;COLUMNAS($C:C)-1); "")
Nah, está muy raro.
A ver, vamos paso a paso.
En C12 tengo: =SI(CONTAR.SI($C$2:$C$9;B12)>1; $C$10; "")
En C13: =SI(CONTAR.SI($C$2:$C$9;B13)>1; $C$10; "")
O sea, cambia el número al lado de B, está bien.
En D12 tengo: =SI(CONTAR.SI($D$2:$D$9;B12)>1; $D$10; "")
ven que, todo C cambió a D.
Entonces, supongamos que sólo quisiera que cambie la última letra. Que el 10 se mantenga, pèro que cuando arrastro la fórmula a otra columna, C cambie a la columna en cuestión.
¿Cómo se hace? Eso para empezar, el resto lo intentaré entender luego.
Fórmula original:
=SI(CONTAR.SI($C$2:$C$9;B12)>1; $C$10; "")
GPT dijo:
=SI(CONTAR.SI($C$2:$C$9;$B$12)>1; DESREF($C$10; 0; COLUMNA()-COLUMNA($C$10)); "")
puso $ en B porque le dije. No entiendo esto:
DESREF($C$10; 0; COLUMNA()-COLUMNA($C$10))
y no tengo más puntos, pregunto a Deepseek.
En cierto punto le planteé el problema desde 0 y me dijo:
¡Entiendo perfectamente! Es un escenario muy común. Necesitas **fijar la fila (10)** pero **dejar la columna relativa** para que se ajuste al arrastrar. La solución es correcta y simple usando **referencias mixtas**.
### Solución Correcta y Simplificada:
**`=SI(CONTAR.SI($C$2:$C$9; $B$12)>1; C$10; "")`**
---
### 🔐 Explicación de la Referencia Mixta: `C$10`
* **`C`** (sin `$`): La **columna es relativa**. Se ajustará automáticamente al arrastrar la fórmula a la derecha o izquierda (se convertirá en D, E, F...).
* **`$10`** (con `$`): La **fila es absoluta**. No cambiará nunca, sin importar si arrastras la fórmula hacia arriba o hacia abajo. El número **10 se mantendrá fijo**.
### 📍 Comportamiento al Arrastrar:
| Si la fórmula está en: | La referencia se convierte en: | Resultado |
| :--- | :--- | :--- |
| **Celda C15** | `C$10` | Valor de **C10** |
| **Celda D15** | `D$10` | Valor de **D10** |
| **Celda E20** | `E$10` | Valor de **E10** |
| **Celda F5** | `F$10` | Valor de **F10** |
### ✅ Por qué esta es la mejor solución:
1. **Muy Simple:** Solo usas una referencia de celda normal (`C$10`) en lugar de una función compleja.
2. **Más Fácil de Entender:** Cualquiera que vea la fórmula sabe instantáneamente que apunta a la fila 10.
3. **Más Eficiente:** Excel calcula referencias directas mucho más rápido que funciones como `DESREF` o `INDIRECTO`.
4. **Cumple tu Requisito:** La fila 10 nunca cambia, la columna sí se ajusta.
**En resumen:** Reemplaza el `DESREF` complejo por la referencia mixta **`C$10`**.
Tu fórmula final, optimizada y fácil de leer, queda así:
```excel
=SI(CONTAR.SI($C$2:$C$9; $B$12)>1; C$10; "")
```
Puede que ya me hayan dicho eso y yo lo haya olvidado, de momento no puedo probarlo, luego sigo.