Saltar al contenido

funcion que me devuelva la ubicacion de una celda...


marcelomauricio1

Recommended Posts

publicado

Hola amigos del foro, Estoy en un problema serio con una función o formulas anilladas de excel, por favor pido socorro... Necesito una formula o función, que haga lo siguiente: tengo una tabla que recibe datos de una hoja llamada principal, esta tabla guarda registros que no pueden ser borrados, por eso, necesito a partir de otra planilla que ya cree, con el nombre de correcciones, ya tengo las formulas de búsqueda, osea, que dependiendo de un dato, me viene toda la información que necesito verificar para poder corregir lo que este errado, para tal fin necesito una función, que me permita corregir esos datos, que se encuentran en una fila completa, o sea, copiar mediante acro, las informaciones correjidas, pero en la misma fila donde se encontraba el dato errado, solo que esta fila no es fija, puede estar en cualquier ubicación de la hoja, espero hacerme entender, disculpen si me he enredado un poco..

Les subo un archivo de ejemplo.

Mil gracias de antemano.

NUEVO CONTROL CLINKER casi listo para ayuda.zip

publicado

Hola, Marcelo.

He estado viendo y estudiando lo que haces y lo que requieres hacer. No recuerdo en este momento si la interfaz normal de Excel tenga alguna función pre-definida de búsqueda que, además de hallar lo que buscas, te diga en cuál fila lo encontró, y eso es precisamente lo que necesitas, y que la función BUSCARV no te puede dar.

Lo que debe hacerse es crear un subprograma tipo "sub" para realizar tu búsqueda personalizada, el cual debe alimentarse de los datos que tiene cada una de tus funciones BUSCARV y devolver la fila donde se encuentra el valor que debe corregirse. No tengo mucho tiempo en este momento, pero, si algún otro usuario no te ha dado solución de aquí al domingo, yo puedo resolver y entregarte lo que necesitas.

Saludos,

Elio.

publicado

Gracias Elio por tu pronta respuesta, te comento que por fin halle en el foro la formula que buscaba para que me devuelva la celda en cuestión de donde proviene el dato. la formula es esta: =CELDA("DIRECCION";DESREF(C6;FILA(Tabla!C4:C20)+COINCIDIR(C6;Tabla!C4:C20;0)-7;COLUMNA(E6)*0))

ahora lo que necesito es el mayor problema a resolver, jejeje.. ahora, una vez que tengo ubicada la celda de la tabla y me da toda la información de esa linea, necesito poder cambiar los datos errados y que estos, a través de una función o de una macro, copie los valores correctos a las filas indicadas... como es por fila, creo la función pegar no seria tan seria, como si la macro o función que establezca exactamente desde que fila debe ser copiada la información, espero haberme explicado amigo, y te ruego una ayuda a ti y a los amigos del foro...

Un saludo.

publicado

Hola Marcelo y serviprofer.

Marcelo, leyendo sus comentarios:

necesito poder cambiar los datos errados y que estos, a través de una función o de una macro, copie los valores correctos a las filas indicadas... como es por fila, creo la función pegar no seria tan seria, como si la macro o función que establezca exactamente desde que fila debe ser copiada la información,

Me parece que en el fondo todo el trabajo que estas haciendo acabara siendo inútil ya que, como bien dices, recorrerá a una macro para actualizar los datos.

Bien, con la experiencia de haber hecho un sin números de tablas similares a la tuya yo podría escribirte por varias horas argumentando sobre los esto, pero mejor te subo un archivo con un modelo para que mires, saques alguna idea y comente.

Saludos.

Alta baja en ListBox - Adrian.rar

publicado

Amigo, mil gracias por tan buen ejemplo, seria muy bueno si pudiera aplicarlo a mi trabajo, lamentablemente no se trabajar con formularios como el de tu ejemplo, lo que pasa es que tendría que aparecerme todos los datos de mi planilla para que pueda ser modificado uno o varios, y no se como podría ampliar el cuadro... son 28 celdas con datos, de las cuales podría necesitar corregir varias, te das cuenta?, seria mucho pedirte si me explicas como aumentar celdas al cuadro que subiste de ejemplo?.

buscando en los distintos foros de Excel en la red, encontré una macro que tal vez pueda ayudarme, solo que no se como cambiar ciertos parámetros, la macro es la siguiente:

Sheets("correccion").Range("B47:AI47").Copy

Sheets("Tabla").Cells(Rows.Count, "C").End(xlUp).Offset(1).PasteSpecial _

Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True

donde sheet correccion es la hoja donde estarán los datos a corregir, sheet tabla es donde deben ir los nuevos valores corregidos, uso la formula: =CELDA("DIRECCION";DESREF(C6;FILA(Tabla!C4:C20)+COINCIDIR(C6;Tabla!C4:C20;0)-7;COLUMNA(E6)*0))

para encontrar la ubicación exacta de la linea donde se encuentran los datos a corregir, esta formula me devuelve la dirección de la primera celda de la linea por ejemplo C20, esta formula esta en la celda K22 de mi hoja correcciones, lo que no se como adecuar la macro o función ahora, es que a partir de esa dirección (que puede variar) la propia función o macro me copie los datos a modificar a partir de la información de la celda K22, que es la referencia de la primera linea de datos a cambiar, pufff... espero me hayas entendido, me hubiera gustado pasarte una copia completa de mi trabajo para que lo veas, pero es muy pesado y no consigo subirlo, ni comprimido, aguardo tu gentil respuesta.

publicado

Si entendí bien, bueno, entonces he dado con la solución. Comentaré a continuación el código que he escrito en el libro Excel (habilitado para macros/ archivo .xlsm) del archivo adjunto:

Función para conseguir la fila:

Public Function BuscarFila(ValorBuscado As Long) As Long

Dim UltimaFilaTabla As Long, FilaTabla As Long, ValorTabla As Long

UltimaFilaTabla = Worksheets("Tabla").Range("A3").End(xlDown).Row

For FilaTabla = 4 To UltimaFilaTabla

ValorTabla = Worksheets("Tabla").Range("A" & FilaTabla).Value

If ValorTabla = ValorBuscado Then

BuscarFila = FilaTabla

Exit For

End If

Next FilaTabla

End Function

Código del botón Corregir:

Private Sub CommandButton1_Click()

Dim FilaCorr As Long, strNuevoValor As String, strDatoActual As String, ValorBuscado As Long, fila As Long

ValorBuscado = Range("E6").Value

fila = BuscarFila(ValorBuscado)

For FilaCorr = 2 To 40

If FilaCorr Mod 2 = 0 Then

strNuevoValor = Range("I" & FilaCorr).Value

strDatoActual = Range("E" & FilaCorr).Value

If strNuevoValor <> strDatoActual Then

Select Case FilaCorr

Case 12

Worksheets("Tabla").Cells(fila, 35).Value = strNuevoValor

Case 14

Worksheets("Tabla").Cells(fila, 12).Value = strNuevoValor

Case 16

Worksheets("Tabla").Cells(fila, 13).Value = strNuevoValor

Case 18

Worksheets("Tabla").Cells(fila, 14).Value = strNuevoValor

Case 20

Worksheets("Tabla").Cells(fila, 19).Value = strNuevoValor

Case 22, 24, 26, 28, 30, 32, 34, 36, 38, 40

Worksheets("Tabla").Cells(fila, 3).Value = strNuevoValor

End Select

End If

End If

Next FilaCorr

End Sub

OBSERVACIONES ADICIONALES:

El código de la macro sólo corregirá en caso de que encuentre diferencias entre los valores de las columnas "I" y "E", es decir, entre "Nuevo valor" y "Dato actual" de la hoja "corrección".

El código de corrección ha sido desarrollando teniendo en cuenta el valor de "Indicador de columna" de la función BuscarV que tienes en las diferentes celdas de la columna "E" (hoja "corrección").

En la hoja "corrección", noto que a partir de la fila 22 (incluyéndola), todos los valores "Indicador de columna" de tus fórmulas con función BuscarV son iguales a 3. Por esa razón, podrás notar que en el código anterior los valores del último "Case" son 22, 24, 26, 28, 30, 32, 34, 36, 38, 40.

Espero haber sido de utilidad. Cualquier cosa me avisas.

Elio.

- - - - - Mensaje combinado - - - - -

Marcelo:

El sistema de este foro no me deja subir el archivo con la macro porque excede por un poco el tamaño máximo permitido. Si me envías un mensaje privado con tu dirección de email puede hacerlo llegar a tu correo. Lo he comprimido como .zip y como .rar, pero, nada, da igual.

publicado

Hola Marcelo y serviprofer.

Marcelo, creo que con la respuesta de serviprofer ya puedes resolver su problema, pero como yo habia estado trabajando en una macro gravada también la subo, para no perder mi trabajo.

serviprofer, espero que no se moleste; mi macro no es tan elegante como la tuya pero quizá pueda dar algunas ideas, al final de esto se trata...

Creo que un buen aporte es el "control de cambios" que inserí al libro y el mayor problema es que sencillamente hice un Copy/Paste, copia en la vertical y pega en la horizontal, por lo que se tendría que acomodar o la hoja "Tabla" o la hoja "Correccion" para que estén en el mismo orden.

No la acomode yo porque preferí dejar este trabajo a Marcelo que es quien sabe lo que mas le conviene, ademas se borraran las referencias los nombre de las columnas en la hoja Tabla y no salen los nombres.


[/COLOR]Sub Actualizar()


Dim fila As Variant
fila = Sheets("correccion").Range("E5").Value + 4


Application.ScreenUpdating = False


Sheets("Control de cambios").Select
ActiveSheet.Unprotect ""


Sheets("Tabla").Select
ActiveSheet.Unprotect ""
Range("B" & fila & ":AD" & fila).Select
Selection.Copy

Sheets("Control de cambios").Select
Range("A5").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend


Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Application.CutCopyMode = False

Sheets("correccion").Select
Range("I13:I41").Select
Selection.Copy

Sheets("Control de cambios").Select


Range("A5").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend


Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.CutCopyMode = False


Range("B1:C3").Select
Selection.Copy


Range("B1").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend


ActiveSheet.Paste


Range("B2").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend
ActiveCell.Offset(0, -2).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection = Now


Sheets("Tabla").Select
Range("C" & fila).Select
Selection.Copy

Sheets("Control de cambios").Select
Range("B2").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


ActiveSheet.Protect ""


Sheets("correccion").Select
Range("I13:I41").Select
Selection.Copy

Sheets("Tabla").Select
Range("B" & fila).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=True, Transpose:=True

Application.CutCopyMode = False

Range("A12").Select
ActiveSheet.Protect ""

Sheets("correccion").Select
Range("G13:G41").Select
Selection.ClearContents

Application.ScreenUpdating = True


MsgBox "Dato actualizado correctamente, fue creado un registro en la hoja" & vbCrLf & "''Control de cambios''."


Range("A12").Select
End Sub
[/CODE]

[color=#4d5153]Aguardo sus comentarios.

[/color]

Saludos.

[color=blue]- - - - - Mensaje combinado - - - - -[/color]

Hola Marcelo y [color=#4D5153]serviprofer.

Marcelo, creo que con la respuesta de [/color][color=#4d5153]serviprofer ya puedes resolver su problema, pero como yo habia estado trabajando en una macro gravada también la subo, para no perder mi trabajo.

[/color][color=#4D5153]

serviprofer, [/color][color=#4d5153]e[/color][color=#4d5153]spero que[/color][color=#4D5153] no se moleste; mi macro no[/color][color=#4D5153] es tan elegante como la tuya [/color][color=#4D5153]pero quizá pueda dar algunas ideas, al final de esto se trata...[/color]

[color=#4d5153]Creo que un buen aporte es el "control de cambios" que inserí al libro y el mayor problema es que sencillamente hice un Copy/Paste, copia en la vertical y pega en la horizontal, por lo que se tendría que acomodar o la hoja "Tabla" o la hoja "Correccion" para que estén en el mismo orden.

No la acomode yo porque preferí dejar este trabajo a Marcelo que es quien sabe lo que mas le conviene, ademas se borraran las referencias los nombre de las columnas en la hoja Tabla y no salen los nombres.

[CODE]
[/COLOR]Sub Actualizar()


Dim fila As Variant
fila = Sheets("correccion").Range("E5").Value + 4


Application.ScreenUpdating = False


Sheets("Control de cambios").Select
ActiveSheet.Unprotect ""


Sheets("Tabla").Select
ActiveSheet.Unprotect ""
Range("B" & fila & ":AD" & fila).Select
Selection.Copy

Sheets("Control de cambios").Select
Range("A5").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend


Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Application.CutCopyMode = False

Sheets("correccion").Select
Range("I13:I41").Select
Selection.Copy

Sheets("Control de cambios").Select


Range("A5").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend


Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.CutCopyMode = False


Range("B1:C3").Select
Selection.Copy


Range("B1").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend


ActiveSheet.Paste


Range("B2").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend
ActiveCell.Offset(0, -2).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection = Now


Sheets("Tabla").Select
Range("C" & fila).Select
Selection.Copy

Sheets("Control de cambios").Select
Range("B2").Select
While ActiveCell.Value <> Empty
ActiveCell.Offset(0, 1).Select
Wend
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


ActiveSheet.Protect ""


Sheets("correccion").Select
Range("I13:I41").Select
Selection.Copy

Sheets("Tabla").Select
Range("B" & fila).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=True, Transpose:=True

Application.CutCopyMode = False

Range("A12").Select
ActiveSheet.Protect ""

Sheets("correccion").Select
Range("G13:G41").Select
Selection.ClearContents

Application.ScreenUpdating = True


MsgBox "Dato actualizado correctamente, fue creado un registro en la hoja" & vbCrLf & "''Control de cambios''."


Range("A12").Select
End Sub
[/CODE]

[color=#4d5153]Aguardo sus comentarios.

[/color]

Saludos.

NUEVO CONTROL CLINKER casi listo para ayuda.rar

publicado

Una Opcion en la que deberan ajustarse los rangos.

En un modulo regular:
Sub Capturar()
'DEBEN AJUSTARSE LOS RANGOS
Application.ScreenUpdating = False
For Col = 8 To 2 Step -1
Sheets("Tabla").Columns(Col).Insert
Next
Sheets("Tabla").Range("A3:N3").Copy
Sheets("Opcion").[C12].PasteSpecial Paste:=xlPasteValues, Transpose:=True
Sheets("Tabla").Range("A" & Sheets("Opcion").[E6].Value + 3).Resize(, 14).Copy
With Sheets("Opcion")
.[E12].PasteSpecial Paste:=xlPasteValues, Transpose:=True
.[I12:I26].Formula = "=IF(E12="""","""",IF(G12="""",E12,G12))"
.[E6].Select
End With
Application.ScreenUpdating = True
End Sub
Sub Corregir()
'DEBEN AJUSTARSE LOS RANGOS
Application.ScreenUpdating = False
Sheets("Opcion").[I12:I24].Copy
Sheets("Tabla").Range("C" & Sheets("Opcion").[E6].Value + 3).PasteSpecial Paste:=xlPasteValues, Transpose:=True
For Col = 14 To 2 Step -2
Sheets("Tabla").Columns(Col).Delete
Next
Application.ScreenUpdating = True
End Sub
[/CODE]

Para bajar el libro:

https://docs.google.com/file/d/0BwedMfHTCustOGprVEFWQ0NoWUk/edit?usp=sharing

publicado

Gracias Armando por tu respuesta, te pido mil disculpas, pues el archivo que subi, lamentablemente fue con errores, la verdad es que para poder subirlo le he borrado varias paginas, es mas, hasta le quite algunas formulas, porque no me permitia el tamaño minimo para subir el archivo, si me permites tu correo te puedo enviar una copia de mi planilla completa, asi podras revisdarla mejor, ya que me enrede totalmente en esto, jejeje.

Un saludo amigo, mil gracias por la ayuda tan valiosa a tantos iniciantes en el gran mundo Excel..

- - - - - Mensaje combinado - - - - -

Amigo, recién conseguí ver el ejemplo que me enviaste y esta muy bueno, solo que note que me traspone algunos datos, y en realidad es mi culpa por no haber enviado mi planilla de ejemplo con los encabezados correctos, me gustaría mandarte mi planilla, pues para evitar el copiar datos a otra hoja y después traerlos nuevamente a la tabla, tengo en mi planilla original una linea completa con todos los datos de mi tabla, posea con los encabezados y los valores que me busca la formula buscarv.... de esta manera, los datos se podrían copiar desde la hoja corrección a la hoja tabla por filas completas mismo....

Un saludo, aguardo tus comentarios amigo.

publicado

Saludos,HBanchieri.

No, por el contrario, no es razón para que alguien se moleste. Es un completo placer colaborar por acá con la mayor cantidad de personas posibles, intercambiar ideas y aprender de otros.

Elio.

Archivado

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

×
×
  • 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.