如何使用列作为参数在Excel中使用参数化查询?

时间:2014-10-16 20:14:41

标签: excel parameterized-query excel-external-data

我正在尝试开发一个可以在外部数据源中找到相应记录的电子表格。所以,让我们说我的列A带有一个标识值列表。我想开发B列,它可能会显示表中具有该值的行数。类似的东西:

A              B
758348    "=SELECT COUNT(*) FROM MYTABLE WHERE IDVALUE=$A$1"
173483    "=SELECT COUNT(*) FROM MYTABLE WHERE IDVALUE=$A$2"

......等等。所以,我以为我会使用参数化查询(其中IDVALUE =?),但这会提示我输入参数值,而不是使用左边单元格中的值。我有什么方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:16)

  

我会使用参数化查询(其中IDVALUE =?),但会提示   我输入参数值

根据您的提及,我正在使用MS Query,您需要按照以下步骤进行操作

在Excel中进行参数化查询的步骤使用单元格值作为参数

  1. 首先转到Excel中的“数据”选项卡,然后选择“外部数据源”下的“MS查询”
  2. MS Query

    1. 出现一个弹出窗口,要求您选择数据源。选择数据源或添加新数据源并选择它。确保取消选中Use the query wizard to create or edit queries在大多数情况下它不是很有用
    2. Data Source

      1. 然后会出现一个弹出窗口,要求您暂时添加表格选择任何表格。最好选择行数较少的表。
      2. add table

        1. 然后会出现一个查询窗口,其中包含您选择的表及其数据
        2. query window

          1. 然后点击view菜单,取消选中tables。这将删除查询窗口中的图形表示,并使您更容易更改您的SQL查询
          2. View menu

            1. 点击查询窗口中SQL菜单下方的format按钮。弹出窗口可以根据需要编辑查询。确保为所需的参数添加问号。
            2. edit query

              1. 然后会出现一个弹出窗口,要求您输入参数值,现在输入一些有效值
              2. parameter

                1. 然后查询窗口根据输入的参数显示查询结果
                2. result

                  1. 点击查询窗口中exit菜单下方的view按钮。然后关闭查询窗口,弹出导入数据,询问excel中的哪个位置显示结果。相应地选择
                  2. import

                    1. 然后单击左侧的“属性”按钮,然后单击“确定”。将出现一个新弹出窗口,其中选择了默认用法选项卡。
                    2. Properties

                      1. 在此标签中进行所需的任何更改,然后点击Definition标签。点击Parameters按钮
                      2. 旁边弹出式底部的edit query按钮

                        Definition

                        1. Parameters弹出窗口显示查询中使用的参数。在这里,您必须选择Get the value from following cell单选按钮以选择单元格的值作为查询的参数。单击确定,您应该完成。

                          parameter value


                        2. 此方法适用于没有VBA经验的人士。如果您了解VBA,请参考此answer以使用VBA实现类似的功能。

答案 1 :(得分:0)

为此,我将创建一个UDF并将该函数的后端连接到您的访问数据库。像这样:

Public Function countMyTable(IDValue As Double) As Long
'Requires:// Microsoft Access 16.0 Object Library
'Requires:// Microsoft Office 16.0 Access database engine Object Library
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = Access.DBEngine.Workspaces(0).OpenDatabase(DBFilePath, False, False)
Set rs = db.OpenRecordset("SELECT COUNT(1) FROM MyTable WHERE IDValue = " & IDValue, dbOpenSnapshot)
rs.MoveLast
countMyTable = rs(0)
db.close
End Function

希望这会有所帮助,TheSilkCode