A〜Zでソートされたすべての姓フィールドの別のテーブルからサブテーブルを作成しようとしています。これらのテーブルには、nullではない電話番号フィールドがあります。私はSQLを使ってこれを非常に簡単にすることができました、しかし、私はエクセルの中で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)の一部として興味を引く2つのプロバイダがあります。古い "Microsoft.Jet.OLEDB"と最新の "Microsoft.ACE.OLEDB"です。接続を設定するときにそれらを探します(データ接続ウィザードなどを使用)。
Excelワークブックに接続すると、ワークシートまたは範囲はテーブルまたはビューと同等になります。ワークシートのテーブル名は、ドル記号( "$")が追加されたワークシートの名前で、角括弧( "["と "]")で囲まれています。範囲の、それは単に範囲の名前です。レコードソースとして名前の付いていないセル範囲を指定するには、角かっこ内のシート名の末尾に標準のExcel行/列表記を追加します。
ネイティブSQLは(多かれ少なかれ)Microsoft AccessのSQLになります。 (以前は、JET SQLと呼ばれていましたが、Access SQLは進化してきました。JETは廃止予定の古い技術です。)
例、ワークシートを読む:SELECT * FROM [Sheet1 $]
例、範囲の読み取り:SELECT * FROM MyRange
例、名前のないセルの範囲を読み取る:SELECT * FROM [Sheet1 $ A1:B10]
あなたが細目を通して働くのを助けるために利用できる多くの多くの本とウェブサイトがあります。
===さらなる注意事項===
既定では、Excelデータソースの最初の行には、フィールド名として使用できる列見出しが含まれていると想定されています。そうでない場合は、この設定をオフにする必要があります。そうしないと、データの最初の行がフィールド名として使用されるために「消えます」。これは、接続文字列のExtended PropertiesにオプションのHDR =設定を追加することによって行われます。指定する必要のないデフォルトは、HDR = Yesです。列見出しがない場合は、HDR = Noを指定する必要があります。プロバイダはあなたのフィールドにF1、F2などの名前を付けます。
ワークシートの指定に関する注意:プロバイダは、指定したワークシートの一番上、一番左、空白ではないセルからデータのテーブルが始まると想定します。つまり、データのテーブルは、問題なく3行3列目のCから始まることができます。ただし、たとえば、セルA1のデータの上および左にワークシートのタイトルを入力することはできません。
範囲の指定に関する注意:レコードソースとしてワークシートを指定すると、スペースが許す限り、プロバイダはワークシート内の既存のレコードの下に新しいレコードを追加します。範囲(名前付きまたは名前なし)を指定すると、スペースが許す限り、Jetは範囲内の既存のレコードの下に新しいレコードも追加します。ただし、元の範囲を再クエリすると、結果のレコードセットに範囲外の新しく追加されたレコードが含まれません。
CREATE TABLEのデータ型(試してみる価値があります):Short、Long、Single、Double、通貨、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設定はすべてのデータをテキストとして扱います。プロバイダ= Microsoft.ACE.OLEDB.12.0;データソース= Excel2007file.xlsx;拡張プロパティ= "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
http://support.Microsoft.com/kb/257819 に詳述されているVBA経由でADODB経由でExcelに接続する
Microsoft JET 4の詳細は http://support.Microsoft.com/kb/275561 にあります。
次のようにこれをネイティブに行うことができます。
=C6=""
が含まれます。ここで、C6は電話番号列の最初のデータセルです。あなたがプログラム的にこれをしたいならば、私はあなたが上記のステップを記録してコードを見るためにあなたがマクロレコーダーを使うことを勧めます。
tl; dr; Excelはこれをすべてネイティブに行います。 フィルタ または テーブルを使用します。
( http://office.Microsoft.com/en-gb/Excel-help/filter-data-in-an-Excel-table-HA102840028.aspx )
Oledb接続を介してプログラム的にExcelを開き、ワークシート内のテーブルに対してSQLを実行できます。
しかし、あなたはあなたがしたいと思っていることは何でもすることができます。
いくつか注意すべき点があります。
あなたがそれをたくさんやろうとしているのでなければ、あるいはどこかにデータのインポートを自動化したいのであれば、フィルターを使ってそれをしてください。
C#オプション:
OleDbConnection ExcelFile = new OleDbConnection( String.Format( "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES\"", filename));
ExcelFile.Open();
あなたが思っている以上のものがあるかもしれないので、始めるのに便利な場所はスキーマを見ることです:
List<String> excelSheets = new List<string>();
// Add the sheet name to the string array.
foreach (DataRow row in dt.Rows) {
string temp = row["TABLE_NAME"].ToString();
if (temp[temp.Length - 1] == '$') {
excelSheets.Add(row["TABLE_NAME"].ToString());
}
}
それからあなたがシートを照会したいとき:
OleDbDataAdapter da = new OleDbDataAdapter("select * from [" + sheet + "]", ExcelFile);
dt = new DataTable();
da.Fill(dt);
注 - Excelでテーブルを使用してください!:
Excelには、データをテーブルのように動作させる「テーブル」機能があります。これは大きな利点をもたらしますが、あらゆる種類のクエリを実行できるわけではありません。
http://office.Microsoft.com/en-gb/Excel-help/overview-of-Excel-tables-HA010048546.aspx
Excelの表形式データの場合、これが私のデフォルトです。最初にデータをクリックしてから、リボンのホームセクションから「表としてフォーマット」を選択します。これにより、デフォルトでフィルタリングやソートが可能になり、名前でテーブルやフィールドにアクセスできるようになります(例:table [fieldname])。最大と平均
あなたはExcelでSQLを使うことができます。隠れているだけです。このチュートリアルを参照してください。
http://smallbusiness.chron.com/use-sql-statements-ms-Excel-41193.html
QueryStorm 試してみることをお勧めします - それはExcelでSQLを使用することを非常に便利にするExcel用のプラグインです。
また、それはフリーミアムです。オートコンプリートやエラーの発生などを気にしないのであれば、無料で使用できます。ダウンロードしてインストールするだけで、ExcelでSQLがサポートされます。
免責事項:私は作者です。
一度これを行う必要がある場合はCharlesの説明に従うだけですが、フィルタを動的にしたい場合に備えてExcelの数式やヘルパー列を使用することもできます。
データがシートDataSheetにあり、次の列の2行目から始まると仮定します。
このシートには2つの補助列が必要です。
=if(A2 = "", 1, 0)
、これはあなたのwhere条件に対応するフィルター列です=if(D2 <> 1, "", sumifs(D$2:D$1048576, A$2:A$1048576, "<"&A2) + sumifs(D$2:D2, A$2:A2, A2))
、これは次の命令に対応するデータの範囲内でこれらの式をコピーしてください。
結果が表示されるはずのシート上に次の列を作成します。
=match(A2, DataSheet!$E$2:$E$1048576, 0)
、これは対応するデータの行です=iferror(index(DataSheet!A$2:A$1048576, $B2), "")
、これは実際のデータ、またはデータが存在しない場合は空ですB2とC2の式をコピーし、C列をDとEにコピーペーストします。
複数のExcelシートまたは複数のExcelファイルのデータを組み合わせてSQLを実行する場合は、 Rockset というクラウドサービスを使用できます。 Rocksetは、Excel、Pdf、またはtxt/xml/json/csvのデータを組み合わせることができるSQLインターフェースを提供します。