Serie consecutiva con celdas alternas

Busco la forma de rellenar un cuadro con una serie consecutiva en columnas y filas alternas.

Ejemplo:

Tengo un cuadro de A1:D10, selecciono las celdas que están rellenas con una "X": A2, A5, A7, B3, B9, C1 y D2.

Al poner  A2=1, necesito que A5=2, A7=3, B3=4, B9=5...

Esto es posible hacer en una macro.

Respuesta
1

Visita:

Cursos de Excel y Macros - YouTube

---

Tengo las siguientes dudas, puedes comentar en el siguiente orden:

1. ¿Vas a seleccionar las celdas que tienen "X" o quieres que la macro busque todas las "X" que tienes en el cuadro?

2. ¿Siempre va a empezar en 1?

3. ¿De tu selección de celdas, siempre vas a empezar en la primera celda de la extrema izquierda y del extremo superior?

4. ¿Exactamente qué vas a poner en la celda A2, vas a poner "=1" o vas a poner simplemente "1"?

5. ¿La numeración la quieres de arriba a abajo, es decir, por filas y después de izquierda a derecha, es decir, por columnas?


Recomendaciones de mi canal:

Consejos y trucos de excel para mejorar la presentación de tus datos. - YouTube

Consejos para desarrollar macros . curso de excel, curso de macros, excel, macros - YouTube

---

Sal u dos Dante Amor

1 respuesta más de otro experto

Respuesta
1

Si mencionas: Al poner  A2=1, necesito que A5=2, A7=3, B3=4, B9=5...  se entiende que la serie irá hacia abajo, luego a derecha.

Lo único que no está muy en claro es si las celdas elegidas ya tienen un valor X.

Si así fuere, esta macro te servirá. Colocala en algún módulo y podrás ejecutarla desde allí mismo o desde el menú Programador/Desarrollador, Macros.

Sub rellanaSerieAlterna()
'x Elsamatilde
'se solicita el primer número de la serie.
nro = InputBox("Ingresa el primer valor de la serie")
'si el cuadro queda vacío o se ingresa un valor no numérico, se cancela
If Not IsNumeric(nro) Then Exit Sub
'se recorren las filas, luego a derecha las 4 columnas
For x = 1 To 4          'x = col A:D
    For y = 1 To 10     'y = filas 1:10
        'si la celda contiene una X se coloca el nro y se incrementa en 1
        If Trim(UCase(Cells(y, x))) = "X" Then Cells(y, x) = nro: nro = nro + 1
    Next y
Next x
End Sub

Al inicio se solicita el primer número para la serie. Si siempre será 1, en lugar de:

nro = InputBox(......) reemplazá esa línea por   nro = 1

El código va explicado en cada paso, por lo que podrás ajustar tu rango de datos.

Utilizo las funciones Trim y Ucase para hacer coincidir el texto 'x' no importando cómo se lo escriba (mayúsc o minúsc)

Comentame si esto resuelve tu consulta. O aclara cómo es eso de que seleccionas las X.

Buenos días ElsaMatilde!

Gracias por su respuesta!

Si verá el caso concreto va de la celdas C11 a I20.

En este cuadro, tengo puestas unas "x"(letra) mi intención es que al poner un valor numérico (p.ej. 1500, en la celda más a la izquierda posible y más arriba posible) el resto de celdas con la letra "x", por orden descendente y de izquierda a derecha, las "x" se sustituyan por el valor que yo haya definido +1.

En este caso, si yo en la serie C15, D13, D19, E12, F14, G14 y G20(estas celdas llevan una "x") al poner yo C15=1500(por ser la celda más arriba a la izquierda) entonces D13=1501, D19=1502, E12=1503...

Mil gracias!

Muchas Gracias!

No me funcionaba porque le indique yo mal el rango de celdas. Al corregirlo en la macro que me mandó usted a mi caso, funciono a las mil maravillas!

Un millón de gracias!!

Sólo por saber... ¿Cómo puedo modificar la macro para que me dé los valores primero hacia la derecha y luego hacia abajo?

Muchas gracias

Con la primera macro podrás resolver el ejemplo que dejaste, empezando por C15 en el nuevo rango que es C11:I20. La primer tablita es el resultado.

Para cambiar el orden, primero a derecha y luego hacia abajo, cambia el orden de los bucles For ...Next. Y al final también cambia el orden de los Next. La segunda tablita te muestra el resultado obtenido.

En video N° 19- Bucles (utilizar un bucle dentro de otro), encontrarás más ejemplos de bucles y otras estructuras.

Sdos.

Elsa

https://www.youtube.com/@ElsaMatilde 

¡Gracias! 

Excelente!

Para rizar el rizo, se podría hacer a partir de una selección, es decir, que la macro hiciera lo mismo pero yo seleccionando una área concreta cada vez?¿

Así me podría servir para otras hojas!

Mil Gracias!!!

Aquí va la tercera y última macro para este tema ;)

Aunque lo ideal sería que dejes una nueva consulta donde en el título se haga mención a la posibilidad de seleccionar el rango. Ya que estamos haciendo uso de otra función como es el InputBox con opción de seleccionarlo. Y de ese modo otros usuarios también podrían conocerla.

Está adaptada a la primera macro donde la idea fue: que la serie irá hacia abajo, luego a derecha.

El primer InputBox te permite pasar a la hoja y seleccionar el rango.

Sub RellenaSerie_3()
'x Elsamatilde
Dim rango As Range
On Error Resume Next
Set rango = Application.InputBox("Selecciona el rango de acción", Type:=8)
If rango Is Nothing Then MsgBox "Rango no seleccionado.": Exit Sub
'ref de la primera celda
    fila1 = rango.Cells(1, 1).Row
    column1 = rango.Cells(1, 1).Column
'total de filas y col del rango seleccionado
    filx = rango.Rows.Count
    colx = rango.Columns.Count
'se solicita el primer número de la serie.
nro = InputBox("Ingresa el primer valor de la serie")
'por cada col, se recorren todas sus filas
For x = column1 To colx + column1 - 1      'x = col
    For y = fila1 To filx + fila1 - 1       'y = filas
        'si la celda contiene una X se coloca el nro y se incrementa en 1
        If Trim(UCase(Cells(y, x))) = "X" Then Cells(y, x) = nro: nro = nro + 1
    Next y
Next x
End Sub

Sdos!

¡Gracias! 

2 millones de gracias!!

haré una nueva consulta, tal y como usted me ha indicado para que otros usuarios puedan beneficiarse de esta macro!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas