elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Excel: Automatizar cambio de fórmulas al crear columna.
0 Usuarios y 3 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Excel: Automatizar cambio de fórmulas al crear columna.  (Leído 127 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.600


Hackentifiko!


Ver Perfil
Excel: Automatizar cambio de fórmulas al crear columna.
« en: Ayer a las 22:34 »

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.


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.240



Ver Perfil
Re: Excel: Automatizar cambio de fórmulas al crear columna.
« Respuesta #1 en: Hoy a las 01:39 »

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.

Si A y B deben mantenerse ponles un $ delante: $A $B, ambos son indicadores de columnas, si arrastras verticalmente nunca cambiarán, si arrastras horizontalmente si cambiaran salvo que tengan los $ delante, los números son indicadores de filas, de forma similar nunca cambiaran si arrastras horizontalmente, pero si cambiaran si arrastras verticalmente salvo que tengan el $ delante

Citar
A y B deben mantenerse, pero si le pongo los $ no van a cambiar los números cuando quiera que lo hagan hacia abajo.

Solo fija A y B, no los números:

=SI(Y(CONTAR.SI($N$2:$N$9;$A19)>0; CONTAR.SI($N$2:$N$9;$B19)>0); $N$10; "")

Citar
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.

N solo cambiará a M si arrastras horizontalmente hacia la izquierda y solo si le quitas los $, pero que luego M cambie a O?, eso ya está raro, supongo que te equivocaste

Recuerda que puedes presionar el atajo de teclado F4 para que la fijación ($) vaya cambiando entre: Fijar todo ($A$1), solo Columna ($A1), solo Fila (A$1) o nada (A1), obviamente tienes que tener el cursor en el A1 o seleccionarlo, también te vale para Rangos (A1:A5)


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿como copiar formulas de un excel inseguro?
Windows
luis_74 3 5,798 Último mensaje 12 Abril 2015, 06:09 am
por luis_74
PHP y MySQL Importar datos desde excel a cualquier tabla y columna [TUTORIAL]
PHP
:ohk<any> 2 3,394 Último mensaje 9 Junio 2015, 14:31 pm
por :ohk<any>
Como puedo hallar 2 palabras en una misma celda con formulas en excel?
Programación General
dracrac 6 4,516 Último mensaje 10 Junio 2016, 14:30 pm
por dracrac
Excel formulas
Dudas Generales
aspiazu 1 2,874 Último mensaje 15 Marzo 2018, 12:03 pm
por MCKSys Argentina
En Excel, especificar fórmulas más rápido.
Software
Tachikomaia 1 1,823 Último mensaje 21 Noviembre 2024, 04:51 am
por Tachikomaia
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines