¿Se podría optimizar fórmula?, menos pasos, "Coincidir, indice"

En reemplazo de "BuscarV", que me hace exactamente la misma función, solo que con menos pasos, (pero provocando errores como: "El aumento de peso en el archivo"), decidí usar "Coincidir e Indice", como es algo que usare escogiendo diferentes hojas y formatos, lo hice con varios "Inputbox", Total 5, en dos macros separadas, las cuales son las siguientes:

Sub Macro1()
Dim nombre As Range, hoja As String
With Application
Set nombre = .InputBox("Que quieres buscar", "Estudiante", Type:=8)
End With
hoja = Application.InputBox("Selecciona la autoevaluacion", Type:=8).address(External:=True)
ActiveCell.Formula = "=MATCH(" & nombre.address(0, 0) & "," & hoja & ",0)"
End Sub
Sub Macro2()
Dim matriz As String, numerodefila As Range, columna As Integer
matriz = Application.InputBox("Selecciona la matriz", Type:=8).address(External:=True)
With Application
Set numerodefila = .InputBox("Selecciona el numero de fila(coincidir)", Type:=8)
End With
columna = Application.InputBox("Selecciona el numero de columna", Type:=1)
ActiveCell.Formula = "=INDEX(" & matriz & "," & numerodefila.address(0, 0) & "," & columna & ")"
End Sub

la primera para encontrar "Coincidir" la segunda "indice" trabaja con el valor de "Coincidir", he ahi la interrogante, ¿Se podria optimizar?, incluso para que no me ocupe una columna auxiliar como lo estoy haciendo:

Ese proceso solo me sirve para una sola celda, ¿Cómo podría hacer para que se aplique al total de estudiantes, o filas ocupadas en la columna "A"?

1 Respuesta

Respuesta
2

[Ho la Daniel Herrera Flores , 

Tu comentario:

(Pero provocando errores como: "El aumento de peso en el archivo")

Si tienes problemas de desempeño en tu archivo y además vas a utilizar una macro, te recomiendo que la macro realice la búsqueda y te ponga el resultado.

Te puedo ayudar con la macro para que realice la búsqueda de manera más eficiente utilizando matrices, trabajando en memoria, lo que hará el proceso bastante rápido.

Solamente explícame con detalle qué datos vas a buscar, en dónde lo vas a buscar, qué dato necesitas de resultado y en dónde quieres el resultado.

O si prefieres, puedes compartir tu archivo en google drive, pega aquí el enlace para ver tu archivo.

Muchas gracias por responder Dante Amor; el archivo lo subí en el siguiente enlace:

https://drive.google.com/file/d/1xUY0wyfmwc_k9-_2zDyfB52IIOIe9KF_/view?usp=sharing 

Investigando el problema del "buscarv" se da debido a que internamente excel copia el archivo externo al archivo en el que se utiliza la función para que el funcionamiento sea optimo, en mi caso el archivo que manejo normalmente tiene un peso de 2.6 Mb, después de usar la función subía a 7 Mb, como el mundo de excel es tan amplio, descubrí que hay otras maneras de obtener lo mismo como en el caso explicado, mediante coincidir e indice.

En este momento estoy en mi celular. No puedo revisar el archivo.

¿Compartiste los 2 archivos?

Me ayudas compartiendo los 2 archivos. Grs

Si, lo compartí con el método de coincidir e indice, omitiendo "Buscarv", dentro del primer archivo hay modelo de autoevaluaciones los cuales son los archivo de donde se buscara la información.

aqui tambien estaria un modelo de autoevaluacion.

gracias por su tiempo Dante Amor.

https://docs.google.com/spreadsheets/d/1Qi_uR0jsnMcRmAtwch0F80LQa5DZIWFD/edit?usp=sharing&ouid=102544225152353585817&rtpof=true&sd=true 

Ya tengo los 2 archivos, pero sigo sin entender qué necesitas hacer.

Podrías explicarme con un ejemplo:

- Qué dato vas a buscar.

- En dónde lo vas a buscar.

- Qué dato quieres quieres de regreso.

- Y en dónde lo quieres poner.

Por ejemplo, de los 2 archivos que compartiste.

Voy a suponer los siguiente, pero necesito que tú lo expliques con tus palabras y sin macros.

1. - Qué dato vas a buscar: Quieres buscar, del libro "Autoevaluacion", hoja "Autoevaluacion", el nombre "ARISPE ALEJANDRA"

2. - En dónde lo vas a buscar: en el libro "3ro A", en la hoja1, en la columna B.

3. - Qué dato quieres quieres de regreso: supongo que quieres de regreso el dato "SER" que está en la celda C3 y tiene un valor: "3"

4. Y en dónde lo quieres poner: supongo que lo quieres poner en la celda P11 de la hoja "Autoevaluacion".

------------

Si me ayudas con la explicación detallada de 2 ejemplos te puedo ayudar.

Buenas tardes Dante Amor, al darle en el botón "Buscar" se ejecuta la macro con el nombre "Macro1" la cual me dice que "Selecciona la autoevaluación", la autoevaluación son los archivos que los profesores me pasan, en este caso :

Datos a buscar los nombres en el archivo "3ro A" (o en cualquier otro archivo que me pasen)

"3ro A", en la hoja1, en la columna B

Qué dato quieres quieres de regreso:

Datos de la columna "C" fila "4", Columna "D" fila "4", hasta el final de los datos de los estudiantes Fila 29 (Pudiendo variar la ubicación, según los diferentes modelos que me pasen, por eso utilizo los inputbox para consultar).

d

En la hoja "Autoevaluacion" dependiendo del trimestre (a preguntar), en este caso segundo trimestre "N11 Ser y Decidir" O11,

Prueba el siguiente código. Funciona de esta manera:

Seleccionas la hoja destino, seleccionas el archivo abrir.

La macro abre el archivo, busca los nombres de los alumnos, pone los valores y cierra el archivo.

Sub ValoresEstudiantes()
  Dim wb2 As Workbook
  Dim sh1 As Worksheet, sh2 As Worksheet
  Dim celda As Range
  Dim dic As Object
  Dim i As Long, fila As Long, col As Long
  Dim sSER As Variant, sDEC As Variant
  Dim alumno As String
  '
  Application.ScreenUpdating = False
  '
  On Error Resume Next
  Set celda = Application.InputBox("Selecciona la celda inicial destino", Default:=ActiveCell.Address, Type:=8)
  If celda Is Nothing Then Exit Sub
  fila = celda.Row
  col = celda.Column
  On Error GoTo 0
  '
  Set sh1 = ThisWorkbook.Sheets("Autoevaluacion")
  Set dic = CreateObject("Scripting.Dictionary")
  '
  With Application.FileDialog(msoFileDialogFilePicker)
    .Title = "Seleccione archivo de excel"
    .Filters.Clear
    .Filters.Add "Archivos excel", "*.xls*"
    .AllowMultiSelect = False
    .InitialFileName = ThisWorkbook.Path & "\"
    If .Show Then
      'lee los datos del achivo del profesor
      Set wb2 = Workbooks.Open(.SelectedItems.Item(1))
      Set sh2 = wb2.Sheets(1)
      For i = 1 To sh2.Range("B" & Rows.Count).End(3).Row
        If sh2.Range("B" & i).Value <> "" Then
          dic(sh2.Range("B" & i).Value) = sh2.Range("C" & i).Value & "|" & sh2.Range("D" & i).Value
        End If
      Next
      '
      'pone los datos en la hoja autoevaluación
      For i = fila To sh1.Range("B" & Rows.Count).End(3).Row
        alumno = sh1.Range("B" & i).Value
        If dic.exists(alumno) Then
          sSER = Split(dic(alumno), "|")(0)
          sDEC = Split(dic(alumno), "|")(1)
          sh1.Cells(i, col).Value = sSER
          sh1.Cells(i, col + 1).Value = sDEC
        End If
      Next
      wb2.Close False
    End If
  End With
End Sub

Te paso el archivo con la macro:

https://drive.google.com/file/d/16-u0xwJYnHpCWpgocsE6i5wAI1F7UhoD/view?usp=sharing 


Te invito a suscribirte a mi canal de youtube, para conocer más sobre excel y macros:

¡Gracias! Que increíble, estoy tratando de entender el "dic" y "split"; funciona perfectamente, muchas gracias.

Suscríbete a mi canal de youtube, ahí encontrarás vídeos explicando sobre el dictionary.

Y no olvidar valorar

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas