fork download
  1. Option Explicit
  2.  
  3. Public Sub CSV作成()
  4. Dim MFile As String '商品.csv
  5. Dim SFile As String '1.csv
  6. Dim mb As Workbook '商品.csvのbook
  7. Dim ms As Worksheet '商品.csvのSheet
  8. Dim sb As Workbook '1.csvのbook
  9. Dim ss As Worksheet '1.csvのSheet
  10. Dim tb As Workbook '有り.csvのbook
  11. Dim ts As Worksheet '有り.csvのSheet
  12. Dim mrow As Long '商品.csv 行番号
  13. Dim srow As Long '1.csv 行番号
  14. Dim trow As Long: trow = 2 '有り.csv 行番号
  15. Dim dicM As Object '商品.csv キー:商品コード 値:行番号
  16. Dim dicS As Object '1.csv キー:商品コード 値:行番号
  17. Dim key As Variant 'キー(商品コード)
  18. Dim BPath As String 'デスクトップパス
  19. Dim WSH As Variant
  20. 'デスクトップのパスを取得
  21. Set WSH = CreateObject("WScript.Shell")
  22. BPath = WSH.SpecialFolders("Desktop") & "\"
  23.  
  24. Set dicM = CreateObject("Scripting.Dictionary") ' Dictionaryの定義
  25. Set dicS = CreateObject("Scripting.Dictionary") ' Dictionaryの定義
  26.  
  27. MFile = BPath & "商品.csv"
  28. SFile = BPath & "1.csv"
  29. '商品.csvをオープン
  30. Workbooks.OpenText Filename:=MFile, DataType:=xlDelimited, comma:=True, textqualifier:=xlTextQualifierNone
  31. Set mb = Workbooks.Item(Workbooks.count)
  32. Set ms = mb.Worksheets(1)
  33. '1.csvをオープン
  34. Workbooks.OpenText Filename:=SFile, DataType:=xlDelimited, comma:=True, textqualifier:=xlTextQualifierNone
  35. Set sb = Workbooks.Item(Workbooks.count)
  36. Set ss = sb.Worksheets(1)
  37. '有り.csv用bookをオープン
  38. Set tb = Workbooks.Add
  39. Set ts = tb.Worksheets(1)
  40. '商品.csvの商品コードを記憶
  41. For mrow = 2 To ms.Cells(Rows.count, 1).End(xlUp).Row
  42. key = ms.Cells(mrow, "A").Value
  43. dicM(key) = mrow
  44. Next
  45. '有り.csvへ見出しをコピー
  46. ts.Cells(1, "A").Resize(1, 3).Value = ss.Cells(1, "A").Resize(1, 3).Value
  47. '1.csvを処理する
  48. For srow = 2 To ss.Cells(Rows.count, 1).End(xlUp).Row
  49. key = ss.Cells(srow, "A").Value
  50. '1.csvの商品コードが商品.csvに存在し
  51. If dicM.exists(key) = True Then
  52. '1.csv内で最初に出現した商品コードの場合
  53. If dicS.exists(key) = False Then
  54. '有り.csvへコピーする
  55. ts.Cells(trow, "A").Resize(1, 3).Value = ss.Cells(srow, "A").Resize(1, 3).Value
  56. 'この商品コードを記憶する(次回は対象外とする為)
  57. dicS(key) = srow
  58. '有り.csvの行番号に1加算
  59. trow = trow + 1
  60. End If
  61. End If
  62. Next
  63. '有り.csvを保存
  64. Application.DisplayAlerts = False
  65. tb.SaveAs BPath & "有り.csv", FileFormat:=xlCSV, CreateBackup:=False
  66. Application.DisplayAlerts = True
  67. 'bookのクローズ
  68. tb.Close
  69. mb.Close
  70. sb.Close
  71. MsgBox ("完了")
  72. End Sub
  73.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty