- ベストアンサー
同じ数字を2個使用している重複行の数字の出力方法2
- 重複した数字の行を出力する方法についての質問です。
- 重複した数字の削除方法についての質問です。
- 重複した数字の並び替え方法についての質問です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Option Explicit Option Base 1 ' Sub Macro1() Dim Cell As Range Dim Points(2 To 21, 31) As Integer Dim Row1 As Integer Dim Row2 As Integer Dim Col1 As Integer Dim Col2 As Integer Dim RowO As Integer Dim Index As Integer Dim Count As Integer Dim Col1S(5) As Integer Dim Col2S(5) As Integer ' [B:F].Interior.Pattern = xlNone [G2:AE32767].ClearContents ' For Each Cell In [B2:F21] Points(Cell.Row, Cell) = Cell.Column Next Cell ' For Row1 = 2 To 21 ' For Row2 = Row1 To 21 Count = 0 ' For Index = 1 To 31 Col1 = Points(Row1, Index) Col2 = Points(Row2, Index) ' If Col1 > 0 And Col2 > 0 Then Count = Count + 1 Col1S(Count) = Col1 Col2S(Count) = Col2 End If Next Index ' If Count = 2 Then ColorPoint Row1, Row2, Col1S(1), Col1S(2) ColorPoint Row2, Row1, Col2S(1), Col2S(2) RowO = RowO + 1 Col1 = Col1S(1) Col2 = Col1S(2) Col1 = Cells(Row1, Col1) Col2 = Cells(Row1, Col2) Cells(RowO, "AB") = Col1 Cells(RowO, "AC") = Col2 Cells(Col1, "AE") = Col1 Cells(Col2, "AE") = Col2 End If Next Row2, Row1 Range("AB1:AC" & RowO).Sort KEY1:=[AB1] [AE1:AE31].Sort KEY1:=[AE1] End Sub ' Sub ColorPoint(RowA As Integer, RowB As Integer, ColA As Integer, ColB As Integer) Dim BData As String Dim ColO As Integer ' BData = Cells(RowA, "G") ColO = BData <> "" Cells(RowA, "G") = "'" & BData & Left(",", -ColO) & RowB - 1 Cells(RowA, ColA).Interior.Color = vbYellow Cells(RowA, ColB).Interior.Color = vbYellow ColO = Cells(RowA, "AA").End(xlToLeft).Column Cells(RowA, ColO + 1) = Cells(RowA, ColA) Cells(RowA, ColO + 2) = Cells(RowA, ColB) End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
下記やってみたが、ピント外れならすみません.無視してください。 === ・データ例は質問の画像と同じデータでテスト。 Sheet1の A2:E21(A1からでない。特に意味なし)) ・標準モジュールに Sub test02() Set sh1 = Worksheets("Sheet3") ’インプットデータ Set sh2 = Worksheets("Sheet4") ’アウトプット '-- k = 1 For i = 2 To 21 '---- For c1 = 1 To 5 For c2 = 1 To 5 If c1 < c2 Then sh2.Cells(k, 1) = "'" & Format(sh1.Cells(i, c1), "00") & "-" & Format(sh1.Cells(i, c2), "00") sh2.Cells(k, 2) = "'" & (i - 1) k = k + 1 End If Next c2 Next c1 '--- Next i End Sub ーーー 結果 略 自分の実行結果を見てください。 ーーー ・Sheet4のA列(第Iキー)-B列(第2キー)でソート (VBAでもできるが今回は手動の、データー並べ替えで処理) Sheet4の上5行例示します。 参考 A列 B列 01-02 2 01-02 19 01-03 2 01-03 14 01-05 14 以下略 ちなみに、例えば、1を01などと表現しているのは、後のソートのことを 考えてです。 ーー 重複分を抜出し。直前行と同じなら抜出ししている。 Sub test03() Set sh1 = Worksheets("Sheet4") 'ソート後 Set sh2 = Worksheets("Sheet5") ’結果 k = 1 lr = sh1.Range("A100000").End(xlUp).Row MsgBox lr mae = sh1.Cells(1, "A") For i = 2 To lr If sh1.Cells(i, "A") = mae Then sh2.Cells(k, "A") = sh1.Cells(i, "A") sh2.Cells(k, "B") = sh1.Cells(i - 1, "B") sh2.Cells(k, "C") = sh1.Cells(i, "B") k = k + 1 Else End If mae = sh1.Cells(i, "A") Next i End Sub ーー 結果 Sheet5 A列 B列 C列 数字の組 下記行と行に出現 01-02 2 19 01-03 2 14 01-15 9 19 01-17 2 19 02-17 2 19 03-11 11 14 03-12 2 20 03-21 11 20 05-10 12 14 06-09 8 15 06-22 1 15 06-30 1 15 07-16 16 20 08-12 7 13 09-17 8 19 09-20 3 15 11-29 4 6 11-30 6 11 12-16 7 20 16-18 5 16 17-18 8 16 19-27 9 18 20-22 10 15 22-29 6 10 22-30 1 6 22-30 6 15 25-26 4 17 26-27 4 18 ーー これをSheet3の、原データにどう纏める(関連付けて表現する)のか 質問では、小生は分らなかったから、ここまでにした。 ーーー 元データのあり様がら、どういう思考過程(処理ロジック)で 本件を考えた結果で、少数例示をして、そして結果がこうなるという 読者向け、説明が必要だろうと思う。 ーーー 質問には、画像データでなく 4.6.15.22.30 1.2.3.12.17 8.9.13.20.21 11.25.26.27.29 16.18.19.28.31 11.22.23.29.30 4.8.12.16.25 6.9.17.18.26 1.13.15.19.27 2.20.22.28.29 3.11.21.30.31 5.7.10.14.24 5.8.12.15.29 1.3.5.10.11 6.9.20.22.30 7.13.16.17.18 2.21.24.25.26 10.19.23.26.27 1.2.9.15.17 3.7.12.16.21 のようなデータを質問文に載せてくれれば、 読者は、自分のシートにコピペして、 データー区切り位置でシートのデータが早く作れる。 画像を見て自分のシートにデータを作るのは、手間がかかると思いませんか。 ーー これは一体、何のデータですか。 丸投げ的に質問しているが、ただ回答者は やらされ感が強い。パズルか?ROT? 前質問から少しずつ、結果内容をずらして、何度も質問しているが またか感が強い。 ーー まず質問者は、処理ロジックを考えるのが、肝心と思う。 (本件は組み合わせとソート法ですが。あまり良いとは思ってない。 3組の文字になったら複雑になってお手上げ。) そういう話は一切出てないが、まず数学関連のカテゴリに 質問して、良いアイデアと方法を教えてもらったら。 エクセルやプログラムはそのあとのことだ。
お礼
回答頂きありがとうございました。
お礼
大変助かりました。 ありがとうございました。