
###前提・実現したいこと
CSVで出力したデータを必要な列のみ取り出して
Excelのデータに取り込みたい。
その際、用意している定型のタイトル行を加工データに挿入したい。
さらに、別のCSVデータも同Excelに取り込んだ際
重複していないCSVデータのみを最終行へ反映させたい。
###発生している問題・エラーメッセージ
①CSVの取り込みマクロを作成したが、単体で作ったためどこに入れればワンクリックでマクロを起動した際、CSV取り込み→表作成と流れるようにマクロが動くのかわからない。
②自分で用意したタイトル行を入れる方法が分からない
③重複しないデータを取り込む方法がわからない
☆データ加工マクロ☆は指定のタイトル列を丸ごとコピーして抽出データシートに張り付けています。
新しい他のデータを同じようにマクロをかけたときに重複するデータを探すキーはA列の申請№で確認したいのですが、作ったマクロを実行すると、列ごとにコピペするようになっているため、そのほかの列は重複が分からず全部のデータを張り付けてしまうためわからなくなっています。
###該当のソースコード
☆CSV取り込みマクロ☆
Sub openCSV()
'CSVの取り込み Dim varFileName As Variant varFileName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", _ Title:="CSVファイルの選択") If varFileName = False Then Exit Sub End If Workbooks.Open Filename:=varFileName ActiveSheet.Cells.Copy ThisWorkbook.ActiveSheet.Cells ActiveWorkbook.Close savechanges:=False
End Sub
☆データ加工マクロ☆
Option Explicit
Sub ColCopy()
Dim xlBook As Workbook 'ワークシートですよ
Dim xlSheetOrg As Worksheet 'ワークシートですよ
Dim xlSheetSel As Worksheet 'ワークシートですよ
Dim xlSheetDst As Worksheet 'ワークシートですよ
Dim strDstSheetName As String '文字列ですよ
Dim rngLastRow As Range 'セルですよ
Dim vntIndex As Variant
Dim rngIndexs As Range 'セルですよ
Dim rngHeader As Range 'セルですよ
Dim lngColSrc As Long '長整数ですよ
Dim lngColDst As Long '長整数ですよ
Dim rngTargetCol As Range 'セルですよ
Set xlBook = ThisWorkbook With xlBook Set xlSheetSel = .Worksheets("列選択") Set xlSheetOrg = .Worksheets("オリジナル") End With ' コピー先シート名取得 strDstSheetName = xlSheetSel.Range("A3").Value ' コピー先シートを初期化(なければ生成) On Error GoTo ERR_DST_SHEET Set xlSheetDst = xlBook.Worksheets(strDstSheetName) With xlSheetDst .Cells.Clear End With On Error GoTo 0 ' 項目名を読み取り With xlSheetSel Set rngLastRow = .Cells(.Rows.Count, 1).End(xlUp) 'A列の一番下取得 Set rngIndexs = .Range(.Cells(5, 1), rngLastRow) 'A5~A列一番下まで範囲指定 Debug.Print Set rngLastRow = Nothing End With ' 見出し行の取り込み Set rngHeader = xlSheetOrg.Rows(1) 'オリジナルシートの1行目取得 ' 該当列のコピー Application.ScreenUpdating = False With xlSheetDst '新しく作ったシートに lngColDst = 0 For Each vntIndex In rngIndexs '指定した範囲分繰り返す lngColDst = lngColDst + 1 Set rngTargetCol = rngHeader.Find(CStr(vntIndex)) '(文字列の検索)ヘッダーをセット lngColSrc = rngTargetCol.Column rngTargetCol.EntireColumn.Copy .Cells(1, lngColDst) 'IngColDstの1行目の列全体をコピー Set rngTargetCol = Nothing Next vntIndex Set rngIndexs = Nothing End With Application.ScreenUpdating = True GoTo PROC_END
ERR_DST_SHEET:
Set xlSheetDst = Sheets.Add(, Sheets("オリジナル")) 'オリジナルシートの隣に新規シート挿入終わり
xlSheetDst.Name = strDstSheetName
Resume Next
PROC_END:
Set rngHeader = Nothing
Set xlSheetDst = Nothing
Set xlSheetOrg = Nothing
Set xlSheetSel = Nothing
Set xlBook = Nothing
End Sub
###試したこと
①CSVをExcelブックで取り込み、タイトルがついてないので、
必要な列にのみタイトルをつけた(これをマクロでやりたい)
###補足情報(言語/FW/ツール等のバージョンなど)
Excel2016使用

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。