| 
    
     |  | ▼ブーちゃん さん: > 違法なマルチサイトを使ってしまい、ビリーさんから、以下のコードの助言を頂き
 >ました。
 違法?
 
 まず、前回の回答見てくれていますか?
 Select Case の考え方を基本的に間違えている気がします。Caseごとに...の内容を見ると、Ifブロックで分岐する方法を言っているようにみえますが。
 わからないときはヘルプにきちんと目をとおしてますか?
 
 >Case毎に、処理を書いた方が処理内容が解り易いです。御願い致します。
 何にしても、分岐後の答えをはき出す関数を作って柔軟に対応したほうがよさそうなので。
 
 前回のCalc1以下を次のコードに直して使ってください。
 
 Sub Calc1(wb As Workbook)
 '  Private Sub() ←名前がないとエラーになる
 Dim RR&, Rmax&, Rpos&, II%, res$
 Dim ws(1 To 2) As Worksheet
 '全部Select Caseで分岐しました。
 Set ws(1) = ThisWorkbook.Worksheets("Sheet4")
 ws(1).Cells.Clear 'Sheet4を初期化
 Rpos& = 0 '書き出すときは上詰めで
 '開始
 On Error Resume Next
 'wbはコマンドボタンをクリックして開いたブック(オブジェクト変数)
 'このSubをCallするときに引数として渡される。
 '『Sheet8&9』を検索ということ?
 Set ws(2) = wb.Worksheets("Sheet8&9")
 On Error GoTo 0
 '『Sheet8&9』というシートが無かったらその後の処理は無し
 If Not ws(2) Is Nothing Then
 With ws(2).UsedRange
 Rmax& = .Cells(.Count).Row
 End With
 For RR& = 8 To Rmax&
 res$ = CheckDat(ws(2), RR&)
 If res$ <> "" Then
 With ws(2)
 Rpos& = Rpos& + 1
 For II% = 1 To 3
 ws(1).Cells(Rpos&, II%).Value = _
 .Cells(RR&, II% + 3).Value
 Next
 With ws(1).Cells(Rpos&, 4)
 .Value = res$
 If InStr(res$, "定義漏れ") > 0 Then
 .EntireRow.Interior.ColorIndex = 44
 Else
 .EntireRow.Font.ColorIndex = 3
 End If
 .Offset(0, 1).Value = RR& '行番号
 End With
 End With
 End If
 Next
 End If
 End Sub
 
 '判定結果を返す関数
 Function CheckDat(ws As Worksheet, RR&) As String
 Dim res$ '結果の文字列
 res$ = "分岐対象外" 'これが結果に表示されたら分岐の定義漏れの可能性大
 With ws
 If .Cells(RR&, 32).Value = 0 Then
 res$ = ""
 Else
 'M列N列の条件判定より先に分岐したいものがあればこの上に
 If .Cells(RR&, 13).Value = "A" And .Cells(RR&, 14).Value = "1" Then
 If .Cells(RR&, 11).Value = 1 Then
 Select Case .Cells(RR&, 18).Value
 Case 0:  res$ = "不具合A" 'エラー内容
 Case 1:  res$ = "" '何も表示しない
 Case Else: res$ = "1A1_定義漏れ" 'エラー内容
 End Select
 ElseIf .Cells(RR&, 11).Value = 2 Then
 Select Case .Cells(RR&, 18).Value
 Case 0:  res$ = "不具合B" 'エラー内容
 Case 1:  res$ = "" '何も表示しない
 Case Else: res$ = "2A1_定義漏れ" 'エラー内容
 End Select
 Else
 res$ = "?A1_定義漏れ" 'エラー内容
 End If
 Else
 'AF=0,M=A,N=1ではない分岐を書きたければここに書く。
 res$ = "???_定義漏れ" 'エラー内容
 End If
 End If
 End With
 '戻り値決定
 CheckDat = res$
 End Function
 
 37種類の分岐の内容が差しさわりがなければ教えてください。
 差しさわりがあるのなら、関数に分岐の例が入っていますので、順番に分岐を増やしてください。
 
 |  |