dポイントプレゼントキャンペーン実施中!

ワゴンと計測器がひもついたデータのテーブルがあります。
A***、B***がひもついている計測器の種別のイメージです。

ワゴン1
A001
A002
A003
B001
B002

ここで、
1番の機械だったらA001,B001
2番の機械だったらA001,A002,B001,B002
という風に機械のタイプで使用する計測器のリストを抽出したいと思っています。

データテーブルの構造を変更することは難しいので、支障のない列(PGM)にてフラグにて抽出できないものかと考えました。
PGMの列には24ビット分のデーたが入れられます。
そこで下記の様にPGMの列にビット情報を入れます。(とりあえず8ビットの情報)

ワゴン1  PGM  
A001   11001011
A002   01001011
A003   00001011
B001   11001011
B002   01001011

1番目の機械だったら、8ビット目が"1"を抽出。2番目の機械だったら7ビット目が"1"を抽出
という風にすればよいかと思っています。
このフラグコントロールをVBAでどの様にしたら良いかを教えていただけませんでしょうか。
あるいは、もっと簡単に対応可能な方法があればとも思っています。

尚、VBA全くの初心者で、ホームページやいろんなサイトにて、
やっと下記のデータ抽出までたどり着けた次第です。
コードに関しては、基本部分を全記述でお願いしたく。

ORACLEのデータベースにMEISAIというテーブルがあり、
ここからEXCELのセルA21に入力された文字列を参照します。
IDがABC
CODEがCOMPANY
PGMがセルA21の文字列

てデータ抽出する記述。

WG1 = Range("A21")

Set rs = OraDatabase.CreateDynaset("select * from MEISAI where ID = 'ABC' AND CODE = 'COMPANY' AND PGM = '" & WG1 & "'", 0&)


OFFICE2003 ORACLE V9.0です

A 回答 (2件)

何度か読み直してみました。



>1番目の機械だったら、8ビット目が"1"を抽出。2番目の機械だったら7ビット目が"1"を抽出という風にすればよいかと思っています。

ビット演算というのは、単に、AND OR での計算のことですね。フラグコントロールではなく、ビットコントロールというなら、8bitは、1byteですから、Byte型にすればよいのですが、その組み合わせは、255までです。文字型(1byte)としては、&H01~&HFFで、その組み合わせで、chr 関数で出力すればよいわけです。24bitなら、1byteの文字型3つということだけのことですから、難しくbit出力とか考える必要もないと思います。

しかし、私としては、質問には何か話が食い違っているような気がします。
単に、ビットではなく、24のフラグだけのような気がしてなりません。
もし、そうなら、かなり話が違うような気がします。

>A001   11001011
これだけなら、単にLong型か文字列型で数字を確保すればよいだけです。
この数字を得たいなら、それぞれの桁に代入すれば済みます。どちらかと言うと、文字型のほうがよさそうです。

レスが思ったほどつかないのは、質問の意図するところがはっきりしていないからだと思います。
入り口の話はされていても、出口まで出てくる話(要求しているOracleに出力するデータの内容)はされていないと思うのです。話のままの24bitなら、8bit×3 で、文字3つということになってしまいます。

ビットは、Byteならとかもく、VBAでは聞いたことがありません。

>コードに関しては、基本部分を全記述でお願いしたく。
何をどうするのか、良く分からないところです。
質問が分かりやすければ、だれでも、回答はできると思います。
例えば、リストで変換表が作ってあって、それをVLOOKUP関数で参照するとか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。わかりづらい質問だったでしょうか?自分では知りたい内容を詳しく説明したつもりだったのですが、大変お手間をとらせたみたいで申し訳ありませんでした。

尚、知りたかった内容に関しては、アドバイスにて解決しました。

「ビットではなく、24のフラグだけのような気がしてなりません」

0か1の情報で判断できればと思ったので、ビットという表現にしたことが混乱させてしまったようです。言われる通り、24のフラグで判断です。

「この数字を得たいなら、それぞれの桁に代入すれば済みます。どちらかと言うと、文字型のほうがよさそうです」

VBAで変数の宣言は特にしていません。
VBA自体が初心者なので、いつもホームページから参考になる案件をひっぱってきて、条件等を変更している次第です。

解決した内容は次の通りです。
1番目の機械であれば、A21セルに1___%
2番目の機械であれば、A21セルに_1__%
3番目の機械であれば、A21セルに__1_%

という情報を入力する様にします。
上記の _ は半角アンダーバーです。
普通は*で表示されるものの内容ですね。

Set rs = OraDatabase.CreateDynaset("select * from MEISAI where ID = 'ABC' AND CODE = 'COMPANY' AND PGM = '" & WG1 & "'", 0&)
の内容は、
PGM = '" & WG1 & "'

PGM like '" & WG1 & "'

とすることで抽出出来る様になりました。
以上2点が知りたかった内容になります。

お礼日時:2013/03/11 13:14

誰も答えていないようなので。


多分VBAでできると思いますが、ビット演算をすればよいと思います。
最上位の1を調べたいなら
PGM AND 128 最上位に1が立っていなかったら0になる。
できなかったらごめんなさい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。ちょっと質問がわかりづらかったみたいで申し訳ありませんでした。

お礼日時:2013/03/11 11:23

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