[解決済み] ExcelのテーブルでSQLクエリを実行するには?
質問
別のテーブルから、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 データを取得する方法」に沿って、いくつかのポイントを紹介します。
-
Excel には "データ接続ウィザード"があります。 があり、別のデータソースから、あるいはまったく同じExcelファイル内からインポートしたりリンクしたりすることができます。
-
Microsoft Office (および OS) の一部として、古い "Microsoft.Jet.OLEDB"、および最新の "Microsoft.ACE.OLEDB" の 2 つの興味深いプロバイダーがあります。データ接続ウィザードなどで)接続をセットアップする際に、これらのプロバイダーを探します。
-
いったん Excel ワークブックに接続されると、ワークシートまたは範囲はテーブルまたはビューに相当します。ワークシートのテーブル名は、ワークシートの名前にドル記号 ("$") を付加し、角括弧 ("[" および "]") で囲んだもので、範囲の場合は単に範囲の名前となります。名前のないセル範囲をレコードソースとして指定するには、角括弧内のシート名の末尾にExcel標準の行/列表記を付加してください。
-
ネイティブの SQL は Microsoft Access の SQL になります (多かれ少なかれ)。(過去には JET SQL と呼ばれていました。しかし Access SQL は進化しており、JET は非推奨の古い技術だと思います)。
-
例、ワークシートの読み込み。
SELECT * FROM [Sheet1$]
-
例、範囲を読み取る。
SELECT * FROM MyRange
-
例、無名範囲のセルを読み込む。
SELECT * FROM [Sheet1$A1:B10]
-
多くの多くの書籍や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
関連
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
org.postgresql.util.PSQLException: ERROR: リレーション "userinfo" の列 "loginid" が存在しません。
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] SQLサーバーでNULL = NULLがfalseに評価される理由
-
[解決済み] SQL Server : 列を行に変換する
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] INNER JOIN ON vs WHERE句
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み] SQL Serverで、ある日付より大きいすべての日付を照会するにはどうすればよいですか?