Saltar al contenido

Poner a cada rango un nombre especifico


Recommended Posts

publicado

Buenas tardes

Saludos mi consulta es la siguiente.

Quisiera hacer una macro para que digamos ponga a cada rango el nombre especificado de a1, b1 etc.

Pero si digamos hubieses nuevos datos después de haber puesto el nombre al ejecutar la macro me borre los nombres actuales y me actualice con los nuevos.

Ej. si en a13 no hay datos el rango de (nombre2) seria de a2:a12, pero si mas adelante le pusiera mas datos hasta a17 el nuevo rango seria de a2:a17.

gracias por la ayuda.

subo archivo.

nombres.rar

publicado

Gracias Raúl, pero que pena no haberme explicado bien, no es poner el nombre del rango a la primera fila sino a ese rango (a2:a11) ponerle el nombre de la primera fila a este rango. Por medio de administrar nombres, para que lo tome como rango. Gracias por tu ayuda.

ActiveWorkbook.Names.Add Name:="nombres1", RefersToR1C1:= _

"=nombres!R2C1:R12C1"

publicado

Si creas una tabla??? Inicio, Dar Formato como a Tabla. En Herramientas de Tabla, A la izquierda (la primera opción) le pones un nombre. No importa si agregas filas o columnas, el nombre de tabla se adecuará. Las tablas existen a partir de Excel 2007

publicado

Amigo gracias por tu tiempo serias tan amable de explicar línea por línea para entender un poco mejor que es lo que hace.

De igual manera modifique esta línea, para que sin importar la cantidad de columnas funcione, sin importar sin son menor o mayor que 15.

[xfd1].Select
Selection.End(xlToLeft).Select
col = ActiveCell.Column[/CODE]

[CODE]Sub AgregaRangos()
Sheet1.Activate
[xfd1].Select
Selection.End(xlToLeft).Select
col = ActiveCell.Column
[a1].Select
TTT = Range(ActiveCell.Address).Column
Do While Range(ActiveCell.Address).Column < col + 1 '15
If ActiveCell <> Empty Then
CCC = Split(ActiveCell.Address, "$")(1)
Range(CCC & "1").End(xlDown).Offset(1, 0).Select
RRR = Range(ActiveCell.Address).Row - 1
ActiveWorkbook.Names.Add Name:=Range(CCC & "1"), RefersToR1C1:=Range(CCC & "2:" & CCC & RRR)
Range(CCC & "1").Select
ActiveCell.Offset(0, 1).Activate
Else
ActiveCell.Offset(0, 1).Activate
End If
Loop
[a1].Select
End Sub[/CODE]

Lo unico seria que cuando ya esten creados, los borre y vuelva hacer uno nuevo.

eneste paso estoy trancado, garadezco tu colaboracion.

publicado

Vaya!! No hace falta tanto código! Lo más sencillo es que trabajes con una tabla. Excel automáticamente cambiará las dimensiones del rango al cuál hace mención esa tabla para que se adecúe al cuadro de datos.

Pero si insisten en querer que el nombre de redimensione solo, el código es pequeño y funciona sin importar la cantidad de filas o columnas del cuadro!

    
With Worksheets("Hoja1")
.Names("PRUEBA").RefersTo = .Range("PRUEBA").CurrentRegion
.Range("Prueba").Select
End With[/CODE]

publicado

FalexRamos:

Agrega este codigo en la parte superior del Codigo para eliminar los Nombres de Rango existentes.

Sub AgregaRangos()

Sheet1.Activate

For Each Name In ActiveWorkbook.Names

Name.Delete

Next

....

.....

Saludos

publicado
FalexRamos:

Agrega este codigo en la parte superior del Codigo para eliminar los Nombres de Rango existentes.

Sub AgregaRangos()

Sheet1.Activate

For Each Name In ActiveWorkbook.Names

Name.Delete

Next

....

.....

Saludos

Gracias funciona perfecto para quitar los nombres creados.

________________________________________________________///////_____________________________________________________________

Vaya!! No hace falta tanto código! Lo más sencillo es que trabajes con una tabla. Excel automáticamente cambiará las dimensiones del rango al cuál hace mención esa tabla para que se adecúe al cuadro de datos.

Pero si insisten en querer que el nombre de redimensione solo, el código es pequeño y funciona sin importar la cantidad de filas o columnas del cuadro!

    
With Worksheets("Hoja1")
.Names("PRUEBA").RefersTo = .Range("PRUEBA").CurrentRegion
.Range("Prueba").Select
End With[/CODE]

DiegoPC, con respecto a esto, puedes subir un ejemplo este código que indicas no se en donde ponerlo o como funciona, gracias por tu ayuda.

Subo archivo.

Nombres funciona final.rar

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      29

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    2    1

  • Crear macros Excel

  • Mensajes

    • Que tal nuevamente,  adjunto una solución alternativa: =MAX(A:.A)-BYROW(F4:.AK20,LAMBDA(r,BUSCAR(2,1/(r=0),F3:.AK3))) Cabe mencionar que esta solución requiere funciones nuevas como RECORTAR.RANGO. CONTADOR FINAL (Solucion).xlsb
    • Buenos días,  espero se encuentren bien de salud compañeros, Favor me podrían ayuda con lo siguientes como se podría hacer cuando tengo una tabla dinámica que  amedida que se aumente las columnas fechas con data un formula que se coloco al final busque o analice siempre la ultima fila y columna de la fecha. Coloco un ejemplo
    • @JSDJSD Excelentes, GRACIAS POR TU SOPORTE , me ayudo demasiado es exactamente lo que quería. 5 ESTRELLAS
    • 'Opción 1 Sub FiltrarSKUPorFecha(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim diccionarioSKU As Object Dim listaEliminar As Object Dim fechaActual As String, fechaSiguiente As String Dim f As Variant With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Crear diccionarios para comparar SKU y almacenar filas a eliminar Set diccionarioSKU = CreateObject("Scripting.Dictionary") Set listaEliminar = CreateObject("Scripting.Dictionary") ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then diccionarioSKU.RemoveAll ' Limpiar el diccionario antes de llenarlo ' Guardar los SKU de la fecha siguiente (solo de la siguiente) For f = fila + 1 To ultimaFila If .Cells(f, 1).Value <> fechaSiguiente Then Exit For diccionarioSKU(.Cells(f, 2).Value) = 1 Next f ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Solo eliminar si el SKU no está en la fecha siguiente If Not diccionarioSKU.exists(.Cells(f, 2).Value) Then listaEliminar(f) = 1 ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar.keys .Rows(f).Delete Next End With MsgBox "Completado correctamente.", vbInformation End Sub 'Opción 2 Sub FiltrarSKUPorFecha1(): Application.ScreenUpdating = False Dim ultimaFila As Long, fila As Long Dim listaEliminar As Collection Dim fechaActual As String, fechaSiguiente As String Dim f As Variant, i As Long Dim SKUExiste As Boolean With Sheets("Consolidado") ultimaFila = .Cells(.Rows.Count, 1).End(xlUp).Row ' Inicializar la colección para marcar las filas a eliminar Set listaEliminar = New Collection ' Recorrer desde la primera fila hasta la penúltima For fila = 2 To ultimaFila - 1 fechaActual = .Cells(fila, 1).Value fechaSiguiente = .Cells(fila + 1, 1).Value ' Solo comparar la fecha actual con la siguiente (inmediatamente superior) If fechaActual <> fechaSiguiente Then ' Revisar los SKU de la fecha actual y marcar los que deben eliminarse For f = fila To 2 Step -1 If .Cells(f, 1).Value <> fechaActual Then Exit For ' Comprobar si el SKU está en la fecha siguiente SKUExiste = False For i = fila + 1 To ultimaFila If .Cells(i, 1).Value <> fechaSiguiente Then Exit For If .Cells(i, 2).Value = .Cells(f, 2).Value Then SKUExiste = True Exit For End If Next i ' Si el SKU no se encuentra en la fecha siguiente, marcar para eliminar If Not SKUExiste Then listaEliminar.Add f ' Marcar fila para eliminar después End If Next f ' Ya no es necesario seguir buscando después de comparar la primera y la siguiente fecha Exit For End If Next fila ' Eliminar las filas marcadas sin afectar el bucle principal For Each f In listaEliminar .Rows(f).Delete Next f End With MsgBox "Completado correctamente.", vbInformation End Sub   TABLA ELIMINAR.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.