Macro para buscar un dato en hojas de un libro y haga un listado de las hojas en que se encuentra

Hola, necesitaría que un experto me eche una mano, tengo un libro con 100 hojas y en la hoja 1 en la columna A un listado con 20 referencias numéricas, ¿sería posible con un macro buscar en las otras 99 hojas y que devuelva en la celda contigua (columna B) a cada referencia una lista con las hojas en que se encuentra el dato? Gracias por vuestra ayuda, realmente es de agradecer vuestra labor.

Un saludo

Nava

1 Respuesta

Respuesta
1

Con este código obtenés el nombre de cada hoja y lo pega a partir de de la celda 1 columna B

Sub NomHojas()
Dim fila As Integer
Dim hoja As Worksheet
fila = 0
For Each hoja In Worksheets
fila= fila+ 1

'se graba su nombre a partir de la celda B1 de la Hoja1

Worksheets("Hoja1").Cells(fila, 1) = hoja.Name
Next
End Sub

Espero te sirva, en www.programarexcel.blogspot.com encontrarás ejemplos para bajar, los cuales puedes explorar y encontrar códibos que puedes aplicar a tu proyecto.

Hola, gracias por contestarme tan rapido, he aplicado el macro y lo que me hace es listarme en la columna A de la hoja 1 el nombre de todas hojas restantes del libro, creo que mi planteamiento no está lo suficientemente claro, voy a ver si soy capaz de explicarme, tengo un libro con 100 hojas, la hoja 1, tiene por nombre hoja 1, pero desde la segunda hasta la 100 tienen nombre numérico (1101, 1102, 1103,.... hasta la 1200) cada una corresponde a una categoría y en cada categoría hay un montón de productos, en la hoja 1 en la columna A tengo un listado de referencias de productos (7052233, 7053042, 7065426....) hasta un total de 120 referencias, en la hoja 1 en la columna B tengo que poner el numero de cada categoría (hoja) separado por una coma, en la que se encuentra las referencias de la columna A, dicen que una imagen vale mas que mil palabras, espero haberme explicado bien, mil gracias, que en espera de respuesta. He subido una imagen a Mediafire

http://www.meiafire.com/view/?djdtl91b500rnem

A B

7252233 1101,1103,1114,1125

7053042 1115,1118,1125,1126,1129

7065426 1102,1124,1185,1195

Como estás, este código busca en todas las hojas del libro, una vez encontrado el dato lo trae a la primer hoja y agrega su nombre, tal como lo quieres tu, en www.programarexcel.blogspot.com está el ejemplo bájalo y adáptalo a lo que quieres, está hecho en función de lo que necesitas, espero tus comentarios.

Sub Nomhoja()
'Evito movimientos en la pantalla
Application.ScreenUpdating
= False
'Dimensiono variables
Dim fila, filah, contá As Integer
Dim hoja As Worksheet
Dim mihoja As String
Dim
valorcelda, concatena As String
fila = 2
filah = 2
contá = 0
'Controlo errores
On Error Resume Next
'para cada hoja del libro
For Each hoja In Worksheets
'filahoja = filahoja + 1
mihoja = hoja.Name
'Realiza el bucle buscando un dato mientras la fila no esté vacía
While Sheets("art").Cells(fila, 1) <> Empty And mihoja <> "Art"
' Realizó bucle en hoja donde busca datos
While Sheets(mihoja).Cells(filah, 1) <> Empty And contá = 0
dato1 = Sheets("art").Cells(fila, 1)
dato2 = Sheets(mihoja).Cells(filah, 1)
'Si el nombre de la columna uno de la hoja art es igual al nombre de la columna uno de la hoja correspondiente
If dato1 = dato2 Then
'es decir si encontró el dato, copia la dirección en la hoja art y voy a la fila siguiente de la hoja correspondiente
Sheets("art").Cells(fila, 3) = Sheets(mihoja).Cells(filah, 2)
If Sheets("art").Cells(fila, 2) <> Empty Then
'Sheets("art").Cells(fila, 2) = mihoja
valorcelda = Sheets("art").Cells(fila, 2)
concatena = valorcelda & "," & mihoja
Sheets("art").Cells(fila, 2) = concatena
Else
Sheets("art").Cells(fila, 2) = mihoja
End If
'Si encontró el dato hago que el contador sea 1 para que no busque más
contá = 1
Else
'Si no encontró el dato aumento la fila de la hoja address para seguir buscando hasta el final
filah = filah + 1
End If
Wend
'Aumento en uno la fila para seguir buscando el dato siguiente de la hoja art
fila = fila + 1
'Vuelvo filah y contador a su valor de origen
filah = 2
contá = 0
'sigo bucle
Wend
'Vuelvo las variables a su valor de origen
fila = 2
filah = 2
contá = 0
'Próxima hoja
Next
'Vuelvo movimientos de la pantalla a su estado original
Application.ScreenUpdating = True
End Sub

Hola, que tal, muchísimas gracias, de bien nacido es ser agradecido, es encomiable la labor que hacéis compartiendo vuestros conocimientos y facilitándonos la labor a muchos que se nos ha pasado el arroz para aprender ciertas cosas, lo dicho miles de gracias.

Un saludo

Nava

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas