|
こんにちは。
下記のシートがあります
A B C D E F G H I J K L M
1 # Date METHOD PROD PROF Case DTL Byr Name ADDR INQ ANS OPN
===|====|======|====|====|====|===|====|====|====|===|===|====
2 111 0301 PHONE CD S HARD A Cons John TYO xxx aaa NONE
3 111 0301 PHONE CD S SOFT B Cons John TYO yyy bbb NONE
4 112 0301 PHONE DVD M HARD A WS Tom OSA zzz ccc NONE
やりたいことは、、
まずNレコード目とN+1レコード目の#を比べ同じかをみます。(上記では#111が2個あります。)
同じだったらCase列の値を同一セルに格納します。(#111の場合、"F2"を「HARD vbLf SOFT」にします)
また、DTL列の値を同一セルに格納します。(#111の場合、"G2"を「A vbLf B」にします)
そして(この場合、)3行目をDELETEします。
なお、同じ#は2個とは限りませんが#昇順になっています。
以下わたしなりにかんがえました。
(1)最下端の行数を得る。
(2)カレントリージョンを選択する。(必要ない?)
(3)アクティブセルの値が、そのアクティブセル直下のセルの値と同じなら、WrkCountに蓄える。
(4)同じ#は2個とは限らないので改行マークをはさんでwrkRangeに追加します(が、これでは前に書いたものを上書きしてしまいますよね)
ここまででGIVEUPです。この先どうすればいいかどなたかアドバイスくださいませんか。
Public Sub test()
Dim i As Long
Dim n As Long
Dim WrkRow As Long
Dim WrkRange As Range
Dim WrkCount As Long
With Sheets("Sheet1")
WrkRow = .Cells(Rows.Count, 1).End(xlUp).Row '・・・(1)
End With
Range("A1").CurrentRegion.Select '・・・(2)
n = 1
For i = 2 To WrkRow
If Value.ActiveCell(1, i) = Value.ActiveCell(1, i + 1) Then '・・・(3)
n = n + 1
WrkCount = n
Else
For n = WrkCount To 0
Value.WrkRange = Chr(10) & Value.WrkRange(6, n) '・・・(4)
Next n
n = 1
End If
Next i
End Sub
|
|