[[20200507132552]] 『条件分岐後の処理』(あい) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『条件分岐後の処理』(あい)

VBAに関しての質問です。

エクセルファイルを取り込んで処理を行うVBAを作成しています。
取り込んだファイルの名前によって定義を定めて処理を行うため

〜取り込んだファイルが◇〜
If FileName = "■" Then
A = 1
Else
A = 2
End If

Workbooks(wb).Sheets(Workbooks(wb).Sheets.Count).Columns("Q" & A).Delete

ファイル名が「■」だったらAは「1」そうでなければAは「2」
この場合Aは「2」となるため
Workbooks(wb).Sheets(Workbooks(wb).Sheets.Count).Columns("Q2").Delete
といった処理を行いたいです。

このコードでは当然ながらEnd Ifのあとに分岐処理は行えませんが、
一度分岐で定義を決めたあとに処理を行うことは可能でしょうか?

よろしくお願いいたします。

< 使用 Excel:Excel2010、使用 OS:Windows10 >


仰ってることがよくわかりませんが、質問とは関係ない部分で
 誤 Columns("Q2")
 正 Range("Q2")

だったりします?

仮に、Rangeが正しかったとすると↓のようなことだったように思えて、どちらもQ列になるので違いが無いなぁなんて思うのですが・・・

 Range("Q2").EntireColumn.Delete
 Range("Q1").EntireColumn.Delete

質問の方は、もう何パターンか例を示せませんか?
今のコードだと「A」という変数に数値(数字)が入って、ちゃんと処理分岐するように思えるんですが・・・

(もこな2 ) 2020/05/07(木) 13:54


Private Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)

'Application.ScreenUpdating = False

Dim FilePath As String, wb As String, ThisWbPath As String, ThisWb As String
Dim F As Long, Title As Long, CouCol As Long, LastRow As Long, D As Long, KyotenColumn As Long, ThisColumn As Long
Dim MatchRow As Range

If Data.Files.Count = 0 Then Exit Sub

    カレンダー.Show 1 '取り込む日付を選ぶ

    For F = 1 To Data.Files.Count

        FilePath = Data.Files(F)
        wb = Dir(FilePath) 'ファイル名を取得(各自のファイル)
        Workbooks.Open FileName:=FilePath
        FileA = Mid(FilePath, InStrRev(FilePath, "\") + 1, 4)

            ThisWbPath = ThisWorkbook.Path
            ThisWb = FileA & "■みんな■.xlsx"  'みんなのファイル
            Workbooks.Open FileName:=ThisWorkbook.Path & "\" & FileA & "■みんな■.xlsx"

********************************************

            'ここに分岐を入れる
            If FileA <> "■みんな■" Then
                A = S
                N = 18

            Else

                A = V
                N = 21

            End If

********************************************

            Workbooks(wb).Sheets(Workbooks(wb).Sheets.Count).Range("○8:○60").Formula = "=D8&E8&F8"

            '-----------------------------------------------------------------------------------------------------------------
                For D = 6 To 60

                    LastRow = Workbooks(ThisWb).Sheets(Workbooks(ThisWb).Sheets.Count).Range("C200").End(xlUp).Offset(1, 0).Row

                        If Workbooks(wb).Sheets(Workbooks(wb).Sheets.Count).Cells(D, 3).Value = rtnDate Then

                            Set MatchRow = Workbooks(ThisWb).Sheets(Workbooks(ThisWb).Sheets.Count).Range("○1:○200"). _
                            Find(what:=Workbooks(wb).Sheets(Workbooks(wb).Sheets.Count).Cells(D, ○).Value, LookIn:=xlValues)
                        '------みんなのファイルの○列に一致する行がなかった時の処理-------------
                            If MatchRow Is Nothing Then
                            ThisColumn = 3
                            For KakuColumn = 3 To ○
                                If ThisColumn = 7 Then
                                    ThisColumn = ThisColumn + 1
                                End If

                            Workbooks(ThisWb).Sheets(Workbooks(ThisWb).Sheets.Count).Cells(LastRow, ThisColumn).Value = _
                            Workbooks(wb).Sheets(Workbooks(wb).Sheets.Count).Cells(D, KakuColumn)
                            ThisColumn = ThisColumn + 1

                            Next KakuColumn
                        '-------みんなのファイルの○列に一致する行があればその行へ上書きする-----------
                            Else

                            ThisColumn = 3
                            For KakuColumn = 3 To ○
                                If ThisColumn = 7 Then
                                    ThisColumn = ThisColumn + 1
                                End If

                            Workbooks(ThisWb).Sheets(Workbooks(ThisWb).Sheets.Count).Cells(MatchRow.Row, ThisColumn).Value = _
                            Workbooks(wb).Sheets(Workbooks(wb).Sheets.Count).Cells(D, KakuColumn)
                            ThisColumn = ThisColumn + 1

                            Next KakuColumn
                        '------------------------------------------------------------------
                            End If

                        End If
                Next D

    Workbooks(ThisWb).Sheets(Workbooks(ThisWb).Sheets.Count).Range("I9:N69").Replace what:="-", replacement:=""
    Workbooks(wb).Close SaveChanges:=False
    Workbooks(ThisWb).Close SaveChanges:=True

Next F

End Sub

上記が実際のマクロです。
*内の分岐後〇のついた箇所をAもしくはNで定義したいです。

このまま実行するとAやNはEmpty値となります。

またご指摘いただいたColumnは上記の場合Rangeでした。

ご確認のほどよろしくお願いします。
(あい) 2020/05/07(木) 14:26


なんというか・・・変数名などわざと分かりづらくしているコードに思えます。
とりあえず、
>AやNはEmpty値となります。

「A」は↓のどちらかを通ることになりますが、「S」も「V」も未定義なのでそれが代入されちゃうのが原因ですね。
A = S
A = V

「N」は↓のどちらを通った段階で、数値が入るのでEmpty値というのはおかしいです。
N = 18
N = 21

したがって、変数宣言を強制したうえで、ステップ実行してもう一度チェックしなおしてみてはどうでしょうか?
http://officetanaka.net/excel/vba/beginner/06.htm

(もこな2 ) 2020/05/07(木) 15:41


ご指摘ありがとうございます。

Aに関しては単純に
S列、V列を指定したかったため
""が漏れておりました。

正常に作動しました。

ありがとうございました。
(あい) 2020/05/07(木) 16:25


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.