この記事では、excel に関する関連知識を提供します。主に、リージョン テーブル、クロスワークブック テーブルなど、SQL クエリでのテーブルの使用方法を紹介します。皆様のお役に立てれば幸いです。
関連する学習の推奨事項: excel チュートリアル
今日は、SQL ステートメント内の Excel テーブルについて説明します。
Excel ワークシートとデータベース データ テーブルには多くの違いがあります。最も重要な点は、データベース データ テーブルは行と列で構成されるものとして理解できるのに対し、データベース データ テーブルは行と列で構成されるものとして理解できることです。 Excel ワークシートは一連のセルで構成されており、これらのセルには A1 または R1C1 という固有のアドレス表現方法があり、A2:H8 のようにデータが接続されたセル範囲を形成することもできます。
それでは、Excel ワークシートの一部のみを計算する必要がある場合、それを SQL でどのように表現すればよいのでしょうか?
この種の問題は非常に一般的です。
たとえば、多くの人は Excel のタイトル行が表の 1 行目ではなく 2 行目にあります...
下図に示すように
現時点では、Excel ワークシート全体ではなく、フィールド名を使用してデータを処理しやすくするために、列 A2:F のセル範囲を計算したいと考えています...
別の例、a テーブルの内側と外側に 2 つ以上の「テーブル」があります... この文は何を意味しますか?
下の図を参照してください
図に示されているテーブルには、「教師テーブル」と「生徒テーブル」の両方があります。 SQL で A2:D8 の教師テーブル データを参照および計算したいだけです...
... Excel の SQL は、実際にはワークシートのセル範囲を「テーブル」として使用することをサポートしています。
上の図に示されている問題の場合、SQL は次のように記述できます:
SELECT 姓名,学科 FROM [数据表$A2:D8]
クエリの結果は次のとおりです:
# #最初のケースでは、データがセル A2 で始まることはわかっていますが、列 F のどのセルが終了するかはわかりません。SQL は次のように記述できます。SELECT 姓名,爱好 FROM [学生表$A2:F]さらに、SQL リファレンスが必要な場合は、テーブルの列 D:G 全体のデータを計算するには、SQL を次のように記述できます。
SELECT * FROM [学生表$D:G]Excel ワークシート領域、つまりワークシート名、ドル記号を表現する上記の方法を要約します。 $、相対参照状態のセル アドレス、そして最後に角括弧で囲まれます。 ただ、姜子。 このセクションのヒント:
SELECT * FROM [D:\EH小学\学生表.xlsx].[成绩表$]FROM の後に指定されたテーブル文字列は、2 つの文字列で構成されます。最初の角括弧の内側は、指定されたワークブックのストレージ パスにサフィックスを付けた完全なワークブック名です。最後の角括弧の内側はワークシート名で、2 つの角括弧はピリオド (.) で接続されています。 VBA ADO を通じて SQL ステートメントを使用している場合...警告の前にある本棚をノックしてください: VBA の基礎が不十分な子供用の靴、次の内容はスキップしてください...OLE DB メソッドと比較すると、VBA ADO メソッドは非常に柔軟です。ADO を使用して、指定されたブックへのリンクを直接作成して開くことができるため、SQL ステートメントでブックの完全な名前を指定する必要はありません。 、など。 コード リファレンスは次のとおりです。
Sub ADO_SQL() '适用于除2003版以外的高版本Excel Dim cnn As Object, rst As Object Dim strPath As String, strCnn As String, strSQL As String Dim i As Long Set cnn = CreateObject("adodb.connection") strPath = "D:\EH小学\学生表.xlsx" '指定工作簿 strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath cnn.Open strCnn '创建并打开到指定工作簿的链接 strSQL = "SELECT * FROM [成绩表$]" 'strSQL语句,查询成绩表的所有数据 Set rst = cnn.Execute(strSQL) '执行strSQL Cells.ClearContents For i = 0 To rst.Fields.Count - 1 Cells(1, i + 1) = rst.Fields(i).Name Next Range("a2").CopyFromRecordset rst cnn.Close Set cnn = Nothing End Su上記のコードの 7 行目は、接続する必要があるブックの完全な名前を直接指定しており、 SQL ステートメント。
但更多的情况是,ADO创建的链接是一个工作簿,需要获取的数据在另一个或多个工作簿,例如两个工作簿之间的数据查询统计。此时通常使用的代码如下
Sub ADO_SQL2() '适用于除2003版以外的高版本Excel Dim cnn As Object, rst As Object Dim strPath As String, strCnn As String, strSQL As String Dim i As Long Set cnn = CreateObject("adodb.connection") strPath = ThisWorkbook.FullName '代码所在工作簿的完整名称 strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPath cnn.Open strCnn '创建到代码所在工作簿的链接 strSQL = "SELECT * FROM [Excel 12.0;DATABASE=D:\EH小学\学生表.xlsm].[成绩表$]" Set rst = cnn.Execute(strSQL) '执行SQL Cells.ClearContents For i = 0 To rst.Fields.Count - 1 Cells(1, i + 1) = rst.Fields(i).Name Next Range("a2").CopyFromRecordset rst cnn.Close Set cnn = Nothing End Sub
代码中第7行创建了当前工作簿的链接,SQL语句中又指定了另外一个工作簿的链接。SQL语句如下
SELECT * FROM [Excel 12.0;DATABASE=D:\EH小学\学生表.xlsx].[成绩表$]
FROM指定表的字符串有两部分组成。第一个中括号中,Excel 12.0是目标工作簿的版本号,第2章时我们讲过,Excel 12.0适用于除了2003以外的所有Excel版本。DATABASE指定的是数据源工作簿的路径和名称。第2个中括号内是工作表名。两个中括号之间使用英文点号相连。
看起来似乎VBA+ADO方法的SQL语句比OLE DB法更复杂?确实如此,不过前者的功能也更强大。比如,它可以通过VBA对象的属性、方法,循环和判断语句等,有条件的筛选工作簿和工作表……相比之下,OLE DB中的SQL语句就是纯手工常量模式了。当然,更重要的是,前者不但可以查数据,还可以增改删数据,后者却只限于查。
相关学习推荐:excel教程
以上がExcel SQL クエリでの「テーブル」の使用法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。