アプリ版:「スタンプのみでお礼する」機能のリリースについて

EXCELのVBAでSQLの

SELECT COUNT(DISTINCT(ITEMS)) FROM TABLE
WHERE SHOP = 'A'

と同様のことを行いたいのですが、どのように考えたらよいでしょうか。
同じようなことができる関数でもよいです。

A 回答 (2件)

>同じようなことができる関数でもよいです


これを質問に入れたために質問の意図がぼやけました。
エクセルの関数は、値を加工したり、1つ持って来たり
は出来ますが、レコードの取得という考えは出来ません。
例えばDGETなど、それらしい名前の関数もありますが、1フィールドの値だけしか返しません。
1レコードの全項目を項目ごとに取ってくれば1レコード分は揃えられると思いますが。
件数合計や計数合計なら計算できる可能性はあります。
質問には「COUNT」となっているので、出来る可能性は
あります。今すぐ思いつくのは、作業列を使いますが
(後述)。
>SQL
アクセスVBAで出来るごとく、エクセルVBAでもオブジェクト(=プログラム)の参照設定をやる方法を会得すれば、SQL文の実行が出来ます。コード作成・実行環境VBEがアクセスのものを使うかエクセルのVBEであるかの違いと思います。
当然既設定のソフト環境が違いますので、知識が要ります。
エクセルでも、「クエリ」でヘルプで照会してみると、
「外部データベースからデータを抽出する方法」
など載ってます。DISTINCTが使えるかどうか不知。
>WHERE SHOP = 'A'とDISTINCT
VBAでやればソートしておき、各レコードに付いてShopがAか判別し、ITEMキーが変化するごとに1だけカウントアップさせる方法が簡単でしょう。
(関数での回答例)取り急ぎでベターな回答か判りませんが。
(データ例)A2:B12(C,Dは関数式を入れた結果を先まわりに掲出したもの)
A列  B列    C列   D列
ax a x  1
ay a y  1
bz b z  1
by b y  1 
ax a x  2
az a z  1
ax a x  3
bu b u  1
cv c v  1
cx c x  1
ay a y  2
(関数式)作業列
C2に=LEFT(" ",4-LEN(A2))&A2&LEFT(" ",5-LEN(B2))&B2
A列は4桁以内のコードか文字列、B列は5桁以内のコードか文字列と仮定。結合したキーを作る際に桁合わせをしているもの。
C3以下に式を複写する。
D2に=COUNTIF($C$2:C2,C2)
D3以下に式を複写する。
上記セル以外に
=SUMPRODUCT((A1:A12="a")*(D1:D12=1))
結果は3です(a-x,a-y,a-zの組み合わせ)。
(アドバイス)
質問文に「SQL」「DISTINCT」などを出しているが、エクセル上手の方がみんなSQLを理解できるかどうか疑問。
質問として、エクセルのカテで、文章で「A列がaで、且つA列とB列のデータを組み合わせて、重複分を除く件数のカウントの関数式」とでも質問した方が良いのではなかったでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございました。
アドバイスまで頂きましたが、
SQLを理解している人に回答頂ければ結構だとおもいました。
家庭向けではなく技術者向けに質問すべきだったかもしれません。

お礼日時:2004/12/25 08:20

エクセルの表をSQLのデータソースとして、そのままSQLを発行して求めることはできます。


ヘルプでSQLで検索してみて下さい。

それ意外に方法だと、簡単にはできないと思います。
最悪、質問文のSQLと同等の動作をするプロシージャーを作成しなければならないと思います。

ワークシート上である程度作業することで作業を軽減できるとは思います。
例えば、データの抽出で重複をしないで、抽出しデータ数を数えるとか

DCOUNTAとCOUNTIFを複合して求めることもできると思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。
結果、SQL文と似たプロシージャーを作成しました。

お礼日時:2004/12/25 08:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!