• ベストアンサー

if文について

以下のプログラムで期待通りの動きが出来ません、間違いを教えて下さい。 n = 4 For i = 1 To 24 Hen = Cells(n, 3)  If Hen = data(i, 3) Then Exit n = n+13 Cells(z, 6) = data(i, 2) 'ISRC Next 「Hen」の変数と「data(i, 3)」の変数が同じ場合は 「Cells(z, 6) = data(i, 2)」を実行して 違う場合はnに13を足して再度if文の実行を行いnが255を越えたらiを一つ増やしてnを4に戻してiが24になるまで繰り返したいのですが。 PS、「data(i, 3)」は事前に登録済みです。 教えて下さい。 以上

  • homma
  • お礼率84% (744/884)

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

  • ベストアンサー
回答No.3

こんばんは。 書き方はいろいろありそうですが・・・、 For i = 1 To 24 n = 4 Do Until n > 255 Hen = Cells(n, 3) If Hen = data(i, 3) Then Cells(z, 6) = data(i, 2) End If n = n + 13 Loop Next これで動くかな? 試してないので・・・すみません・・・。 (^^ゞ

homma
質問者

お礼

回答ありがとうございました、質問が下手で申し訳有りませんでした、今一度整理して質問させていただきます。本当に失礼しました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

(1)EXITがおかしい (2)Zはどう言う風にして決まるのでしょう。 突然出てきているが。 同じくdata(i,3)も突然出てきている。Cells(i,3)の間違い? こういう書き方(初期設定を省くと)回答者がテストしようがない。 シート上のデータについて、したいことを文章にして(いわゆるコメント)を入れてみて、回答者に説明し教えてもらえば。

homma
質問者

お礼

回答ありがとうございました。ご指摘の通り質問が中半端でした、自分の中で今一度制して質問させていただきます。本当にありがとうございました。

回答No.2

こんばんは。 VBっぽいですが・・・。 ご記載のロジックですと、 Henがdata(i, 3)と同じならExit??? つまり、For文を抜けてるわけですが・・・。 違うのかな? (^^ゞ

homma
質問者

補足

回答ありがとうございます、実はプログラム初心者です。よろしければ正規のプログラムを教えてもらえないでしょうか。

  • marimo_cx
  • ベストアンサー率25% (873/3452)
回答No.1

言語はなんですか?

homma
質問者

補足

失礼しました、エクセルのVBAです。

関連するQ&A

  • エクセル2000のマクロで、if文が想定通りに動かない

    90から93列目にかけて、データが 0又は3~4桁の数字が入っている状態です。 4810,0,0,2430 以下はマクロの抜粋です。 やりたいことは、0でなければ各変数に1を代入し、95列めに合計を入力します。 If Cells(i, 90) <> 0 Then w = 1 If Cells(i, 91) <> 0 Then x = 1 If Cells(i, 92) <> 0 Then y = 1 If Cells(i, 93) <> 0 Then z = 1 Cells(i, 95).Value = w + x + y + z このマクロを実行しますと、実際には0でない列が2列にもかかわらず、95列目に3と入力されてしまいます。1行ずつ実行してみたら、if文の3行目の92列目の判定が変です。 実行中に、カーソルをかざすとCells(1, 92)=0と表示されるのですが、合計を代入するところの y には1が代入されてしまっています。 何か間違っているんだと思いますが、分かりません。よろしくお願いします。

  • VBA 単純なIF文ですが?

    以下のような文を書いたときに、If文の後の変数を「set_s」にした場合イコールが実行されません。 「set_s」を単純な数字(この場合16)にするとIf文が機能します。 なぜでしょうか。 Do set_s = 16 Cells(1, 1) = Time h = Left(Time, 2) m = Mid(Time, 4, 2) s = Right(Time, 2) If set_s = s Then Cells(8, 2) = "時間です。" Exit Do Else Cells(8, 2) = "まだです。" End If Loop

  • if文について

    Excel 2007 VBAを使用しています。 ↓のクリックイベントを実行するとif文のところで不具合があります。 商品シートのC列には、状況が保存されています。 該当した年月、"受取済み"、"注文中"以外の行データをリストさせます。 商品シートのJ列、W列には、該当した年月、"受取済み"、"注文中"以外の行データが存在するのですが、まったく検出してくれません。 対処方法を教えてくれませんか? ------------------------------------------- Option Explicit Private Sub CB1_Click() '変数を定義 Dim i As Long Dim maxRow As Long Dim inSheet As Worksheet Dim outSheet As Worksheet '入出力先のシートをオブジェクト変数へ格納 Set inSheet = Worksheets("商品") Set outSheet = Worksheets("結果") 'テキストボックスの内容を判定 If (Me.TextBox21.Value = "") Or (Not IsDate(Me.TextBox21.Value)) Then MsgBox "日付が入力されていません" Exit Sub End If '最終行番号を取得 maxRow = Me.Cells(Rows.Count, "A").End(xlUp).Row '商品シートの最終行番号で分岐処理 If maxRow > 3 Then '出力先を削除してヘッダーをコピー outSheet.Cells.Delete inSheet.Range("A3").EntireRow.Copy outSheet.Range("A1") Application.CutCopyMode = False Else '4行目以降にデータが入力されていなければメッセージで終了 MsgBox "該当データがありません" Exit Sub End If '4行目から最終行まで繰り返し For i = 4 To maxRow 'J列が日付であれば処理 If IsDate(inSheet.Cells(i, "J").Value) Then '--------機能しない箇所(開始) If Year(inSheet.Cells(i, "J").Value) <= Year(Me.TextBox21.Value) And _ Month(inSheet.Cells(i, "J").Value) <= Month(Me.TextBox21.Value) And _ CStr(inSheet.Cells(i, "W").Value) <> "受取済み" And CStr(inSheet.Cells(i, "W").Value) <> "注文中" Then '--------機能しない箇所(終了) inSheet.Rows(i).Copy outSheet.Rows(cnt + 2) End If End If Next i End Sub

  • ExitでIFステートメントを抜けたい

    Sub test() Dim n As Byte, i As Byte For i = 0 To 5   If n = 0 Then    n = n + 1   Else    Exit For '(1)ここから   End If i = i + 1 '(2)ここへ来たい(IFステートメントだけ抜けたい) Next i End Sub のように(1)から(2)へ行きたいのですが このコードを実行すると Forステートメントを抜けてしまい、マクロが終了してしまいます。 「Exit If」にするとエラーになってしまいます。 Exitを使用してIFステートメントだけ抜け、 Forステートメントに戻るにはどうすればいいでしょうか? ご教授よろしくお願いします。

  • IF文の使い方を教えてください

    もし A5001 に データがあるのなら処理を中止し、データが無ければ処理を継続する。内容のマクロを考えてますが、 A5001にデータがないなら処理を中止は下記の記述で良いかと思いますが、 逆にあったら処理を中止する記述はどうすればよいのですか? Value が怪しいかと思うのですが・・・・ お願いします。 If Range("読み込み!A5001").Value = "" Then MsgBox "データがありません", vbOKOnly, "データ有無確認" Exit Sub End If ret = MsgBox("過去のシュミレーションデータを削除します。よろしいですか?", vbYesNo + vbQuestion, "データ削除実行確認") If ret = vbNo Then Exit Sub End If

  • IF構文の使い方

    皆さんにはいつもお世話になっております。 エクセルVBAでご教授していただきたいことがあります。 1行目は空白行で、B2~CW51がデータがあるセルです。 A列は空白列で、B列(B2以降)にデータがある場合は、ListBox3の文字列を同行のcell(i , "A")に代入したいのですが。 下記のように、if構文を使ってみたのですが、うまくいきません。 Sub テスト_Click() Dim i As Integer With ActiveSheet For i = 2 To 51 If .Cells(i, "B") = "" Then .Cells(i, "A") = "" Else Cells(i, "A") = ListBox3.Value Exit For End If Next End With End Sub よろしくお願いいたします。

  • エクセルVBAのIF・・・Else文について

    A列に日付が入っていて、それが12月の時はF列に"○"、 それ以外は"×"と表示したいのですが、下記を実行すると、 A列の空白セルの時もF列に"○"が表示されます。 何故でしょうか。Offsetを使って作成したいのですが、 すみませんが、宜しく御願いします。 Sub Test()  Dim i   For i = 2 To 20    If Month(Cells(i, 1)) = 12 Then     Cells(i, 1).Offset(0, 6) = "○"    Else     Cells(i, 1).Offset(0, 6) = "×"    End If   Next End Sub

  • If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou こちらについて教えていただきたいです。

    myTorikomibi = Range("A2").Value If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, 4) = myTantou If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, 14) = myTantou If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, 24) = myTantou For i = 1 To 3 If myCityBUNRUINO = 0 Then Cells(myPrefNO + 3, i + 4) = myTorikomibi If myCityBUNRUINO = 1 Then Cells(myPrefNO + 3 - 47, i + 14) = myTorikomibi If myCityBUNRUINO = 2 Then Cells(myPrefNO + 3 - 47 - myCityNu, i + 24) = myTorikomibi Next i マクロを編集しようとしましたところこちらが解読できづに困っています。 こちらだけとりだして実行しながら解読していますが混乱してしまっています。ご存知の方いらっしゃいましたら教えてください。Then以降がわかりません。よろしくお願いいたします。

  • for文の使い方

    for文の中にif文を入れて使いたいのですが「Nextに対するforがありません」となりエラーが出てしまいます。どうしたらよいのでしょうか? If Option1.Value = True Then For i = 2 To 10  If xlSheet.Cells(i, 2).Value > 10 Then Form2.List1.AddItem xlSheet.Cells(i, 1) Next i End If End If

  • If Like Then条件式可変の場合の処理

    VBAにてSheet1の指定された番地にあるセルの値がSheet2のセル範囲にない場合はセルに色をつけると言うマクロを組んでいます。 Sub test() Dim i,z As Integer Dim WS As Worksheet Dim LastRow As Integer Dim Word1,Word2,Word3 As String Set WS = Worksheets("Sheet1") Word1 = WS.Cells(1,16).Value Word2 = WS.Cells(1,17).Value Word3 = WS.Cells(1,18).Value with Worksheets("Sheet2") LastRow = .Range("A" & Rows.Count).End(xlUp).Row For i = 3 To LastRow For z = 6 To 9 If .Cells(i,z).Value Like "*" & Word1 & "*" Or _ .Cells(i,z).Value Like "*" & Word2 & "*" Or _ .Cells(i,z).Value Like "*" & Word3 & "*" Then Else .Cells(i,z).Interior.ColorIndex = 6 End If Next Next End Sub 上記のマクロで変数Word1,2,3が1つだけの場合もあれば Word10まである場合も有り式を変更する必要が有ります。。 この場合、If Like 変数 Or の部分をフレキシブルに対応させる為にはどの様な式を書けば良いでしょうか(ToT)? 申し訳ありませんがご教授下さい(ToT) 宜しくお願い致します。

専門家に質問してみよう