Foro de Ayuda Excel | ||
| Soluciona tus problemas con Excel |
| | |||||||
| Registrarse | Preguntas Frecuentes | Lista de Foreros | Calendario | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
| | LinkBack | Herramientas | Desplegado |
|
#1
| |||
| |||
| BUENOS DIAS A TODOS DESEO HACER UNA MACRO QUE ME INDIQUE LA DIRECCION DE UN DATO EN UN LIBRO DE 12 HOJAS DIFERENTES, ENTONCES DESEO BUSCAR LOS QUE TENGAN n/a Y QUE EM DIGA LA POSICION ES POSIBLE ESO?? PORFAVOR SI ME PUEDEN AYUDAR LES AGRADEZCO ALEJO |
|
#2
| |||
| |||
| Haz un bucle the la siguiente forma mas o menos: for each hojas in thisworkbook.worksheets hojas.activate for each celda in hojas on error resume next if celda.value = "n/a" then msgbox celda.address ... next hojas |
|
#4
| |||
| |||
| Solo tienes que experimentar con estos objetos y veras lo facil que es manejarlos, si quieres buscar alguno o no tienes claro la jerarquia presiona F2 e iras al buscador de objetos. y tambien encuentras algo con el viejo F1. O puedes preguntar ya tratare de responderte.... y bueno pues como no es del otro mundo hay te dejo el codigo para que veas lo facil que era... --------------------------------------------------------------------------------- Código:
Sub EncuentraNAS()
Dim Hojas
Dim Celda As Range
i = 1
For Each Hojas In ThisWorkbook.Worksheets
On Error GoTo inicio
Hojas.Activate
Set Celda = Hojas.Range("A1")
For j = 1 To 150 '65536 es el maximo
For k = 1 To 100 '256 es el maximo
If Celda.Cells(j, k).Value = "n/a" Then
'//
Celda.Cells(j, k).Select
Range("Hoja1!A1").Cells(i, 1).Value = "<=>" & Celda.Worksheet.Name & "!" & Celda.Cells(j, k).Address
'//Debes identificar bien el rango, si dejas '=' quedara como vinculo.
i = i + 1
'------------------------------------------
End If
Next k
Next j
inicio:
If Err Then
Err.Clear
End If
Next Hojas
End Sub Última edición por Efasor fecha: 02/07/08 a las 05:52:39. Razón: Me falto poner un pedazo |
|
#6
| |||
| |||
| Pregunta, es posible que me devulva el valor de de la celda proxima, es decir si tengo N/A en a1 que me devuelva en lo que hay en b1 sera que offsetcell funciona es que no la he manejado mucho entonces nose como funciona bien gracias si em pueden colaborar |
|
#7
| |||
| |||
| Cita:
El macro te sirve para todo el libro, si lo que quieres es que desde un libro te abra varios libros deberas crear un objeto workbook para cada libro, o abrir libro a libro y correr el macro. No considero neceasrio hacer las modificaciones al macro a menos que la cantidad de libros sea enorme. |
|
#8
| |||
| |||
| Cita:
'// Para que te ubiques en el codigo y haces el cambio asi: If Celda.Cells(j, k).Value = "n/a" Then '// Celda.Cells(j, k).Select '//Range("Hoja1!A1").Cells(i, 1).Value = "<=>" & Celda.Worksheet.Name & "!" & '//Celda.Cells(j, k).Address este es codigo que devuelve la direccion Range("Hoja1!A1").Cells(i, 1).Value = Celda.Cells(j, k+1).value '//Asi modificado que devuelve el valor de la celda proxima, fijate en el k+1, es como si fuera una mtris de mxn y las posiciones son j,k... Mira en la ayuda de VB y con unas pequeñas modificaciones haras maravillas, como sabes cualquier duda puedes preh¡guntar. Última edición por Efasor fecha: 25/06/08 a las 01:37:59. |
|
#9
| |||
| |||
| hola. si gracias, pero yo lo ahbia intetando con un offset, pero ahora bien es que tengo es otro problema, Tengo unos datos en la columna a (100datos) y queiro que la macro coja el primeroque esta en a1 y lo busque en las hojasy que igual me devuelva la direccion, y que despues coja els egundo en a2 y vuelva a buscar y haga todo el proceso asi hasta lso 100 datos, yo he intetado con unos bucles anidados pero no funciona quedebo hacer algo asi llevo Dim Hojas Dim Celda As Range Sub Busqueda() i = 1 k = 1 For Each Hojas In ThisWorkbook.Worksheets On Error GoTo inicio Hojas.Activate Set Celda = Hojas.Range("A1") For j = 1 To 500 '65536 es el maximo For k = 1 To 40 '256 es el maximo If Celda.Cells(j, k).Value = "79733080" Then '// Celda.Cells(j, k).Select Range("Hoja1!A1").Cells(i, 1).Value = "<=>" & Celda.Cells(j, k).Value & Celda.Cells(j, k).AddressLocal(RowAbsolute:=False, ColumnAbsolute:=False) Range("Hoja1!B1").Cells(i, 1).Value = Celda.Cells(j, k).Offset(0, 1).Value '"<=>" && Celda.Cells(j, k).AddressLocal(RowAbsolute:=False, ColumnAbsolute:=False) 'Range("Hoja1!C1").Cells(i, 1).Value = Celda.Cells(j, k).Value '"<=>" & Celda.Worksheet.Name & "!" & Celda.Cells(j, k).AddressLocal(RowAbsolute:=False, ColumnAbsolute:=False) '//Debes identificar bien el rango, si dejas '=' quedara como vinculo. i = i + 1 k = k + 1 '------------------------------------------ End If Next k Next j inicio: If Err Then Err.Clear End If Next Hojas End Sub si me pude ayudar gracias =) |
|
#10
| |||
| |||
| El problema es muy simple le dices if celda.value = "78548555" '//Estas buscando un texto con el numero ese debes hacer los siguiente: if celda.value = 78548555 '//Sin las comillas y debera funcionar. Si lo que quires es buscar diferentes valores, amarral a una celda y no tendras problasmas con comillas y es: if celda.value = range("Hoja1!B1").cells(1,1).value '//y en la celda b1 de la hoja 1 pones el valor que buscas. si quieres variso valores haces un bucle. |
| Herramientas | |
| Desplegado | |
| |