• 締切済み

論理演算をつかったインクリメントのしかた

Public Sub ensyuu_2() Dim RIdx As Long For RIdx = 1 To 40 Cells(RIdx, 1).Value = RIdx If ((RIdx Mod 16) = 0) Then Cells(RIdx, 2).Value = (RIdx / 16) And 15 Cells(RIdx, 3).Value = RIdx And 0 Else Cells(RIdx, 2).Value = Fix(RIdx / 10) Cells(RIdx, 3).Value = RIdx Mod 10 End If Next RIdx End Sub もう一つ変数(たとえばA)を用意して、これと同じ結果になるように その変数(A)にOrやXorなどの演算を使ってインクリメントさせていくには どうしたらよいでしょうか?

みんなの回答

  • lesskey
  • ベストアンサー率33% (66/200)
回答No.1

> Cells(RIdx, 3).Value = RIdx And 0 ↑って正しいですか? 「Cells(RIdx, 3).Value」の値が常に 0 になりますが・・・

bape291
質問者

お礼

返信ありがとうございます。 Cells(RIdx, 3).Value = RIdx And 0は正しいです。 演習問題自体を書かなかったので、混乱させてしまいましたね。 すみません。

関連するQ&A

  • c++でのインクリメント演算子++のオーバーロード

    C++学習者です。 たまたま手に入れた英語の教本に沿って勉強していますが、インクリメント演算子++のオーバーロードのサンプルコードで疑問に思ったことがあります。 それは日付を管理するためのDate というクラスの中に定義されている2つの関数です。 ひとつは日付を一日増やすためのインクリメント演算子++のオーバーロード関数(operator++)と、もう一つはその中で使われているプライベート関数(helpIncrement) です。 私の疑問は、このhelpIncrement()関数の定義の中でさらに、今まさに定義しようとしているインクリメント演算子++が使われているということです。つまりまだ定義し終わっていない演算子を使ってhelpIncrement()関数を定義しようとしているのですが、こんなことをして矛盾は起きないのでしょうか?コンパイルエラーにはならないのでしょうか? それらの関数のコードを下にコピーしてあります。 詳しい方がいらっしゃいましたら、どうぞよろしくお答えください。 Date &Date::operator++() { helpIncrement(); return *this; } void Date::helpIncrement() { if(!endOfMonth(day)) ++day; else if(month < 12 ){ ++month; day=1; } else[ ++year; month=1; day=1; }

  • インクリメント演算子

    はじめまして。プログラミングについて、とても初歩的な所で つまづいています。 変数を一つだけかつ、インクリメント演算子のみを用いて 整数値を一つ入力し,その整数値を1ずつ増やした結果を出す 4,5,6,7,8  (←このようにしたい) というプログラミングを書きたいのですが、どこのサイトを見ても 5個の文字の例はありませんでした。 2個までは以下の例でできました。 #include <stdio.h> main() { int a; printf("整数値を入力"); scanf("%d",&a); printf("1ずつ増加%d,%d,\n",a++,a); } もう、この問題で何日も立ち止まっています。 お願いです、どなたか助けてください。

  • インクリメントについて

    インクリメントについて C言語のプログラム中に(1)の文(前置演算子)が存在するのですが、(2)の文(後置演算子)に置き換えても構いませんか? if(a) ++a; ・・・(1) if(a) a++; ・・・(2) 教授下さい。 よろしくお願い致します。

  • すっきりしたソースを書くには

    エクセルVBA初心者です。 セルAの4行目から27行目までの範囲でセルDとFとGの値を消すというソースを作りたいのですが、以下のようなソースを何十個もつくるのは大変なので、もっとすっきりとした書き方はありますか? ご指導のほどお願いします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Cells(4, 1).Value = "" And Cells(4, 4).Value <> "" Then Cells(4, 4).Value = "" End If If Cells(4, 1).Value = "" And Cells(4, 6).Value <> "" Then Cells(4, 6).Value = "" End If If Cells(4, 1).Value = "" And Cells(4, 7).Value <> "" Then Cells(4, 7).Value = "" End If End Sub

  • VB6,論理演算子Orの使い方がわからない

    以下のようなコードを書きました。 If a = 0 Or 6 Then   msgbox a Else   msgbox "a" End If 期待しているのは、変数aの値が0か6のときにだけ変数aを表示するというものです。 しかし実際にはたとえばaの値が2のときでも変数aが表示されてしまいます。 ひょっとしてOrの使い方を間違っているのでしょうか? よろしくお願いします。

  • 論理演算について教えて下さい。

    基本的な論理演算について教えて下さい。 例えば、変数aにTrueを、変数bにNullを代入し、 a and b をした場合、Nullになるのは、わかるんですが、 a or b をした場合、なんでTrueになるんですか? 又、変数aにFalseを、変数bにNullを代入し、 a or b をした場合、Nullになるのは、わかるんですが、 a and b をした場合、なんでFalseになるんですか? お願いです。教えて下さい。。。 理由がわかりません。。。。

  • 下記の動作をなるべく少ない論理演算でやりたい

    入力(0か1)はabcdefthの8つで、1の場所を右にソートして入力と同じ形で出力したいんです 論理演算はNOT、AND、OR、XORしか使えず新しい変数は1bitのみしか使えません abcdefth 00000000 → 00000000 00000010 → 00000001 00001010 → 00000011 01100111 → 00011111 11111110 → 01111111 できれば40回未満程度でやりたいのですが、うまい方法は無いでしょうか?

  • 下記のマクロをもっと早くするには?

    下記のマクロは、 A列にあるURLがSSL化(https)されているかを調べるものです。 このマクロを動かすと、大体3秒に1つのURLを調べるくらいの早さです。 もっと早く調べられるようにするには、どのような記述にすればできるでしょうか? また、エクセルの他の設定で、マクロを早くできたりしますか? よろしくお願いいたします。 Sub SSL() Dim objHttp As Object Dim nURL As String Dim strURL As String Dim i As Long, f As String, l As String Dim Lastrow As Long, getLine As Long Set objHttp = CreateObject("WinHttp.WinHttpRequest.5.1") On Error GoTo ErrHandler 'A1から getLine = Cells(Rows.Count, 2).End(xlUp).Row Lastrow = Cells(Rows.Count, 1).End(xlUp).Row If getLine = Lastrow Then MsgBox "既に終わっているか、データがないです。", vbExclamation: Exit Sub If getLine < Lastrow And Cells(1, 2).Value <> "" Then getLine = getLine + 1 Else getLine = 1 '最初の行が1行目からの場合 End If For i = getLine To Lastrow strURL = LCase(Trim(Cells(i, 1).Value)) 'A列の登録URL strURL = Replace(strURL, "https:", "http:") If strURL Like "http*" Then objHttp.Open "GET", strURL, False objHttp.send DoEvents 'ESC割り込み可能にする With objHttp If .Status = 200 Then nURL = .Option(1) 'WinHttpRequestOption_URL f = Mid(strURL, 1, InStr(strURL, "://")) l = Mid(nURL, 1, InStr(nURL, "://")) If nURL = "" Then Cells(i, 2).Value = "no URL" ElseIf nURL <> "" Then If LCase(f) = LCase(l) Then Cells(i, 2).Value = "non SSL" Else Cells(i, 2).Value = "https" End If End If Else Cells(i, 2).Value = "Err:" & .Status End If End With End If Endline: nURL = "" strURL = "" Next i MsgBox "Finished" Exit Sub ErrHandler: If Err() <> 0 Then Cells(i, 2).Value = Err.Number 'マイナスになるのは外部エラー GoTo Endline End If End Sub

  • VBA 類似処理の件数を同様にする方法について

    ExcelVBAの初歩的な質問です。 【質問内容】 [CheckAcolumnBrank]と[CheckBcolumnBrank]の処理を行った際に、[CheckBcolumnBrank]の結果が[CheckAcolumnBrank]の結果と行数が異なるため(5行ほど多く処理されてしまいます)、[CheckAcolumnBrank]の行数に合わせるコードを知りたいです。 ご見識のある方からの、お知恵の拝借をいただきたく、よろしくお願い申し上げます。 【前提条件】 1.シート1のA5からJ500までの範囲のセルに値が入力されています(空欄セルが不規則にあります)。 2.レコード数は10行程度から450行程度です。 3.A列のセルに値が入っていない場合は、1つ上のセルの値をコピーする挙動です。 4.B列についても、A列と同じ挙動をさせたいです。 5.最終行を求める処理は「GetLastRow」にて行います。 -------------------------------------------- Function GetLastRow() As Long ' 最終行を求める処理 Dim i As Long Dim MaxValue As Long For i = 5 To 500 If Cells(i, "A").Value <> "" Then ' A列からJ列に入力されている値の最大値を求める MaxValue = Application.WorksheetFunction.Max(Range("A" & i & ":J" & i)) If MaxValue > GetLastRow Then GetLastRow = i End If End If Next End Function -------------------------------------------- Private Sub CheckAcolumnBrank() ' A列がブランクの場合、1つ上の値をコピペする処理 Dim currentRow As Long Dim emptyColumns As Boolean Dim Lcont As Long Lcont = GetLastRow Dim ws As Worksheet Set ws = Sheets("シート1") emptyColumns = False ' A列を埋めるループ処理開始 currentRow = 6 Do While currentRow <= Lcont If IsEmpty(ws.Cells(currentRow, 1).Value) Then ws.Cells(currentRow, 1).Value = ws.Cells(currentRow - 1, 1).Value End If ' 終了条件のチェック(E列からJ列がすべて空白、かつA列の1つ上の値が異なる場合に終了) If ws.Cells(currentRow, 5).Value = "" _ And ws.Cells(currentRow, 6).Value = "" _ And ws.Cells(currentRow, 7).Value = "" _ And ws.Cells(currentRow, 8).Value = "" _ And ws.Cells(currentRow, 9).Value = "" _ And ws.Cells(currentRow, 10).Value = "" _ And (ws.Cells(currentRow, 1).Value <> ws.Cells(currentRow - 1, 1).Value) Then Exit Do End If currentRow = currentRow + 1 Loop End Sub -------------------------------------------- Private Sub CheckBcolumnBrank() ' B列がブランクの場合、1つ上の値をコピペする処理 Dim currentRow As Long Dim emptyColumns As Boolean Dim Lcont As Long Lcont = GetLastRow Dim ws As Worksheet Set ws = Sheets("シート1") emptyColumns = False ' ループ開始 currentRow = 6 Do While currentRow <= Lcont If ws.Cells(currentRow, 2).Value = "" Then ws.Cells(currentRow, 2).Value = ws.Cells(currentRow - 1, 2).Value End If ' 終了条件のチェック(E列からJ列がすべて空白、かつB列の1つ上の値が異なる場合に終了) If ws.Cells(currentRow, 5).Value = "" _ And ws.Cells(currentRow, 6).Value = "" _ And ws.Cells(currentRow, 7).Value = "" _ And ws.Cells(currentRow, 8).Value = "" _ And ws.Cells(currentRow, 9).Value = "" _ And ws.Cells(currentRow, 10).Value = "" _ And (ws.Cells(currentRow, 2).Value <> ws.Cells(currentRow - 1, 2).Value) Then Exit Do End If currentRow = currentRow + 1 Loop Set ws = Nothing End Sub --------------------------------------------

  • Instr関数とLike演算子を組み合わせを教えて

    Instr関数とLike演算子を組み合わせたものでループさせたい(VBA) Instr関数で複数のOr条件を満たすものを印刷と表示させ、Like演算子でワイルドカードであいまい検索で一致するものも印刷と表示させたいのですが上手くいきません。 本当はInstr関数とLike関数を組み合わせたいのですが調べても出てこず困っております。 どなたかお教えいただけないでしょうか? ちなみにVBA初心者です、、 Sub 印刷() Dim SHEETNAME As String Dim n As Long SHEETNAME = ActiveSheet.Name 'データ数の確認 S = Sheets(SHEETNAME).Range("c1000").End(xlUp).Row '(1)標準製品かつ第一産業かつ-の右側がJのもの と (2)標準製品かつ第二産業のもの のみ印刷(13列目は製品区分、10列目は会社名、4列目は型式名称) For n = 3 To S If InStr(Sheets(SHEETNAME).Cells(n, 13).Value, "標準製品") > 0 And Sheets(SHEETNAME).Cells(n, 10).Value = "第一産業" And _ Right(Left(Sheets(SHEETNAME).Cells(n, 4).Value, InStr(Sheets(SHEETNAME).Cells(n, 4).Value, "-") + 1), 1) = "J" Or _ InStr(Sheets(SHEETNAME).Cells(n, 13).Value, "標準製品") > 0 And InStr(Sheets(SHEETNAME).Cells(n, 10).Value, "第二産業") > 0 Then Sheets(SHEETNAME).Cells(n, 12) = "印刷" Else: Sheets(SHEETNAME).Cells(n, 12).Value = Delete End If Next '型式名称にOOPPが含まれるもののみ印刷(4列目は型式名称) For n = 3 To S Dim strValue As String Dim strPattern As String strValue = "Cells(n, 4).Value" strPattern = "*OOPP*" If strValue Like strPattern Then Sheets(SHEETNAME).Cells(n, 12) = "印刷" Else: Sheets(SHEETNAME).Cells(n, 12).Value = Delete Next End Sub

専門家に質問してみよう