Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6853 / 13646 ツリー ←次へ | 前へ→

【42748】重複値を、別ブックに書き出したい Palmer 06/9/20(水) 14:49 質問[未読]
【42751】Re:重複値を、別ブックに書き出したい ハチ 06/9/20(水) 16:05 発言[未読]
【42753】Re:重複値を、別ブックに書き出したい Palmer 06/9/20(水) 17:15 お礼[未読]
【42752】Re:重複値を、別ブックに書き出したい Kein 06/9/20(水) 17:06 回答[未読]
【42755】Re:重複値を、別ブックに書き出したい Palmer 06/9/20(水) 17:17 お礼[未読]

【42748】重複値を、別ブックに書き出したい
質問  Palmer  - 06/9/20(水) 14:49 -

引用なし
パスワード
   Windows2000、Excel2000でVBAで重複データチェックを行いたいと考えています。

csvファイル(例.abc.csv、シート名:abc)の
1行目(R1C1〜R1Cn)に項目があり、重複したデータの値、列番号を
別の新しいブック(例.abc_重複項目.xls、シート名:abc_重複項目)に
出力したいと考えています。

エディットボックス1つとボタン2つ(参照、実行)を用い、
「参照」ボタンの処理で、
1.ファイルダイアログを表示し、csvファイルを選択
2.エディットボックスにフルパスを、表示させる
「実行」ボタンの処理で、
3.1.のファイルの重複項目データを抽出する
4.新しいブックに結果ログを書き込む

1.2.は出来ているのですが、3.4.の段階で
Workbooks.OpenやOffsetメソッド、Dir関数、
ExecuteExcel4Macroなど調べながら、詰まってしまった状態です。
いい方法や、検索すべき方法があればご教授いただけないでしょうか。

[イメージ]
aaa.csv
aaa,bbb,bbb,ccc,ddd,aaa,eee,fff,bbb...

aaa_重複項目.xls
重複項目 列番号
aaa    1
aaa    6
bbb    2
bbb    3
bbb    9

【42751】Re:重複値を、別ブックに書き出したい
発言  ハチ  - 06/9/20(水) 16:05 -

引用なし
パスワード
   ▼Palmer さん:

>1.2.は出来ているのですが、3.4.の段階で
>Workbooks.OpenやOffsetメソッド、Dir関数、
>ExecuteExcel4Macroなど調べながら、詰まってしまった状態です。
>いい方法や、検索すべき方法があればご教授いただけないでしょうか。

「重複をどうやって調べるか」 が判らないところですか?
別の重複項目.xlsに出力するとなると、
保存するPathなど確認が必要ですのでとりあえず、このマクロがあるBookに。
出力される情報は、提示されているものと違いますので
考え方の参考になればと思います。

Option Explicit

Sub Test()
  Dim myFile As String, myPath As String
  Dim buf As String
  Dim Ws As Worksheet
  Dim i As Long
  myFile = "Test.csv"
  myPath = ThisWorkbook.Path
  Set Ws = ThisWorkbook.Worksheets(1)
  Ws.Cells.ClearContents
  Ws.Range("A1:C1").Value = Array("項目", "列番号1", "列番号2")
  i = 0
  Open myPath & "\" & myFile For Input As #1
    Do Until EOF(1)
      Input #1, buf
      i = i + 1
      Call Find_Test(Ws, buf, i)
    Loop
  Close #1
  Ws.Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Delete xlUp
  Set Ws = Nothing

End Sub

Sub Find_Test(Ws As Worksheet, ByVal buf As String, ByVal i As Long)
  Dim Fi As Variant

  Set Fi = Ws.Range("A:A").Find(buf, , xlValues, xlWhole)
  If Not Fi Is Nothing Then
    Fi.End(xlToRight).Offset(, 1).Value = i
  Else
    Ws.Range("A65536").End(xlUp).Offset(1).Resize(, 2).Value = Array(buf, i)
  End If
  Set Fi = Nothing
End Sub

【42752】Re:重複値を、別ブックに書き出したい
回答  Kein  - 06/9/20(水) 17:06 -

引用なし
パスワード
   ユーザーフォームを使わないコードです。このまま試してみて下さい。

Sub Fields_Check()
  Dim MyF As String, TbN As String
  Dim NewB As String, Buf As String
  Dim Ary As Variant
  Dim WB As Workbook
  Dim MyR As Range
 
  MyF = Application _
  .GetOpenFilename("CSVファイル(*.csv),*.csv")
  If MyF = "False" Then Exit Sub
  TbN = Left$(Dir(MyF), Len(Dir(MyF)) - 4)
  NewB = CurDir() & "\" & TbN & _
  Format(Date, "yymmdd") & ".xls"
  If Dir(NewB) <> "" Then
   MsgBox "本日のファイルは作成済みです", 48: Exit Sub
  End If
  Open MyF For Input Access Read As #1
  Line Input #1, Buf
  Close #1: Ary = Split(Buf, ",")
  Application.ScreenUpdating = False
  Set WB = Workbooks.Add(xlWBATWorksheet)
  With WB.Worksheets(1)
   .Range("A1:B1").Value = Array("重複項目", "列番号")
   Set MyR = .Range("A2").Resize(UBound(Ary) + 1)
   MyR.Value = WorksheetFunction.Transpose(Ary)
   With .Range("B2")
     .Value = 1: .AutoFill MyR.Offset(, 1), xlLinearTrend
   End With
   On Error Resume Next
   With MyR.Offset(, 255)
     .Formula = "=IF(COUNTIF($A:$A,$A2)=1,1)"
     .SpecialCells(3, 1).EntireRow.Delete xlShiftUp
     .ClearContents
   End With
   On Error GoTo 0
   .Range("A1").CurrentRegion.Sort Key1:=.Range("A1"), _
   Order1:=xlAscending, Key2:=.Range("B1"), Order2:= _
   xlAscending, Header:=xlYes, Orientation:=xlSortColumns
   .Name = TbN
  End With
  WB.SaveAs NewB: Set WB = Nothing: Set MyR = Nothing
  Application.ScreenUpdating = True
End Sub

【42753】Re:重複値を、別ブックに書き出したい
お礼  Palmer  - 06/9/20(水) 17:15 -

引用なし
パスワード
   ▼ハチ さん:
>「重複をどうやって調べるか」 が判らないところですか?
>別の重複項目.xlsに出力するとなると、
>保存するPathなど確認が必要ですのでとりあえず、このマクロがあるBookに。
>出力される情報は、提示されているものと違いますので
>考え方の参考になればと思います。

ありがとうございます。
ArrayやEnd(xlToLeft)などを調べて、
多くのことを理解できました。
書籍を買って、勉強してみたいと思います。

【42755】Re:重複値を、別ブックに書き出したい
お礼  Palmer  - 06/9/20(水) 17:17 -

引用なし
パスワード
   ▼Kein さん:
>ユーザーフォームを使わないコードです。このまま試してみて下さい。

ありがとうございます。
望んだ通りの動きをしてくれました。
知らない箇所を検索等で調べて、
自分の力にしたいと思います。
本当にありがとうございました。

6853 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free