• 締切済み

EXCEL2002 VBAのループ処理について

セルB1~B24に入力した数字を i とすると、 コマンドボタンを押したときに、セルB1~B24にの全てに値が入力されていて、 セル( F & i )が空白であれば、そこにセルA1の値を入れるようなマクロを作成しています。 セル( F & i )への入力は、セルB1~B24の全部に数値が入力されており、セル( F & i )が空白があるときのみ処理が実行されるように。どちらかが満たされない場合には、メッセージボックスを表示し、処理しないようにしたいのですが、どうしても途中まで入力されてしまいます。 以下のようなコードですが、何か良い方法はないでしょうか? Private Sub CommandButton1_Click() 'ロール確認 Dim 入力 As String, パレット As String Dim i As Long, t As Long For i = 1 To 24 入力 = Range("B" & i) パレット = Range("F" & i) If 入力 = "" Then MsgBox "aaa" Exit For End If 'パレットNo.転記 If パレット <> "" Then MsgBox "bbb" Exit For ElseIf パレット = "" Then Range("F" & 入力).Value = Range("A1").Value End If Next i End Sub

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

条件が曖昧です 前半の説明では B1~B24すべてに必ず値が入っている 入っていなければ、処理をメッセージ表示後中止 入っていれば、F1~F24の値が空白のもののみ、A1の値を代入する しかし、後半の説明では B1~B24すべてに必ず値が入っている 入っていなければ、処理をメッセージ表示後中止 はいって入れば、次の条件 F1~F24すべてが必ず空白である 空白でなければ、処理をメッセージ表示後中止 空白でならば、F1~F24すべてに値を代入 どちらなのか、判断に苦しむ所です しかし >どうしても途中まで入力されてしまいます。 と、最後にあるので、後半の条件であろうと解釈し コードを修正してみました Private Sub CommandButton1_Click() 'ロール確認 Dim 入力 As String, パレット As String Dim i As Long, t As Long '---B1~B24すべてに値が入っていることの確認 For i = 1 To 24 入力 = Range("B" & i) If 入力 = "" Then MsgBox "aaa" Exit Sub End If Next i '---F1~F24すべてが空白であることの確認 For i = 1 To 24 パレット = Range("F" & i) 'パレットNo.転記 If パレット <> "" Then MsgBox "bbb" Exit Sub End If Next '---F1~F24に値の入力 For i = 1 To 24 入力 = Range("B" & i)              '??? Range("F" & 入力).Value = Range("A1").Value  '??? 'Range("F" & i).Value = Range("A1").Value  'こっちでは '#2さんも指摘していますが、間違いでは? '間違いの場合は???の付いた2行を削除してください Next i End Sub 最初のうちは、一つ一つ処理をしていく方が確実で 分かりやすいと思います

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

B1:B24のすべてに数値がはいってなければ作動させないのであれば、最初に If Application.WorksheetFunction.Count(Range("B1:B24")) <> Range("B1:B24").Count Then  MsgBox "B1:B24のすべてに数値がはいるという前提を満たしません。"  Exit Sub End If を入れておけばいいと思います。 すると、If 入力 = "" Then のチェックはいらなくなりますね。 ただ、 i = 1 To 24としているのですから、セル( F & i )とはF1~F24ですよね? なのに、Range("F" & 入力).Value って、なんか変なようなきがしますがいいんでしょうか?

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

>セルB1~B24にの全てに値が入力されていて となっているのに範囲内の検索が終了する前にF&iセルに入力を行おうとしている部分が問題ですね。 一度B列の範囲内に""がないかどうかの確認を行いその後F列の指定セルに代入する形式に変える必要があります。