Como Buscar un Rango de Números con SQL Cambiando el Orden de las Columnas Extraidas





Consulta un suscriptor del canal, si es posible que al importar los datos se cambie el orden de las columnas al momento de mostrar los datos en la hoja de Excel, la respuesta es SI, esta macro precisamente muestra como buscar por un rango de números cambiando el orden de las columnas al mostrar los datos usando SQL.

Descarguen el ejemplo en forma gratuita sin ninguna restricción desde el final del post, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.









 


Para el ejemplo nos apoyaremos en un libro que contiene la base de datos ya que para la importación de datos se conecta a otro Libro de Excel, descargado el archivo comprimido se deben guardar los dos archivos juntos no importando el directorio, basta con que estén juntos para que la macro lo pueda encontrar.

La conexión se logran con el siguiente código, recuerden que se usa Excel 2016 / 365

mybook = ThisWorkbook.Path & "\414 Conectar Excel con Excel Consulta SQL Base Datos.xlsx"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & mybook & ";Extended Properties=""Excel 12.0;HDR=Yes;"""

Par realizar la consulta se crea el string de consulta o SQL siendo la siguiente:

sql = "SELECT ID,Marca,Pv,Importe,Descripcion,Fecha,Cantidad FROM [" & "Hoja1$" & "] WHERE ID >= " & a.Range("I1") & " AND ID <= " & a.Range("K1") & " ORDER BY ID ASC"

Se debe destacar que para alterar el orden en que se mostrarán las columnas, solo basta con cambiar o alterar el orden en que se ponen las columnas en la SQL es decir en este caso se ponen en el orden que se desea que aparezcan las columnas, no coincidiendo con el orden de las columnas en el Libro de Base de Datos.

Entre la sentencia SELECT y FROM se deben colocar el nombre de las cabeceras de las columnas en el orden que se requieran que se muestren los datos.

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como insertar foto o imagen centrando automáticamente


Como hacer un bucle for next con letras del abecedario

Como crear una factura o sale invoice guardar e imprimir

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

Para ejecutar la SQL se usa:

Set rs = cn.Execute(sql)

Para copiar los datos, cuyas columnas se ordenarán de acuerdo a lo ingresado en la SQL se usa el siguiente código

b.Cells(2, 1).CopyFromRecordset Data:=rs

Para copiar las cabeceras de las columnas en la fila 1 de la tabla se usa el siguiente código:

For ii = 1 To 7
b.Cells(1, ii) = rs.Fields(ii - 1).Name
Next ii

Posterior a ello se da ancho automático a las columnas y formato de fecha a la columna F con los siguientes códigos:



b.Range("A:G").EntireColumn.AutoFit
b.Range("F:F").NumberFormat = "dd/mm/yyyy"

Deben recordar de liberar las variables y cerrar la conexión al Libro de la siguiente manera:

Set rs = Nothing
cn.Close
Set cn = Nothing

El código completo del ejemplo llamado Como Buscar un Rango de Números con SQL Cambiando el Orden en que se Muestran Los datos Filtrados, se encuentra a continuación y posteriormente está el link para la descarga del archivo de ejemplo.


Código que se inserta en un módulo

Sub ConsutaSQLExcel()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ctl As Object
Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String
On Error Resume Next
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set a = Sheets("Hoja1")
Set b = Sheets("Hoja2")

mybook = ThisWorkbook.Path & "\414 Conectar Excel con Excel Consulta SQL Base Datos.xlsx"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & mybook & ";Extended Properties=""Excel 12.0;HDR=Yes;"""
'sql = "SELECT * FROM [" & "Hoja1$" & "] WHERE ID >= " & a.Range("I1") & " AND ID <= " & a.Range("K1") & " ORDER BY ID ASC"

sql = "SELECT ID,Marca,Pv,Importe,Descripcion,Fecha,Cantidad FROM [" & "Hoja1$" & "] WHERE ID >= " & a.Range("I1") & " AND ID <= " & a.Range("K1") & " ORDER BY ID ASC"


b.Cells.Clear
'a.Range("A1:G1").Copy Destination:=b.Range("A1")
Set rs = cn.Execute(sql)
b.Cells(2, 1).CopyFromRecordset Data:=rs

'Carga los datos de la cabecera en listbox
For ii = 1 To 7
b.Cells(1, ii) = rs.Fields(ii - 1).Name
Next ii

b.Range("A:G").EntireColumn.AutoFit

b.Range("F:F").NumberFormat = "dd/mm/yyyy"
Set rs = Nothing
cn.Close
Set cn = Nothing
If b.Range("A2") <> Empty Then
MsgBox ("La busqueda se realizó con éxito"), vbInformation, "AVISO"
Else
MsgBox ("No se encontraron registros para el criterio de búsqueda"), vbInformation, "AVISO"
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends