|
ブーちゃん さん、おはようございます。
フォーム(UserForm1)にコマンドボタン(CommandButton1)とリストボックス(ListBox1)を配置
フォームをダブルクリックしてフォームのモジュールに以下を記述。
(Private Sub UserForm_Click()が自動生成されたら消去)
'↓ここから============================================================
Dim Ipath As String 'フォルダ名はグローバル変数にしておく。
Private Sub CommandButton1_Click()
Dim wb As Workbook
On Error GoTo ErrOut1
'
If MsgBox(Me.ListBox1.Text & "をチェックしますか?", vbYesNo) = vbYes Then
Set wb = Workbooks.Open(Ipath & Me.ListBox1.Text)
'内容をチェックするSubに移動
Calc1 wb
With wb
.Saved = True
.Close
End With
'
Set wb = Nothing
'フォームを閉じる
Me.Hide
End If
Fgate:
Exit Sub
'////////
ErrOut1:
'エラーにより中断
MsgBox Error(Err), vbExclamation, Err
Resume Fgate
End Sub
Private Sub ListBox1_Change()
'ListBox1のIndexが1以上でCommandButton1のEnabledがTrue(使えるようになる)
CommandButton1.Enabled = (ListBox1.ListIndex >= 0)
End Sub
Private Sub UserForm_Activate()
Dim Ifile As String, CC%
On Error GoTo ErrOut2
'リストボックスにファイル名追加
Ipath = "C:\EXCEL全集\" 'パス名指定
Ifile = Dir(Ipath & "*.xls")
Do Until Ifile = ""
Me.ListBox1.AddItem Ifile
Ifile = Dir '引き続き検索
Loop
'ファイル名を指定するまではCommandButton1を使えなくする
CommandButton1.Enabled = False
Fgate:
'することがあればここに書く
Exit Sub
'////////
ErrOut2:
'エラーにより中断
MsgBox Error(Err), vbExclamation, Err
Resume Fgate
End Sub
'↑ここまで============================================================
標準モジュール(Module)を挿入して、以下を記述
'↓ここから============================================================
Option Explicit
Sub MAIN()
'フォームを表示
UserForm1.Show
Unload UserForm1
End Sub
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&
'AFが0以外の時
With ws(2)
If .Cells(RR&, 32).Value <> 0 Then
'↑RR&のループの外に書いたら、行番号が0になるので必ずエラー
'改行しないときは _ ははずすこと
Res$ = "分岐対象外" 'これが結果に表示されたら分岐の定義ミス
Select Case .Cells(RR&, 13).Value & .Cells(RR&, 14).Value
Case "A1":
Select Case .Cells(RR&, 11).Value
Case 1
Select Case .Cells(RR&, 18).Value
Case 0: Res$ = "不具合A" 'エラー内容
Case 1: Res$ = "" '何も表示しない
Case Else: Res$ = "1A1_定義漏れ" 'エラー内容
End Select
Case 2
Select Case .Cells(RR&, 18).Value
Case 0: Res$ = "不具合B" 'エラー内容
Case 1: Res$ = "" '何も表示しない
Case Else: Res$ = "2A1_定義漏れ" 'エラー内容
End Select
Case Else
'.Cells(RR&, 11).Value = 1 または .Cells(RR&, 11).Value = 2 を満たさなかった
Res$ = "?A1_定義漏れ" 'エラー内容
End Select
Case Else
'.Cells(RR&, 13).Value = "A" かつ .Cells(RR&, 14).Value = 1を満たさなかった
Res$ = "???_定義漏れ" 'エラー内容
End Select
End If
'エラー内容が入っていたら
If Res$ <> "" Then
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 If
End With
Next
End If
End Sub
'↑ここまで============================================================
|
|