Excelで読み込んだデータをCSV出力しています。
その際に重複の場合に、最初の行を書出しほかの重複行は飛ばして書き出したいです。
その重複行はExcel上で行の削除したくありません。(次の処理で別CSVも作成しているため)
削除しか方法ないということであれば、書き出したCSVの重複行の削除の仕方はございますでしょうか?
ご教示お願いします。
↓14行目と15行目が重複しているので14行目だけを書込み、16行目以降もをかきだしていきたいです。
VBA
1Private Sub CSV_Click() 2 Dim i As Long 3 Dim c As Long 4 Dim j As Long 5 Dim r As Long 6 Dim re As Long 7 Dim cnt As Long 8 Dim csvFile1 As String 9 Dim csvFile2 As String 10 Dim FoundCell As Range 11 12 r = Me.Range("C13").CurrentRegion(Me.Range("C13").CurrentRegion.Count).Row 13 c = Me.Range("C13").CurrentRegion(Me.Range("C13").CurrentRegion.Count).Column 14 15 If Me.Cells(8, 3).Value Like "*+*" Then 16 csvFile1 = ActiveWorkbook.Path & "\" & "職員マスタ 1_" & Format(Now, "yyyymmdd_hhmmss") & ".csv" 17 Open csvFile1 For Output As #1 18 19 For i = 14 To r 20 cnt = cnt + 1 21 If cnt <= 1000 Then 22 For j = 3 To 12 23 If j <> 12 Then 24 Write #1, Me.Cells(i, j).Value; 25 Else 26 Write #1, Me.Cells(i, j).Value 27 End If 28 Next j 29 Else 30 Close #1 31 csvFile2 = ActiveWorkbook.Path & "\" & "職員マスタ 2_" & Format(Now, "yyyymmdd_hhmmss") & ".csv" 32 Open csvFile2 For Output As #2 33 Exit For 34 End If 35 Next i 36 37 If cnt > 1000 Then 38 For i = i To r 39 For j = 3 To 12 40 If j <> 12 Then 41 Write #2, Me.Cells(i, j).Value; 42 Else 43 Write #2, Me.Cells(i, j).Value 44 End If 45 Next j 46 Next i 47 End If 48 MsgBox Me.Cells(8, 3) & ".csv" & "を作成しました。" 49
下記のようにも書いてみたんですが、これだと重複行全部書き込まれません。。。
VBA
1 If Me.Cells(8, 3).Value Like "*+*" Then 2 csvFile1 = ActiveWorkbook.Path & "\" & "職員マスタ 1_" & Format(Now, "yyyymmdd_hhmmss") & ".csv" 3 Open csvFile1 For Output As #1 4 For Each rng In Range("C14:C" & r) 5 6 CellCount = WorksheetFunction.CountIf( _ 7 Range("C14", Cells(r, 3)), rng) 8 If CellCount = 0 Then 9 For i = 14 To r 10 cnt = cnt + 1 11 If cnt <= 1000 Then 12 For j = 3 To 12 13 If j <> 12 Then 14 Write #1, Me.Cells(i, j).Value; 15 Else 16 Write #1, Me.Cells(i, j).Value 17 End If 18 Next j 19 Else 20 Close #1 21 csvFile2 = ActiveWorkbook.Path & "\" & "職員マスタ 2_" & Format(Now, "yyyymmdd_hhmmss") & ".csv" 22 Open csvFile2 For Output As #2 23 Exit For 24 End If 25 Next i 26 End If 27 Next rng 28
画像の表を読み込んでCSVファイルを出力する
・1行ずつ見た時に「職員コード」に重複がある場合は
上の行の方のみをcvsファイルに出力したい
という事をやりたいという質問であってますか?
はい。その通りです。
提示されたソース(上のほう)をみると、
1.12列(L列)まで、書いた後、改行をしていない。
2.CSV出力なら、各データををカンマ(,)で区切って出力すべきだが、カンマで区切って出力していない。
ように見えます。
本当に、このソースで、実行されたのでしょうか。
職員コードの重複以前に上記の修正が先決かと。
それはやってます。Writeで12列目?に行ったときには改行してます。
Write #1, Me.Cells(i, j).Value;
最後の;を見落としていました。失礼しました。
いえいえ、いつもありがとうございます。
回答4件
あなたの回答
tips
プレビュー