Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2556 / 13645 ツリー ←次へ | 前へ→

【67283】IF構文の繰り返しについて コム義 10/11/19(金) 22:26 質問[未読]
【67284】Re:IF構文の繰り返しについて ponpon 10/11/19(金) 23:13 発言[未読]
【67285】Re:IF構文の繰り返しについて kanabun 10/11/19(金) 23:31 発言[未読]
【67287】Re:IF構文の繰り返しについて コム義 10/11/20(土) 18:20 お礼[未読]

【67283】IF構文の繰り返しについて
質問  コム義 E-MAIL  - 10/11/19(金) 22:26 -

引用なし
パスワード
   VBA初心者です
繰り返し(For Next)について、困っています
A列 年齢
B列 性別
C列 国籍

D列はAからCの条件結果について
50歳以上の男性で日本国籍 ⇒1
30歳以上の女性で中国国籍 ⇒2

等制御構文で振り分けていくのですが

If Range("A1").value>=50 and Range("B1").value = "男性" and Range("C1").value = "日本国籍" then Range("D1").value = "1"
End If

If Range("A1").value>=30 and Range("B1").value = "女性" and Range("C1").value = "中国国籍" then Range("D1").value = "2"
End If

と記述すると当然AからDの1行目しか実行されません
これを繰り返しで数百行繰り返したいのですがどうすればよいのでしょうか?
よろしくお願いします。

【67284】Re:IF構文の繰り返しについて
発言  ponpon  - 10/11/19(金) 23:13 -

引用なし
パスワード
   構文を生かして回すだけなら

Sub test()
  Dim i As Long
  
  For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 1).Value >= 50 And Cells(i, 2).Value = "男性" And Cells(i, 3).Value = "日本国籍" Then
     Cells(i, 4).Value = "1"
    End If
  
    If Cells(i, 1).Value >= 30 And Cells(i, 2).Value = "女性" And Cells(i, 3).Value = "中国国籍" Then
     Cells(i, 4).Value = "2"
    End If

   Next

End Sub

だけど、シートが限定されてないので、違うシートを開いていれば
結果が出ません。

【67285】Re:IF構文の繰り返しについて
発言  kanabun  - 10/11/19(金) 23:31 -

引用なし
パスワード
   ▼コム義 さん:

>繰り返し(For Next)について、

For Each 〜Nextというのもあります。

>D列はAからCの条件結果について
>50歳以上の男性で日本国籍 ⇒1
>30歳以上の女性で中国国籍 ⇒2

(1)で、ActiveSheetのA列データ範囲を取得します
(2)で、判定結果書込み先D列を クリアしておきます。
(3)で、変数c をつかって A列セルを上から順に下へ降りていきます
  そのとき、まず B列の値で分岐します(B列データは 男か女なので)
  で、
   B列の値が 「男」だったときのみ、
    A列を調べ、値が50>= のときのみ、
      C列を調べ、値が「日本」のときのみ D列に 1を代入します。
   B列の値が「女」のときも、
    同様の処理をします。

 変数c は Loopの中で 順に変わっていくA列のセルのことです。
 たとえば
  c が [A1]のとき [B1] は c(1,2)  [C1] は c(1,3) と表されます。
  c が [A2]のとき [B2] は c(1,2)  [C2] は c(1,3) と表されます。
  c が [A3]のとき [B3] は c(1,2)  [C3] は c(1,3) と表されます。
  ・・・
 

Sub Try1()    '---- Sheet1
  Dim r As Range
  Dim c As Range
  
  Set r = Range("A1", Cells(Rows.Count, 1).End(xlUp)) '(1) A列
  r.Offset(, 3).ClearContents             '(2)
  For Each c In r                   '(3)
    Select Case c(1, 2).Value   'B列が
     Case "男"
       If c.Value >= 50 Then  'A列が
         If c(1, 3).Value = "日本" Then c(1, 4).Value = 1
       End If
     Case "女"
       If c.Value >= 30 Then  'A列が
         If c(1, 3).Value = "中国" Then c(1, 4).Value = 2
       End If
    End Select
  Next
End Sub

【67287】Re:IF構文の繰り返しについて
お礼  コム義 E-MAIL  - 10/11/20(土) 18:20 -

引用なし
パスワード
   ありがとうございました
おかげで謎が解けました
kanabunさん解説付で大変判りやすかったです
また何かありましたらお力を貸してください

2556 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free