Macro para definir nombre de conjunto según contenido textual de la celda de arriba

Soy nuevo en el foro, agradeciendo de antemano su ayuda, quisiera hacer una macro para definir nombres de conjuntos pero que este nombre sea el de la celda de arriba del conjunto. Los datos están de la sig forma:

              A

1 Proveeedor1

2     Lapices

3     Borradores

4     Colores

5 Proveedor2

6    Tinta

7     Gomas

8 Proveedor3 

9      Camisas

10 Zapatos

11 Libros

12        Vasos

Quiero nombrar por ejemplo nombrar a A6:A7 "Proveedor2" y A9:A12 "Proveedor3" y así sucesivamente. Son muchos proveedores y tienen diferentes cantidades de servicios.

1 respuesta

Respuesta
1

Para saber que de A2 a A4 (lapices, borradores, colores) pertenecen al Proveedor1, tiene que existir alguna marca que los identifique. Por ejemplo, en la columna B poner el proveedor.

            A                               B          

1 Proveedor 1

2     Lapices                        Proveedor1

3     Borradores                 Proveedor1

4     Colores                       Proveedor1

5 Proveedor 2

6    Tinta                            Proveedor2

7     Gomas                        Proveedor2

Etc.


Por nombre, ¿te refieres a los que se definen en la administración de nombres?

Hola! Gracias por tu comentario, si a eso me refiero en definir nombre.

Y lo que necesito es una macro que me haga ese trabajo porque la lista es muy larga.

Otra vez

Para saber que de A2 a A4 (lapices, borradores, colores) pertenecen al Proveedor1, tiene que existir alguna marca que los identifique. Por ejemplo, en la columna B poner el proveedor.

            A                               B          

1 Proveedor 1

2     Lapices                        Proveedor1

3     Borradores                 Proveedor1

4     Colores                       Proveedor1

5 Proveedor 2

6    Tinta                            Proveedor2

7     Gomas                        Proveedor2

Etc.

La marca la tienes que poner , ¿o cómo va a saber la macro que la celda A5 pertenece a otro proveedor?

Tienes que organizar los datos, ninguna macro va a saber qué productos pertenecen a cuál proveedor, eso solamente lo sabes TÚ.

Yo solamente te puse un ejemplo, pero tienes que decirme de cuál marca a cuál marca pertenecen al proveerdor1, de cuál marca a cuál marca pertenecen al proveedor2, etc. Una vez que tengas las marcas, ya puedo crear una macro que de la marcaX a la marcaY les ponga el nombre "proveedor1"

Cuanto tengas los datos organizados pones una imagen para ver cómo los organizaste y entonces genero la macro para poner nombres.

Hola disculpa no habia respondido porque hasta ahora fue que me entregaron el archivo y pude ver como viene organizada la información

 La idea es, por ejemplo, definir nombres a los rangos:

Rango       Nombre

B2:B9        ABB SA

B10:B19    ABREGO Y GONCALVES SA

B20:B25   AGENCIA MARITIMA DULCE SA

Luego lo mismo para la otra comlumna-.

Rango       Nombre

C1:C4       4510055261

C5:C9       4600112334

C10:C13   4510055473

Así sucesivamente.

piensa que esta hoja tiene mas de 25mil filas con variables cantidades de Purchasing doc. y Short text.

Muchas gracias de antemano por tu ayuda

Entonces si tienes 25,000 registros y quieres nombres por la columna B y otros tantos por la columna C, entonces pueden existir 50,000 nombres, ¿eso es lo que quieres?

Otra duda, dices que el nombre de las celdas de la columna B va a ser el nombre que está en la columna A, ejemplo: "ABREGO Y GONCALVES SA", pero los nombres no aceptan espacios, entonces el nombre quedaría así: "ABREGO Y GONCALVES SA" o puede ser así: ABREGO_Y_GONCALVES_SA"

Con los 25mil filas quise decir el tamaño aproximado del numero de filas hasta abajo pero son menos nombres porque ellos se repiten en las filas. Pero si deben ser miles. 

Y exactamente todo lo que no acepte el nombre (espacios y caracteres especiales) se pueden transformar en _ 

De hecho tengo unos nombres que contienen "&" "," "." paréntesis abre y cierra. 

Gracias 

Te anexo la macro

Sub PonerNombres()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    c = "A"
    u = Range("A" & Rows.Count).End(xlUp).Row
    With h1.Sort
     .SortFields.Clear
     .SortFields.Add Key:=h1.Range("A2:A" & u)
     .SortFields.Add Key:=h1.Range("B2:B" & u)
     .SetRange h1.Range("A1:C" & u): .Header = xlYes: .Apply
    End With
    '
    ant = Cells(2, c)
    ini = 2
    For i = 2 To u + 1
        If ant <> Cells(i, c) Then
            nombre = Replace(ant, " ", "_")
            ActiveWorkbook.Names.Add Name:=nombre, _
            RefersToR1C1:="=Hoja1!R" & ini & "C1:R" & i - 1 & "C1"
            ini = i
        End If
        ant = h1.Cells(i, c)
    Next
    '
    c = "B"
    ant = Cells(2, c)
    ini = 2
    For i = 2 To u + 1
        If ant <> Cells(i, c) Then
            nombre = "P_" & Replace(ant, " ", "_")
            ActiveWorkbook.Names.Add Name:=nombre, _
            RefersToR1C1:="=Hoja1!R" & ini & "C2:R" & i - 1 & "C2"
            ini = i
        End If
        ant = h1.Cells(i, c)
    Next
    MsgBox "Terminado", vbInformation
End Sub

Hola, ejecute la macro y arroja un error 400

Hola Disculpa me di cuenta que el error era porque algunos caracteres no se aceptan como nombre de rangos, ya la macro se ejecutó pero No está nombrando el rango en la columna correcta. Es decir, Esta definiendo 

RangoMacro         RangoCorrecto       Nombre

 A2:A9                         B2:B9                      ABB SA

A10:A19                     B10:B19                ABREGO Y GONCALVES SA

A20:A25                     B20:B25                AGENCIA MARITIMA DULCE SA

y lo mismo para la columna B

Te anexo la macro actualizada.

Los nombres de la columna B empezarán con D_ y los nombres de la columna C empezarán con P_

Sub PonerNombres()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    c = "A"
    u = Range("A" & Rows.Count).End(xlUp).Row
    With h1.Sort
     .SortFields.Clear
     .SortFields.Add Key:=h1.Range("A2:A" & u)
     .SortFields.Add Key:=h1.Range("B2:B" & u)
     .SetRange h1.Range("A1:C" & u): .Header = xlYes: .Apply
    End With
    '
    ant = Cells(2, c)
    ini = 2
    For i = 2 To u + 1
        If ant <> Cells(i, c) Then
            nombre = "D_" & Replace(ant, " ", "_")
            ActiveWorkbook.Names.Add Name:=nombre, _
            RefersToR1C1:="=Hoja1!R" & ini & "C2:R" & i - 1 & "C2"
            ini = i
        End If
        ant = h1.Cells(i, c)
    Next
    '
    c = "B"
    ant = Cells(2, c)
    ini = 2
    For i = 2 To u + 1
        If ant <> Cells(i, c) Then
            nombre = "P_" & Replace(ant, " ", "_")
            ActiveWorkbook.Names.Add Name:=nombre, _
            RefersToR1C1:="=Hoja1!R" & ini & "C3:R" & i - 1 & "C3"
            ini = i
        End If
        ant = h1.Cells(i, c)
    Next
    MsgBox "Terminado", vbInformation
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas