Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
IF~ELSEIF文と繰り返し文について教えてください
投稿日時: 20/11/09 17:38:10
投稿者: あはんです

F3セルにはIF(B3<>"",B3,IF(C3<>"",C3,IF(D3<>"",D3,E3)))という関数が設定されています。
 
上記をEXCEL VBA で処理したいと思います。
 
繰り返し文は do while loop文を考えていますが、
       for next文でも可能です。
 
つまずいている所はactivecell.offset(,1).selctを使うかな?
 for next文ならばif文の途中でif文を抜けることは理解できます。
 
宜しくお願い申し上げます。

回答
投稿日時: 20/11/09 18:06:21
投稿者: sk

引用:
IF(B3<>"",B3,IF(C3<>"",C3,IF(D3<>"",D3,E3)))

引用:
上記をEXCEL VBA で処理したい

引用:
繰り返し文は do while loop文を考えていますが、
       for next文でも可能です。

ループの繰り返し条件(開始条件と終了条件)を
具体的に明記されることをお奨めします。
 
1. ワークシートのある行の 2 列目( B 列)から 5 列目( E 列)までのセルを
   左の列から順に参照し、参照中のセルの値が空文字列ではない場合は
   その値を同じ行の 6 列目( F 列)のセルに代入してループを抜ける。
   (セルの値が空文字列である場合は、引き続きその次の列のセルの値を評価する)
 
2. 上記 1 の処理を、ある行からある行まで繰り返す。
 
( 2 の処理が必要かどうかや参照範囲、繰り返し条件等は
 今のところ一切不明)
 
とりあえずこういう感じの説明を行なって下さい。

投稿日時: 20/11/10 10:18:44
投稿者: あはんです

sk さんの引用:
引用:
IF(B3<>"",B3,IF(C3<>"",C3,IF(D3<>"",D3,E3)))

引用:
上記をEXCEL VBA で処理したい

引用:
繰り返し文は do while loop文を考えていますが、
       for next文でも可能です。

ループの繰り返し条件(開始条件と終了条件)を
具体的に明記されることをお奨めします。
 
1. ワークシートのある行の 2 列目( B 列)から 5 列目( E 列)までのセルを
   左の列から順に参照し、参照中のセルの値が空文字列ではない場合は
   その値を同じ行の 6 列目( F 列)のセルに代入してループを抜ける。
   (セルの値が空文字列である場合は、引き続きその次の列のセルの値を評価する)
 
2. 上記 1 の処理を、ある行からある行まで繰り返す。
 
( 2 の処理が必要かどうかや参照範囲、繰り返し条件等は
 今のところ一切不明)
 
とりあえずこういう感じの説明を行なって下さい。

 
開始条件
よb3からd3まで
cells(3,2)からcells(3,4)まで
 
終了条件
f3の値はif文で最初のtrueになった値を代入
不成立ならばf3はe3になる。
 
宜しくお願い申し上げます

回答
投稿日時: 20/11/10 11:13:57
投稿者: sk

引用:
開始条件
b3からd3まで
cells(3,2)からcells(3,4)まで
  
終了条件
f3の値はif文で最初のtrueになった値を代入
不成立ならばf3はe3になる。

------------------------------------------------------------
 
Dim lngRow As Long
Dim lngColumn As Long
Dim blFlag As Boolean
 
lngRow = 3
blFlag = False
 
For lngColumn = 2 To 4
    blFlag = (Cells(lngRow, lngColumn).Value <> "")
    If blFlag = True Then
        Cells(lngRow, 6).Value = Cells(lngRow, lngColumn).Value
        Exit For
    End If
Next
 
If blFlag = False Then
    Cells(lngRow, 6).Value = Cells(lngRow, 5).Value
    blFlag = True
End If
 
------------------------------------------------------------
 
以上のようなコードを実行なさりたい、ということでしょうか。

回答
投稿日時: 20/11/10 11:27:41
投稿者: simple

折角書いたので、まるかぶりですが。

Sub test1()
    Dim k As Long
    For k = 2 To 5
        If Cells(3, k) <> "" Then
            Cells(3, "F") = Cells(3, k)
            Exit For
        End If
    Next
End Sub

こんなExcel的方法もあるかも。
Sub test2()
    'B3〜F3まで式入力はなく、値を直接入力しているものとして
    [F3] = [A3].End(xlToRight).Value
End Sub

回答
投稿日時: 20/11/10 11:48:09
投稿者: simple

test2は繰り返し構文ではないので、どうでもよいかもしれないが
If r.Column <= 5 then の要件追加が必要ですね。
 
なお、繰り返し構文には、Do.. Loopもありますが、
予めループ範囲が決まっている場合は、
For .. Nextを使用した方がよいと思います。
(1)位置を進める処理(increment処理)を書く必要がないこと
(2)一回ごとの範囲内判定が不要なこと
(3)無限ループに陥る可能性がないこと
などが理由です。
また、慣れない内は特に、Do Loopのほうが難しいです。
 
このケースに限っていえば、
つまり、多数の行で繰り返すでもなければ、
数式で十分な気もします。

投稿日時: 20/11/10 13:09:55
投稿者: あはんです

初心者で初めての投稿で解決しました。
ありがとうございました。
 
感じことは、スタートとゴールを書くことを忘れたこと。
文字だけで第3者に伝えることが難しいと思いました。
 
これから、次のステップにいきます。
また、お世話になります。
 
宜しくお願い申し上げます。