Sheet1にある各文字列を基準にしてSheet2にある各文字列と比べます。
そしてどれぐらい違っているか比率をパーセンテージでSheet2のA列のセルにそれぞれ出していきます。
Sheet1の比較対象100個以上に対し、Sheet2には3000個以上文字列データがあり、
セル処理だと時間がかかるので、配列処理にしたいのですが、変数にうまく値が入りません。
例:23行目の「If Table2(k, 2).Value = "" Then」の条件で、文字列が入っているセルでも空欄と認識されてしまい、思い通りの処理になりません。
どなたかお力を貸していただければ幸いです。よろしくお願いします。
1.Sub 比較テスト() 2.Dim i As Long, k As Double, n As Long 3.Dim Table1 As Variant, Table2 As Variant 4.Dim cnt As Integer, str As String 5.Dim Endrow As Integer, Finalrow As Integer 6.Dim S1 As String, S2 As String 7.S1 = "Sheet1" 8.S2 = "Sheet2" 9.Sheets(S1).Activate 10.Endrow = Sheets(S1).Cells(Rows.Count, 1).End(xlUp).Row '翻訳する和文の最終セル 11.S2.Activate 12.Columns(1).Insert Shift:=xlShiftToRight 13.Columns(1).Style = "Percent" 14.Finalrow = Sheets(S2).Cells(Rows.Count, 2).End(xlUp).Row 'Sheet1データ最終セル 15.Sheets(S1).Activate 16.Table1 = Worksheets(S1).Range(Cells(2, 1), Cells(Endrow, 1)) 'Sheet1のデータ範囲を配列化 17.Sheets(S2).Activate 18.Table2 = Worksheets(S2).Range(Cells(3, 2), Cells(Finalrow, 3)) 'Sheet2のデータを配列化 19.For i = 2 To Endrow Step 1 'Sheet1のデータ最終行まで 20.For k = 3 To Finalrow Step 1 'Sheet1とSheet2のデータがまったく同じかを確認 21.Sheets(S2).Activate 22.If Table2(k, 2).Value = "" Then 23.Table2(k, 2).Select 24.ElseIf Len(Table2(k, 2).Value) > Len(Table1(i, 1).Value) Then 25.Sheets(S2).Activate 26.Table2(k, 2).Select 27.ElseIf InStr(Table1(i, 1), Table2(k, 2)) > 0 Then 28.Table2(k, 1) = 1 29.Else 'Sheet1とSheet2のデータデータがまったく同じでなければ、一文字ごとに確認して比率を出す 30.For n = 1 To Len(Table1(i, 1)) Step 1 31.str = Mid(Table1(i, 1), n, 1) 32.If InStr(Table2(k, 2), str) > 0 Then 33.cnt = cnt + 1 '一致した文字をカウントする 34.End If 35.Next n 36.Table2(k, 1) = cnt / Len(Table1(i, 1)) 37.cnt = 0 38.End If 39.Sheets(To_Sheet).Range(Table2(3, 1), Table2(Finalrow, 7)).Sort Columns(1), xlDescending 40.If Table2(k, 1).End(xlDown).Row >= 0.7 Then 41.Table1(i, 2).Value = Table2(k, 3).Value 42.Else 43.Sheets(S2).Activate 44.Table2(k, 1).Select 45.End If 46.Next k 47.Next i 48.'配列化したデータをシートに戻す 49.Sheets(S1).Activate 50.Sheets(S1).Range(Cells(2, 1), Cells(Endrow, 2)) = Table1 51.Sheets(S2).Activate 52.Sheets(S2).Range(Cells(3, 1), Cells(Finalrow, 3)) = Table2 53.End Sub
このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
貼り直しました。よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー