1. ホーム
  2. sql

[解決済み] ExcelのテーブルでSQLクエリを実行するには?

2023-02-02 15:04:44

質問

別のテーブルから、A-Z でソートされたすべての姓のフィールドで、NULL ではない電話番号フィールドを持つサブテーブルを作成しようとしています。SQL を使えば簡単にできるのですが、Excel 内で SQL クエリを実行する方法がまったくわかりません。データを postgresql にインポートして、そこでクエリを実行したい気もしますが、それは少し過剰なようです。

私がやろうとしていることについては、SQLクエリ SELECT lastname, firstname, phonenumber WHERE phonenumber IS NOT NULL ORDER BY lastname で十分です。Excelがネイティブでできないこととしては、あまりにも単純に思えます。Excel 内からこのような SQL クエリを実行するにはどうすればよいでしょうか。

どのように解決するのですか?

他の人がすでに提案しているように、これを実行するための多くの細かい方法があります。SQL 経由で Excel データを取得する方法」に沿って、いくつかのポイントを紹介します。

  1. Excel には "データ接続ウィザード"があります。 があり、別のデータソースから、あるいはまったく同じExcelファイル内からインポートしたりリンクしたりすることができます。

  2. Microsoft Office (および OS) の一部として、古い "Microsoft.Jet.OLEDB"、および最新の "Microsoft.ACE.OLEDB" の 2 つの興味深いプロバイダーがあります。データ接続ウィザードなどで)接続をセットアップする際に、これらのプロバイダーを探します。

  3. いったん Excel ワークブックに接続されると、ワークシートまたは範囲はテーブルまたはビューに相当します。ワークシートのテーブル名は、ワークシートの名前にドル記号 ("$") を付加し、角括弧 ("[" および "]") で囲んだもので、範囲の場合は単に範囲の名前となります。名前のないセル範囲をレコードソースとして指定するには、角括弧内のシート名の末尾にExcel標準の行/列表記を付加してください。

  4. ネイティブの SQL は Microsoft Access の SQL になります (多かれ少なかれ)。(過去には JET SQL と呼ばれていました。しかし Access SQL は進化しており、JET は非推奨の古い技術だと思います)。

  5. 例、ワークシートの読み込み。 SELECT * FROM [Sheet1$]

  6. 例、範囲を読み取る。 SELECT * FROM MyRange

  7. 例、無名範囲のセルを読み込む。 SELECT * FROM [Sheet1$A1:B10]

  8. 多くの多くの書籍やWebサイトがあり、特殊な作業を行うことができます。

その他の注意事項

デフォルトでは、Excel データ ソースの最初の行には、フィールド名として使用できる列見出しが含まれていると想定されています。そうでない場合、この設定をオフにする必要があります。そうしないと、フィールド名として使用するためのデータの最初の行が消えてしまいます。これを行うには、オプションの HDR= setting を接続文字列の拡張プロパティに追加します。指定する必要のないデフォルトは HDR=Yes . 列の見出しがない場合は、次のように指定する必要があります。 HDR=No プロバイダはフィールドに F1、F2 などの名前を付けます。

ワークシートの指定に関する注意点。プロバイダは、データの表が指定されたワークシートの最も上、最も左、空白でないセルから始まると想定しています。つまり、データの表は、3行目、C列から始めても問題ありません。ただし、たとえば、セル A1 のデータの上や左側にワークシートのタイトルを入力することはできません。

範囲を指定する際の注意点 レコードソースとしてワークシートを指定すると、プロバイダーはスペースが許す限り、ワークシートの既存のレコードの下に新しいレコードを追加します。範囲(名前付きまたは名前なし)を指定すると、ジェットも、スペースが許す限り、範囲内の既存のレコードの下に新しいレコードを追加します。ただし、元の範囲で再クエリを実行すると、結果のレコードセットには、範囲外の新しく追加されたレコードは含まれません。

のデータ型(試す価値あり)。 CREATE TABLE: Short, Long, Single, Double, Currency, DateTime, Bit, Byte, GUID, BigBinary, LongBinary, VarBinary, LongText, VarChar, Decimal .

古い技術で作られた Excel (拡張子が xls のファイル) に接続中。 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\MyFolder\MyWorkbook.xls;Extended Properties=Excel 8.0; . Microsoft Excel 5.0 および 7.0 (95) ワークブックには Excel 5.0 ソースデータベースタイプを、Microsoft Excel 8.0 (97), 9.0 (2000) および 10.0 (2002) ワークブックには Excel 8.0 ソースデータベースタイプをご使用ください。

最新のExcel(拡張子がxlsxのファイル)に接続中です。 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;"

データをテキストとして扱う IMEXの設定では、すべてのデータをテキストとして扱います。 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Excel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";

(詳細は http://www.connectionstrings.com/excel )

より詳しい情報は http://msdn.microsoft.com/en-US/library/ms141683(v=sql.90).aspx。 で、また http://support.microsoft.com/kb/316934

VBA を使用して ADODB 経由で Excel に接続する方法については、以下を参照してください。 http://support.microsoft.com/kb/257819

マイクロソフト JET 4 の詳細は http://support.microsoft.com/kb/275561