[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件分岐後の処理』(あい)
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
'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」は↓のどちらかを通ることになりますが、「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.