- ベストアンサー
奇数・偶数の判断 VBA
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
やりようは幾らでもありますが、たとえば sub macro1() dim i for i=1 to 10 if i mod 2 = 0 then msgbox i & " is even" else msgbox i & " is odd" end if next i end sub 他にも、WorksheetfunctionのOddとかEvenとか使ってみたり、単純に2で割り算した答えがどうかとか。
その他の回答 (2)
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 1ビット目がオンの場合は奇数、オフの場合は偶数です。 Sub Macro1() Dim i As Long For i = 1 To 10 If (i And 1) = 0 Then '偶数ならと言うコード MsgBox "偶数です" Else MsgBox "奇数です" End If Next End Sub
お礼
(i And 1) = 0 と言う方法もあるのですね。 こちらの方法でやって行きたいと思います。ありがとうございました。
- TYWalker
- ベストアンサー率42% (281/661)
iを2で割って、int関数を掛けて、また2倍した数が、iと同じなら偶数です。 小さくなっていれば奇数です。
お礼
「iを2で割って、int関数を掛けて、また2倍した数が、iと同じなら偶数」 この法則を覚えます。ありがとうございました。
関連するQ&A
- 偶数、奇数の判定について
こんばんは 以下のマクロにて、最初はx=1なので「奇数」、次はx=x+1で2になっているので「偶数」と表示されるように作ったつもりなのですが、何故か全部「奇数」の表示になってしまいます。 どこがおかしいのか分からないので、教えて頂きたいです。 Sub macro() Dim x, y As Integer x = 1 Do y = x Mod 2 Select Case y Case y = 0 MsgBox "偶数" Case y = 1 MsgBox "奇数" End Select x = x + 1 Loop Until x = 10 End Sub
- 締切済み
- Visual Basic
- excel・VBAで奇数・偶数の分岐がうまくいかない。
一覧が入っているシートから宛名用のシール印刷をするために、VBAを使用しています。 ラベル印刷は ┏━━━━┓┏━━━━┓ ┃ 奇数 ┃┃ 偶数 ┃ ┗━━━━┛┗━━━━┛ みたいな感じです。 奇数:一覧シートの奇数行 偶数:一覧シートの偶数行 ですが、奇数の方はうまく出るのですが、偶数の方が1つおきになってしまいます。 これのどこが間違っているのでしょうか? Worksheets("Sheet1").Select Last = Cells(1).CurrentRegion.Rows.Count For i = 2 To Last Worksheets("Sheet1").Select Yuubin = Cells(i, 1) Name = Cells(i, 6) Dim AllCount As Integer Worksheets("TEST").Select Kotae = i / 2 Amari = i Mod 2 AllCount = i / 12 If Amari = 0 Then Ichi = (((Kotae - 1) * 9) + 1) - AllCount Cells(Ichi, 2) = "〒" & Left(Yuubin, 3) & "-" & Right(Yuubin, 4) Cells(Ichi + 7, 4) = Name & " 様" ElseIf Amari = 1 Then Ichi = (((Kotae - 1) * 9) + 1) - AllCount Cells(Ichi, 17) = "〒" & Left(Yuubin, 3) & "-" & Right(Yuubin, 4) Cells(Ichi + 7, 19) = Name & " 様" & i End If '奇数偶数分岐 Next ' 全件分終るまで よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- VBAで教えてください。
データがないときはExitSubしたいのですが、何処に記述すれば良いでしょうか? Sub 削除() Dim i As Long If MsgBox("データを削除します。よろしいですか?", vbYesNo) = vbYes Then Sheets("リスト").Select i = 5 Do Until i = 200 If Cells(i, 5).Value = Sheets("マスタ登録").Range("D5") Then Cells(i, 1).EntireRow.Delete End If i = i + 1 Loop Else Exit Sub End If End Sub
- ベストアンサー
- オフィス系ソフト
- EXCEL VBA2010 MsgBox
Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。
- ベストアンサー
- Excel(エクセル)
- Excel VBAで検索(Win2000 Excel2000)
現在、下記のようなコードを書いています。データテーブルの縦と横の検索値を探してその列数と行数を返したいのですが、下記の Sub検索1 と Sub検索2 を1つのSubで実行させるにはどうしたらよいのでしょうか?よろしくお願い致します。 ----------------------------------------- Sub 検索1() Worksheets("Data").Activate Dim x As Integer For x = 3 To 22 If Cells(2, x).Value >= 12 Then MsgBox x Exit Sub End If Next MsgBox "見つかりません" End Sub --------------------------------------------- Sub 検索2() Worksheets("Data").Activate Dim i As Integer For i = 4 To 42 If Cells(i, 2).Value = "A" Then MsgBox i Exit Sub End If Next MsgBox "見つかりません" End Sub
- ベストアンサー
- オフィス系ソフト
- エクセル、ワークシートが保護されているかどうかを判断するVBAは?
以下のように書いてもダメでした。 どう直せばよいでしょうか? Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).Protect = False Then MsgBox Worksheets(i).Name End If Next End Sub
- ベストアンサー
- オフィス系ソフト
- VBA どこでもセル選択
教えて頂いたVBAなのですがもう一つ Sub Macro1() Dim Ws01 As Worksheet Dim Counter As Long, i As Long, j As Long Dim INP As String Set wS = Worksheets("Sheet4") wS.Cells.ClearContents For i = 3 To ActiveSheet.UsedRange.Rows.Count INP = "" For j = Selection(1).Column To Selection(Selection.Count).Column If Cells(i, j) = 1 Then INP = INP & Cells(2, j) & "," End If Next j Counter = Counter + 1 If INP <> "" Then wS.Cells(Counter, "A") = Left(INP, Len(INP) - 1) End If Next i End Sub -------------------------------------------------------------- For i = 3 のところを3としないでどのセル(行)にも対応させたいのですが どうすればいいでしょうか?
- ベストアンサー
- Excel(エクセル)
- Excel2000のVBAでわからないことがあります。
こんなものを作ってみました。 Sub 理想体重() Dim Sin As Long Dim Tai As Long Sin = InputBox("あなたの体重は?", "体重") Tai = InputBox("あなたの身長は?", "身長") If Tai >= Sin * Sin * 21 / 10000 + 3 Then MsgBox "太りすぎです" ElseIf Tai <= Sin * Sin * 21 / 10000 - 3 Then MsgBox ("痩せすぎです") Else MsgBox ("標準です") End If End Sub 結果はきちんと出てくるのですが、最初の変数宣言のところがわかりません。 最初は、Longではなく、Integerにしたのですが、オーバーフローのエラーが出たので、Longに変更したところ、きちんと出てくるようになりました。 しかし、なぜ、Integerではだめなのかがわかりません。私としては、Integerは32,767までの数字が入るのだから、身長や体重を入れたぐらいだと、オーバーフローにはならないのではないかと考えています。 きっと、根本的なものがわかっていないんだとは思うのですが、違いを教えていただければうれしいです。 よろしくお願いいたします。 (VBAを勉強したばかりです。)
- ベストアンサー
- オフィス系ソフト
- 2つのVBAを組み合わせる方法
お世話になります、2つのVBAを組み合わせる方法で迷っています。 1つ目が Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long, k As Long, myNum As Long If Intersect(Target, Range("C1,B9:B39")) Is Nothing Or Target.Count > 1 Then Exit Sub Application.EnableEvents = False With Target If .Column = 3 Then myNum = WorksheetFunction.Max(Range("B9:B39")) If IsDate(.Value) Then For i = 9 To 39 If Cells(i, "A").Value = "" Then Cells(i, "B").Value = "" Else Cells(i, "B") = myNum + i - 8 End If Next i End If Else i = .Row If .Value = "" Then Range(Cells(i + 1, "B"), Cells(39, "B")).ClearContents Else For k = i + 1 To 39 If Cells(k, "A").Value = "" Then Cells(k, "B").Value = "" Else Cells(k, "B") = Cells(k - 1, "B") + 1 End If Next k End If End If End With Application.EnableEvents = True End Sub です。 2つめが Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = True If Intersect(Target, Range("R8:R38")) Is Nothing Then Exit Sub Application.EnableEvents = False Range(Cells(Target.Row, 18), Cells(39, 18)).Value = Target.Value Application.EnableEvents = True End Sub です。2つのPrivate Sub Worksheet_Change(ByVal Target As Range)イベントのVBAですが、どのようにして組み合わせれば良いのでしょうか?
- ベストアンサー
- Excel(エクセル)
- VBA:カウンターの i の値が開放されなくて困っています。
以下のコードを実行する度に、カウンター i の値がリセット(開放)されずに積算されて困っています。なぜか教えて下さい。宜しくお願い致します。 以下のコードは、簡単に言えばcsvファイルをカウンター i で数えています。したがって、少なくともCSVファイルを一つ作成して実行して下さい。 Option Explicit Dim FiName As String, FoName As String Dim EachFiName As String Dim i As Integer Sub Test() MsgBox i '二回目にこのコードを実行するとiが積算されます。 FiName = Application.GetOpenFilename If FiName = "False" Then Exit Sub Else If Right(FiName, 3) <> "csv" Then MsgBox "Chose a CSV file." Exit Sub End If End If FoName = Left(FiName, InStrRev(FiName, "\", -1, vbTextCompare)) EachFiName = Dir(FoName & "*.csv") Do While EachFiName <> "" i = i + 1 EachFiName = Dir() Loop End Sub
- ベストアンサー
- Visual Basic
お礼
ご提示いただいたコードでうまく出来ました。 evenとoddがキーワードのようですね。