[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/10/26(Wed) 21:30
投稿者名:なお
Eメール:
URL :
タイトル:
返値の判定について
ATコマンドにより登録されたタスクの一覧をWMIを用いて
取得するものを書いています。このとき、タスクが何曜日
に起動するかの定義が、以下のような数値で返ってきます。

1  - 月曜日
2  - 火曜日
4  - 水曜日
8  - 木曜日
16 - 金曜日
32 - 土曜日
64 - 日曜日

月曜日と火曜日であるなら、それぞれの値を加えた3が返っ
てきます。

たとえば、「26」が返ってきたとき、火曜日と木曜日と
金曜日であることをVBのロジック上で簡単に知る方法はど
のようにしたらよいのでしょうか?

どのようなタイトルにしたらいいのかわからず・・わかりづ
らくてすみません。よろしくお願いします。

投稿時間:2005/10/26(Wed) 21:44
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re: 返値の判定について
> たとえば、「26」が返ってきたとき、火曜日と木曜日と
> 金曜日であることをVBのロジック上で簡単に知る方法はど
> のようにしたらよいのでしょうか?

・26を、2進数に直すと・・・。「11010」
・11010を前ゼロをつけて、7桁にします。
・0011010
一番右から、月曜〜日曜に対応しますので、

 0 0 1 1 0 1 0
 ・ ・ ・ ・ ・ ・ ・
 ・ ・ ・ ・ ・ ・ ・
 ・ ・ ・ ・ ・ ・ ・
 日 土 金 木 水 火 月
 曜 曜 曜 曜 曜 曜 曜
 日 日 日 日 日 日 日

 1の立っている曜日に起動します。
 じゃだめ?

 ちなみに10進数を2進数に変換する関数は、
 「わいわいがやがや広場」でサンプルを見つけた覚えがあります。

投稿時間:2005/10/26(Wed) 21:47
投稿者名:なお
Eメール:
URL :
タイトル:
Re^2: 返値の判定について
な・・・なるほど!!!
そういう仕組みだったのですね!目から鱗です。

すばやいご指摘ありがとうございました!!
2進数への変換のほう調べてみます。

投稿時間:2005/10/26(Wed) 21:49
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re^3: 返値の判定について
> な・・・なるほど!!!
> そういう仕組みだったのですね!目から鱗です。
>
> すばやいご指摘ありがとうございました!!
> 2進数への変換のほう調べてみます。

2進、10進、16進...の基数変換(V... 投稿者:ささ 投稿日:2005/08/04(Thu) 20:20 No.140
の投稿にありましたね?

投稿時間:2005/10/26(Wed) 22:15
投稿者名:なお
Eメール:
URL :
タイトル:
Re^4: 返値の判定について
ありました!!うまくいきました!
ありがとうございました!

投稿時間:2005/10/26(Wed) 22:22
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re^5: 返値の判定について
> ありました!!うまくいきました!
> ありがとうございました!

解決して何より・・・。

#ちなみになぜ、覚えているかというと、
#同じ職場の同僚が作って投稿してるのをみたからです。

投稿時間:2005/10/27(Thu) 14:23
投稿者名:なお
Eメール:
URL :
タイトル:
Re^6: 返値の判定について
追加情報です・・お役に立てば・・

最初の質問では、一週間の曜日分しかありませんが、もう一種類一ヶ月分の値も
とることができまして、

1日 1
2日 2
3日 4
4日 8
・・・・
31日 2^31

まで値があります。たとえば、5日・30日・31日だとそれぞれの値を
足した1610612752になり、

Change_10to2(1610612752) = "1100000000000000000000000010000"

となります。1日のみだと、値は1で、上記と同じ形式で表記すると

0000000000000000000000000000001

というわけで、

FORMAT(Change_10to2(1610612752), String(31, "0"))

としてみたのですが、これを実行すると

1100000000000000000000000000000

となり、5日が抜けてしまいました。理由はわかりません。。FORMAT関数がおかしい?
というわけで、半ば無理矢理な方法ですが、

Replace(FORMAT(Change_10to2(1610612752), String(31,"@"))," ","0")

としたらうまくいきました。

投稿時間:2005/10/27(Thu) 08:49
投稿者名:YK
Eメール:
URL :
タイトル:
Re: 返値の判定について
こんにちは。

既に解決されたようですが、こんなのではどうですか。

Sub Testb()
    Dim lngD    As Long
    Dim ary     As Variant
    Dim i       As Long

    ary = Array(1, 2, 4, 8, 16, 32, 64)
    lngD = 26

    For i = 0 To 6
        If lngD And ary(i) Then
            MsgBox ary(i)
        End If
    Next
End Sub

投稿時間:2005/10/27(Thu) 14:11
投稿者名:なお
Eメール:
URL :
タイトル:
Re^2: 返値の判定について
ご返信ありがとうございます。
こちらの方法でもうまくいきました〜ありがとうございます!

ただ、Array(1, 2, 4, ・・・)の部分が、2の31乗まであるので・・
やはりいなさんの方法をとることに致しました。

勉強になりました。ありがとうございます。

投稿時間:2005/10/27(Thu) 14:54
投稿者名:GOD
Eメール:
URL :
タイトル:
Re^3: 2 ^ x乗を使ったほうが・・・
> ただ、Array(1, 2, 4, ・・・)の部分が、2の31乗まであるので・・
> やはりいなさんの方法をとることに致しました。
>
Arrayを使用しないなら、こんな方法とか。

Private Sub Command1_Click()
    Call Test(1610612752)
End Sub

Private Sub Test(num As Long)
    Dim i As Long
    For i = 1 To 31
        If num And (2 ^ (i - 1)) Then
            Debug.Print i & "日"
        End If
    Next
End Sub

投稿時間:2005/10/27(Thu) 15:33
投稿者名:YK
Eメール:
URL :
タイトル:
Re^4: 2 ^ x乗を使ったほうが・・・
こんにちは。

GODさん、フォロー有り難う御座います。

なおさん 質問は詳しくね。

> Arrayを使用しないなら、こんな方法とか。
>
> Private Sub Command1_Click()
>     Call Test(1610612752)
> End Sub
>
> Private Sub Test(num As Long)
>     Dim i As Long
>     For i = 1 To 31
>         If num And (2 ^ (i - 1)) Then

        値をとるなら
        debug.print 2 ^ (i - 1) です。

>             Debug.Print i & "日" 
>         End If
>     Next
> End Sub