Jump to content

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


marcelomauricio1

Recommended Posts

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

Link to post
Share on other sites

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.

Link to post
Share on other sites

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.

Link to post
Share on other sites

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

Link to post
Share on other sites

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.

Link to post
Share on other sites

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.

Link to post
Share on other sites

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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.

Link to post
Share on other sites

Archived

This topic is now archived and is closed to further replies.



  • Posts

    • datos a traer.xlsx   Buenas tardes, en el archivo adjunto hay 2 hojas (datos y base), lo que necesito es que en la hoja datos en cada columna de fecha me traiga de la hoja base las fechas de cada uno de los clientes, ejemplo del sr anselmo en la celda E2 deberia traer la fecha 20/01/2020, en la celda F2 deberia traer la fecha 21/02/2020 y asi sucesivamente si tuviera otra fecha   Quedo pendiente de su ayuda
    • Silvia,   Dsiculpa hay alguna forma de poder transcribir la formula: a hoja de calculo de google?, lo que pasa esque trabajo en ellas y al subirla, no lee la formula "AGGREGATE", manda error. Otro punto, al correr la formula en excel para las siguientes semanas, (W40, W41, 42,ETC) veo que se repite el ID de las primeras semanas, ejemplo: W39 -> ID 7052248, W40 -> 7044231...... W41 -> 7044231, W42 -> 7052248. En pocas palabras me esta repitiendo los IDs de las ultimas semanas, crees -de acuerdo a tu experiencia- que se pueda crear una formula para que me busque el ID mas viejo (id asignado a esta tienda de las primeras semanas, que no se haya seleccionado en las ultimas semanas [2], que tenga menos selecciones[menos repetidos en las semanas], y que siempre toma el historial de las ultimas 10 semanas ). El fin de esto es que a lo largo de una serie de semanas, los IDs queden de cierta manera ordenados y me de un sistema ciclico. Muchas gracias por tu apoyo, espero me puedas ayudar ya que eres una crack¡ Saludos.  
    • Buenas tardes Eres muy amable.  Lo que pretendo es que el combobox1, recoja los valores de la hoja llaves los valores que están en "A"sin incluir las celdas vacías, teniendo en cuenta que  se puede ampliar el numero de llaves. En el combobox2, que recoja los valores de la hoja llaves, los valores que están en la columna F y en el combobox3 los que están en la columna G. Todo ello sin incluir los espacios en blanco y teniendo en cuenta que la lista se puede ampliar. Se que es muy lioso y me explico fatal pero te adjunto el archivo por si tienes un momento y me puedes ayudar si se puede hacer.  Muchas graciasLLAVES.xlsm
    • hola JSDJSD  perdona el retraso pero he estado con otros temas y he vuelto a retomar el tema, lo que me has enviado al final lo que hace es separar lo que hace cada numero de usuario pero no es lo que busco, lo que necesito es que me diga dentro de un margen de horas, por ejemplo de 10 a 11 el numero de filas que ha hecho, te adjunto otro fichero con un solo usuario pero veras el rango de fechas que tiene, en un mismo día dentro de una misma hora puede haber 12 filas,todo esta en la fila M, pues necesito poder tener por ejemplo  de 10 a 11 ha realizado 12 filas, de 11 a 12 ha realizado 3 filas, y asi siempre que haya un rango de filas en horario, si no me he explicado bien y me puedes ayudar dimelo y te lo intento explicar mejor, de todas formas lo que me has enviado esta muy bien pero no es lo que busco pero lo aplicare porque me viene bien.   productividad por horas.xlsx
    • Bueno basicamente necesito una macro que me ordene la columna A por los colores que tengan las celdas. Seguramente se habrá abierto este tema anteriormente pero aunque he buscado en los foros no lo encuentro. Tengo un archivo con varias columnas y quiero que se ordene la columna A junto con los datos que contienen las demas columnas. ordenar por color.xls
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy