2012-01-06 11 views
51

Tengo una tabla bastante grande en una hoja de cálculo Excel:Función de Excel para realizar consultas similares a SQL en los datos de la hoja de trabajo?

Column_1 | Column_2 | Column_3 

ValueA  ValueB  ValueC 
.... 

Lo que necesito es una función que tome como entrada la gama y una cadena de consulta de tipo SQL y devolver un rango de filas que coinciden con la consulta, por ejemplo:

=SQL_SELECT(A1:C1000, "SELECT * WHERE Column_1 = ValueH AND Column_3 = blah") 

¿Algo como esto existe? ¿O cuál sería la mejor manera de implementarme?

Gracias

+0

Si usted puede guardar la hoja entonces usted tiene la opción de usar ADO y Jet/ACE para tratar el libro de trabajo como una base de datos y ejecutar SQL en contra de la hoja. –

+0

[tablas dinámicas] (http://stackoverflow.com/search?q= [excel] + pivot + table & submit = search)? – SeanC

+0

Tropezamos con esto debido a una reciente "respuesta tardía".Sorprendido, nadie parece haber mencionado la funcionalidad de "Filtro avanzado" de Excel, que está al menos en el parque de béisbol correcto aquí. –

Respuesta

46

Puede usar Get External Data (a su nombre), ubicado en la pestaña 'Datos' de Excel 2010, para configurar un connection en un libro de trabajo para consultar datos de sí mismo. Utilice From Other SourcesFrom Microsoft Query para conectarse a Excel

Una vez configurado puede utilizar para manipular el VBAconnection a, entre otras cosas, ver y modificar el comando SQL que impulsa la consulta. Esta consulta hace referencia al libro de memoria en, por lo que no es necesario guardar para actualizar los datos más recientes.

Aquí hay una rápida Sub para demostrar el acceso a la conexión de objetos

Sub DemoConnection() 
    Dim c As Connections 
    Dim wb As Workbook 
    Dim i As Long 
    Dim strSQL As String 

    Set wb = ActiveWorkbook 
    Set c = wb.Connections 
    For i = 1 To c.Count 
     ' Reresh the data 
     c(i).Refresh 
     ' view the SQL query 
     strSQL = c(i).ODBCConnection.CommandText 
     MsgBox strSQL 
    Next 
End Sub 
+0

Gracias por esto, parece ser lo que estoy buscando –

+3

¿Podría marcar que esto respondió a su pregunta Richard? –

+1

Aparece un error "el objeto no admite esta acción" en la línea strSQL = c (i) .odbcconnection.commandtext – zoonosis

5

Si usted puede guardar el libro, entonces tienen la opción de utilizar ADO y Jet/ACE para tratar el libro como una base de datos, y ejecutar SQL contra la hoja.

Puede encontrar la información de MSDN sobre cómo presionar Excel usando ADO here.

+0

Hmm. Esa es ciertamente una posibilidad, gracias por la sugerencia, pero preferiría no tener que hacer referencia "externamente", ya que esencialmente estaría haciendo aquí –

+0

¿Qué quiere decir con "externamente"? –

+1

bien ADO/Jet hace referencia a una hoja de cálculo en el sistema de archivos (que también significa que la hoja debe guardarse) en lugar del rango en memoria. –

1

veces SUM_IF puede hacer el trabajo. Supongamos que tiene una hoja de información del producto, que incluye ID de producto único en la columna A y precio unitario en la columna P. Y una hoja de entradas de órdenes de compra con ID de productos en la columna A, y desea que la columna T calcule el precio unitario de la entrada.

La siguiente fórmula hará el truco en entradas de celda! T2 y se puede copiar a las otras celdas en la misma columna.

= SumIf (Productos $ A $ 2:!!! $ A $ 9999, las entradas $ A2, los productos $ P $ 2: $ 9999)

entonces usted podría tener otra columna con el número de elementos por la entrada y se multiplica con el precio unitario para obtener el costo total de la entrada.

0

Una manera rápida de hacerlo es crear una columna con una fórmula que evalúe como verdadera para las filas que le interesan y luego filtrar por el valor VERDADERO en esa columna.

1

Si desea fórmula ejecuta en hoja de cálculo función que ejecutará la sentencia SQL a continuación, utilizar complemento de A-Tools

ejemplo, function BS_SQL("SELECT ..."):

enter image description here

Cuestiones relacionadas