• ベストアンサー

Boolean型変数の値を反転する方法

ご存知の方教えて頂けますか? Boolean型変数の値が True なら False,False なら True に変換したいのですが、現在次のようにcodeを書き、希望した値になります。 Dim bool As Boolean 中略 bool = bool - True このcodeは正しいのでしょうか? 他に ”正しい方法”があるのでしょうか? スミマセン!よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

> このcodeは正しいのでしょうか? コードとしては「間違ってはいない」ぐらいでしょうか・・・ VB(VB.NET)の場合、(VB2005のヘルプの「ブール型 (Boolean) (Visual Basic) 」より抜粋) ------------------------------------------------------------ Visual Basic で数値型の値をブール型 (Boolean) に変換すると、 0 は False になり、その他の値はすべて True になります。 Visual Basic でブール型 (Boolean) の値を数値型に変換すると、False は 0 になり、True は -1 になります。 ------------------------------------------------------------- と言う制約がありますから、期待どうりに動作するでしょうけど・・・ bool がFalseなら、 「bool -True」は「0- -1=1」となり、「0以外」なので、Trueになり、 bool がTrueなら、 「bool -True」は「-1- -1= 0」となり、「0」なので、Falseになる・・・ > ”正しい方法” は、やはり、「Not 演算子」による「論理否定」でしょうね。

psychesine
質問者

お礼

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

その他の回答 (2)

  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.3

#2です。 追記ですが、VB2005で、「Option Strict On」(暗黙の型変換禁止)の設定をしている場合、 > bool = bool - True は、 > bool = CBool(CShort(bool) - CShort(True)) の様に明示的な型変換を記述しないとエラーになりますので、ご注意。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Dim bool As Boolean bool = Not (bool) MsgBox bool 反転するなら論理演算(NOT)をします。

psychesine
質問者

お礼

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

関連するQ&A

  • vba boolean変数を開放する方法

    エクセルのセルに「○○○○○○○○○○××××××××××」と入っているものをランダムに並べ代えるマクロを探してみました。 Sub macro2() Dim i, m As Integer Dim b, c As String Dim flg(1 To 20) As Boolean b = Cells(1, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(1, 2).Value = c End Sub これはうまく動くのですが、10行分やろうとして、以下のように変更すると暴走(終わらない)します。 Sub macro2() Dim i, m, n As Integer Dim b, c As String Dim flg(1 To 20) As Boolean For n = 1 To 10 b = Cells(n, 1).Value Randomize For i = 1 To 20 Do m = Int(20 * Rnd + 1) If flg(m) = False Then flg(m) = True Exit Do End If Loop c = c & Mid(b, m, 1) Next i Cells(n, 2).Value = c next n End Sub 一行目が終わってもboolean変数の値がそのまま残っているのが原因らしいのですが開放する方法がわかりません。 取りあえずもう一つマクロを追加してやりたいことはできたのですが、 Sub macro1() Dim n As Integer For n = 1 To 10 Call macro2(n) Next n End Sub Sub macro2(n As Variant) 以下略 なんかスッキリしません。 boolean変数を開放し、マクロひとつですます方法を教えて頂きたくお願いします。 flg(m) = Falseを挿入してもダメでした。

  • 変数booleanの扱い方

    下記のコードでコンパイルしたところ、出現 int 互換性のない型 要求:boolean boolean bl = 0 ; とエラーが出ました。コード上でまず、bl = 0 と0が入るのがまず分からないのと、trueとfalseを入れ換えているのがわかりません。すみませんが、かなりわかってないので、出来るだけ詳しく説明お願いします。 boolean bl = 0; for(int i=0; i<5; i++) for(int j=0; j<5; j++) if(bl == false){ System.out.print('*'); bl = true; } else{ System.out.print('-'); bl = false; } } お決まりのクラス宣言などのコードは省きました。

    • ベストアンサー
    • Java
  • boolean型ではなくて

    booleanの2つの値を取る変数ではなく、3つの値を取れる変数ってあるのでしょうか?booleanを2つ使用した場合もやってみたのですがうまく動きませんでした。先に次のようにbooleanを記述して。 boolean state=true; boolean state1=true; boolean state2=true; 後半部分で次のようにやってみたのですが、3値とったことにはならないですかね?(^^; if(state)     {      if(state1){buffer=img2;}      else{buffer=img3;}      if(state2){buffer=img4;} else{buffer=img5;}     } else{} g.drawImage(buffer,0,0,null); state1 = !state1; state2 = !state2;

    • ベストアンサー
    • Java
  • boolean型の戻り値は可能か

     今日は、Cの初心者です。  比較した値をboolean型でとりたいのですが、色々と調べたのですが、Cではboolean型は定義されてないのでしょうか。  if(a>b); printf("true\n");というような書き方しか出来ないのでしょうか。  例えば   if(a>b);   printf("%●\n"、(a>b));  という書き方で直接"true"とか"false"を取らすとか、  "0"、"1"、"-1"の戻り値をとらせることは出来ないのでしょうか。

  • Boolean型配列中のTrueの有無を判定したい(VB2005)

    VB.NET2005についての質問です。 Dim hoge(5) as Boolean  '値が格納済みとする Dim flg as Boolean 配列hogeの要素の中に、一つでもTrueがあったら、flgにTrueを格納する処理を考えています。 現在はhogeをループで回してTrueの有無を判定していますが、ループを使わず、もっと簡単に上記の処理を行うことは可能でしょうか。 例えば   flg = 処理(hoge) などといった形で処理ができれば理想的です。 どうぞよろしくお願い致します。

  • 配列作成時の配列の内容

    ご存知の方、教えていただけますか? dim dimension(4,4) as Boolean で作成した場合、作成直後の値は、期待通り全て Falesでした。 この値は保障された値なのでしょうか? たまには True が入ってしまうことが有るのでしょうか? スミマセン。よろしくお願いします。

  • boolean型を参照渡ししたい

    boolean型を引数で参照渡しにするにはどうすればいいのでしょうか。 そんな変な実装はしてはいけない等はわかっています。 参照渡しは可能か、もし可能ならば記述方法を教えて下さい。 よろしくお願いします。 下の例の(1)ようにラッパークラスを使ってみましたが、 (2)の部分では値はfalseのままでした。 public main(){     Entity entity;     Boolean flg = false;     sub(Entity entity, Boolean.valueOf(saveFlg)); …(1)     (2) } public void sub(Entity entity, Boolean flg){     flg = true;     return; }

    • ベストアンサー
    • Java
  • InputBox キャンセルボタンが押された時の処理

    こんばんは。 Sub test() Dim タイトル As String タイトル = InputBox("タイトルを入力してください。") If Cancel = True Then Exit Sub ’次のコード・・・ ’次のコード・・・ End Sub このコードを実行した時に 下記のダイアログが出てきて 右のキャンセルボタンを押すと、 「If Cancel = True Then Exit Sub」 でsubステートメントを抜けたいのですが 「Cancel」の部分が 「変数が定義されていません」とエラーになってしまいます。 Dim Cancel As Boolean を追加してキャンセルボタンを押しても TrueではなくFalseになってしまいます。 回避方法を教えてください。 よろしくお願いします。

  • セルの値を変数にする方法

    こんばんわ。 http://oshiete1.goo.ne.jp/qa4545875.html で、質問したことですが、新しく質問させていただきます。 ネット上のリンク先URLを取得することはできて 取得したURLをシート1のA1~A102に貼り付けてあります。 そのあとWebクエリを使って、シート2に A1のURLから結果データが取込んだら、次は A2のURLから結果データを取り込む~最終行まで結果データを シート2に取り込みしたいのですが、とうしたらよいでしょうか? Webクエリを使って、ひとつのURLから結果データを取り込むコードは 次のとおりです。 この処理を繰り返ししたいのですが、どなたか教えてください。 ---------------------------------------- Sub データ読込み() Dim i As Range Set i = Range("a" & Range("a" & Rows.Count).End(xlUp).Row).Offset(1) Range("a" & Range("a" & Rows.Count).End(xlUp).Row).Offset(1).Select With ActiveSheet.QueryTables.Add(Connection:= _ "URL;http://www.jra.go.jp/datafile/seiseki/replay/2008/001.html", Destination _ :=i) .Name = "001_3" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlSpecifiedTables .WebFormatting = xlWebFormattingNone .WebTables = "20" .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Sub

  • VBA 変数の値

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 上記で使用した変数の値を、Bookを閉じるまで保持するには、Cellを経由するしかないのでしょうか。

専門家に質問してみよう