teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

画像追加

2021/08/09 06:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,8 @@
1
+ ![イメージ説明](5c13006206672273cb87d35e9fe65edc.jpeg)
2
+ Sheet1イメージ↑
3
+ ![イメージ説明](da4ee38bcaf3a81e379445992d6db065.jpeg)
4
+ Sheet2イメージ↑
5
+
1
6
  Sheet1にある各文字列を基準にしてSheet2にある各文字列と比べます。
2
7
  そしてどれぐらい違っているか比率をパーセンテージでSheet2のA列のセルにそれぞれ出していきます。
3
8
  Sheet1の比較対象100個以上に対し、Sheet2には3000個以上文字列データがあり、

2

修正

2021/08/09 06:13

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  どなたかお力を貸していただければ幸いです。よろしくお願いします。
9
9
 
10
-
10
+ ```ここに言語を入力
11
11
  1.Sub 比較テスト()
12
12
 
13
13
  2.Dim i As Long, k As Double, n As Long
@@ -28,10 +28,10 @@
28
28
  14.Finalrow = Sheets(S2).Cells(Rows.Count, 2).End(xlUp).Row 'Sheet1データ最終セル
29
29
 
30
30
  15.Sheets(S1).Activate
31
- 16.Set Table1 = Worksheets(S1).Range(Cells(2, 1), Cells(Endrow, 1)) 'Sheet1のデータ範囲を配列化
31
+ 16.Table1 = Worksheets(S1).Range(Cells(2, 1), Cells(Endrow, 1)) 'Sheet1のデータ範囲を配列化
32
32
 
33
33
  17.Sheets(S2).Activate
34
- 18.Set Table2 = Worksheets(S2).Range(Cells(3, 2), Cells(Finalrow, 3)) 'Sheet2のデータを配列化
34
+ 18.Table2 = Worksheets(S2).Range(Cells(3, 2), Cells(Finalrow, 3)) 'Sheet2のデータを配列化
35
35
 
36
36
  19.For i = 2 To Endrow Step 1 'Sheet1のデータ最終行まで
37
37
  20.For k = 3 To Finalrow Step 1 'Sheet1とSheet2のデータがまったく同じかを確認
@@ -73,4 +73,5 @@
73
73
  51.Sheets(S2).Activate
74
74
  52.Sheets(S2).Range(Cells(3, 1), Cells(Finalrow, 3)) = Table2
75
75
 
76
- 53.End Sub
76
+ 53.End Sub
77
+ ```

1

コードミス修正

2021/08/08 11:42

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -25,54 +25,52 @@
25
25
  11.S2.Activate
26
26
  12.Columns(1).Insert Shift:=xlShiftToRight
27
27
  13.Columns(1).Style = "Percent"
28
+ 14.Finalrow = Sheets(S2).Cells(Rows.Count, 2).End(xlUp).Row 'Sheet1データ最終セル
28
29
 
29
- 14.Sheets(S2).Activate
30
+ 15.Sheets(S1).Activate
30
- 15.Finalrow = Sheets(S2).Cells(Rows.Count, 2).End(xlUp).Row 'Sheet1データ最終セル
31
+ 16.Set Table1 = Worksheets(S1).Range(Cells(2, 1), Cells(Endrow, 1)) 'Sheet1データ範囲を配列化
31
32
 
32
- 16.Sheets(S1).Activate
33
+ 17.Sheets(S2).Activate
33
- 17.Set Table1 = Worksheets(S1).Range(Cells(2, 1), Cells(Endrow, 1)) 'Sheet1のデータ範囲を配列化
34
+ 18.Set Table2 = Worksheets(S2).Range(Cells(3, 2), Cells(Finalrow, 3)) 'Sheet2のデータを配列化
34
35
 
36
+ 19.For i = 2 To Endrow Step 1 'Sheet1のデータ最終行まで
37
+ 20.For k = 3 To Finalrow Step 1 'Sheet1とSheet2のデータがまったく同じかを確認
35
- 18.Sheets(S2).Activate
38
+ 21.Sheets(S2).Activate
39
+ 22.If Table2(k, 2).Value = "" Then
40
+ 23.Table2(k, 2).Select
36
- 19.Set Table2 = Worksheets(S2).Range(Cells(3, 2), Cells(Finalrow, 3)) 'Sheet2のデータを配列化
41
+ 24.ElseIf Len(Table2(k, 2).Value) > Len(Table1(i, 1).Value) Then
42
+ 25.Sheets(S2).Activate
43
+ 26.Table2(k, 2).Select
44
+ 27.ElseIf InStr(Table1(i, 1), Table2(k, 2)) > 0 Then
45
+ 28.Table2(k, 1) = 1
37
46
 
47
+ 29.Else 'Sheet1とSheet2のデータデータがまったく同じでなければ、一文字ごとに確認して比率を出す
38
- 20.For i = 2 To Endrow Step 1 'Sheet1のデータ最終行まで
48
+ 30.For n = 1 To Len(Table1(i, 1)) Step 1
39
- 21.For k = 3 To Finalrow Step 1 'Sheet1とSheet2のデータがまったく同じかを確認
40
- 22.Sheets(S2).Activate
41
- 23.If Table2(k, 2).Value = "" Then
42
- 24.Table2(k, 2).Select
49
+ 31.str = Mid(Table1(i, 1), n, 1)
43
- 25.ElseIf Len(Table2(k, 2).Value) > Len(Table1(i, 1).Value) Then
44
- 26.Sheets(S2).Activate
45
- 27.Table2(k, 2).Select
46
- 28.ElseIf InStr(Table1(i, 1), Table2(k, 2)) > 0 Then
50
+ 32.If InStr(Table2(k, 2), str) > 0 Then
51
+ 33.cnt = cnt + 1 '一致した文字をカウントする
52
+ 34.End If
47
- 29.Table2(k, 1) = 1
53
+ 35.Next n
48
54
 
49
- 30.Else 'Sheet1とSheet2のデータデータがまったく同じでなければ、一文字ごとに確認して比率を出す
50
- 31.For n = 1 To Len(Table1(i, 1)) Step 1
55
+ 36.Table2(k, 1) = cnt / Len(Table1(i, 1))
51
- 32.str = Mid(Table1(i, 1), n, 1)
52
- 33.If InStr(Table2(k, 2), str) > 0 Then
53
- 34.cnt = cnt + 1 '一致した文字をカウントする
56
+ 37.cnt = 0
54
- 35.End If
57
+ 38.End If
55
- 36.Next n
56
58
 
59
+ 39.Sheets(To_Sheet).Range(Table2(3, 1), Table2(Finalrow, 7)).Sort Columns(1), xlDescending
60
+ 40.If Table2(k, 1).End(xlDown).Row >= 0.7 Then
57
- 37.Table2(k, 1) = cnt / Len(Table1(i, 1))
61
+ 41.Table1(i, 2).Value = Table2(k, 3).Value
58
- 38.cnt = 0
59
- 39.End If
60
62
 
61
- 40.Sheets(To_Sheet).Range(Table2(3, 1), Table2(Finalrow, 7)).Sort Columns(1), xlDescending
63
+ 42.Else
62
- 41.If Table2(k, 1).End(xlDown).Row >= 0.7 Then
64
+ 43.Sheets(S2).Activate
63
- 42.Table1(i, 2).Value = Table2(k, 3).Value
65
+ 44.Table2(k, 1).Select
66
+ 45.End If
67
+ 46.Next k
68
+ 47.Next i
64
69
 
65
- 43.Else
70
+ 48.'配列化したデータをシートに戻す
66
- 44.Sheets(S2).Activate
71
+ 49.Sheets(S1).Activate
72
+ 50.Sheets(S1).Range(Cells(2, 1), Cells(Endrow, 2)) = Table1
67
- 45.Table2(k, 1).Select
73
+ 51.Sheets(S2).Activate
68
- 46.End If
69
- 47.Next k
70
- 48.Next i
74
+ 52.Sheets(S2).Range(Cells(3, 1), Cells(Finalrow, 3)) = Table2
71
75
 
72
- 49.'配列化したデータをシートに戻す
73
- 50.Sheets(S1).Activate
74
- 51.Sheets(S1).Range(Cells(2, 1), Cells(Endrow, 2)) = Table1
75
- 52.Sheets(S2).Activate
76
- 53.Sheets(S2).Range(Cells(3, 1), Cells(Finalrow, 3)) = Table2
77
-
78
- 54.End Sub
76
+ 53.End Sub