Aのファイル(ThisWorkbook)のデータと複数のファイルのデータを全て照合するコードを書きたいと思っています。
配列Sheet(1~179)に複数のファイルのパスが入っています。
AファイルにはG列にデータが入っています
######Aファイル
行番号|F |G |H|
|:--|:--:|--:|
1||初期||
2||テスト||
3||アクション||
4||イベント||
5||デバッグ||
配列に入っている複数のファイルのデータはCC列に入っているが、データ数がバラバラ
Bファイル CC1CC6CC8 など
Cファイル CC1
######Bファイル
行番号|CB |CC | CD |
|:--|:--:|--:|
1||イベント||
2||検索||
3||デバッグ|
4||PHP||
5||AWS|
6||初期||
######Cファイル
行番号|CB |CC | CD |
|:--|:--:|--:|
1||C#||
2||テスト||
3||Ruby|
4||Java||
5||C||
6||エラー||
7||Python||
8||module||
実装したいことは、以下の2つです
##処理A
もしAファイルのG列のデータが「初期」で、配列に入っているどれかのファイルのデータに初期という文字が1つでもあれば、真横のH列に「一致」という文字を入力。無ければ「一致なし」を入力。
(例)AファイルのG1が初期であり、Sheet(1)に入っているBファイルのCC6に初期という文字があれば、AファイルのH2に一致を入力。全ファイルと比較し、無ければ不一致を入力
######Aファイル
行番号|F |G |H|
|:--|:--:|--:|
1||初期|一致|
2||テスト||
3||アクション||
4||イベント||
5||デバッグ||
##処理B
AファイルのG列のデータが「初期」以外である場合は、配列に入っているどれかのファイルのデータに、Aファイルと同じデータが1つでもあれば、「一致」という文字を入力。無ければ「不一致」を入力。
(例)AファイルのG2がテストであり、Sheet(2)に入っているCファイルのCC2にテストという文字があれば、AファイルのH3に一致を入力。全ファイルと比較し、無ければ不一致を入力
######Aファイル
行番号|F|G|H|
|:--|:--:|--:|
1||初期|一致|
2||テスト|一致|
3||API|不一致|
4||LINE|不一致|
5||デバッグ|一致|
現在は、処理Bは実装できたのですが、処理Aの実装ができません。
初期という文字に一致しなかった場合に[一致なし]と入力させたいので、プロシージャにif文を2つ書き、初期という文字の場合の関数(コードに書いてある関数とほとんど同じなので略)を作ってみたのですが、最後は Else this.Cells(e, 8).Value = "不一致"に上書きされてしまい、[不一致]となってしまいます。
一致、不一致、一致なしの記述をできるようにしたいと思っています。
ご教授お願いします。
コード
グローバル関数 Dim Sheet(200) As String Dim Sheet_path(200) Dim b As Long Dim c As Long Dim kekka Dim neko Dim a As Long sub call Call FileSearch("C:\Users\katou-ken\Documents\Document\25_設計書") End sub 'SheetとSheet_pathに比較ファイルのデータとパスを入れる Sub FileSearch(path As String) Dim FSO As Object, Folder As Variant, File As Variant, buf As String, this As Worksheet Set FSO = CreateObject("Scripting.FileSystemObject") Set this = ThisWorkbook.Worksheets("イベント") buf = Dir(path & "*サンプル.xls*") Do While buf <> "" Sheet(b) = buf Sheet_path(b) = path b = b + 1 buf = Dir() If b > 178 Then Call hikaku End If Loop For Each Folder In FSO.GetFolder(path).SubFolders Call FileSearch(Folder.path) Next Folder End Sub Sub hikaku() Set this = ThisWorkbook.Worksheets("イベント") 'MsgBox Sheet_path(4) a = 1 e = 2 c = 1 d = 1 this_line = this.Cells(Rows.Count, 7).End(xlUp).Row 'AファイルG列の最終行の行番号 Do While this_line > a 'AファイルのG列の末端までループ target = this.Cells(e, 7).Value 'AファイルG列の文字を取得 Do While UBound(Sheet) > d '配列の要素数分だけ取得 filename = Sheet(c) '現在考え中の処理2と処理1 If target Like "初期" Then Call IsContained(target, filename) If kekka = True Then this.Cells(e, 8).Value = "一致" Else this.Cells(e, 8).Value = "一致なし" End If Else End If If Not target Like "初期" Then Call shori(target, filename) If neko = True Then this.Cells(e, 8).Value = "一致" Else this.Cells(e, 8).Value = "不一致" End If Else End If d = d + 1 c = c + 1 Loop d = 1 c = 2 e = e + 1 a = a + 1 Loop End Sub Function IsContained(target, filename) As Boolean path = Sheet_path(c) Set open_file = Workbooks.Open(filename:=path & "\" & filename, UpdateLinks:=False) this_line = Workbooks(filename).Worksheets("説明").Cells(Rows.Count, 81).End(xlUp).Row i = 1 j = 10 Application.ScreenUpdating = False Do While this_line / 2 > i '最終行までループ ThisWorkbook.Activate If Workbooks(filename).Worksheets("説明").Cells(j, 81).Value Like target Then '比較ファイルにAファイルと同じデータが存在するなら kekka = True Exit Do Else i = i + 1 j = j + 2 End If kekka = False Loop Workbooks(filename).Close Application.ScreenUpdating = True End Function Function shori(target, filename) As Boolean path = Sheet_path(c) Set open_file = Workbooks.Open(filename:=path & "\" & filename, UpdateLinks:=False) this_line = Workbooks(filename).Worksheets("説明").Cells(Rows.Count, 81).End(xlUp).Row i = 1 j = 10 Application.ScreenUpdating = False Do While this_line / 2 > i 'filename???I?s-9 =i ??(?w?????t?@?C????S?s?????????????[?v) 'Set open_file = Workbooks.Open(filename:=path & "\" & filename, UpdateLinks:=False) ThisWorkbook.Activate If Workbooks(filename).Worksheets("説明").Cells(j, 81).Value Like target Then ' neko = True Exit Do Else i = i + 1 j = j + 2 End If neko = False Loop Workbooks(filename).Close Application.ScreenUpdating = True End Function
回答4件
あなたの回答
tips
プレビュー