こんばんは。
要望機能に対して、スクリプトを作りましたが、分からない部分を具体的に教えて頂ければ、こちらもアドバイスし易いのでお願いします。
どれだけデータ量があるのかも分かりませんので、処理速度が遅いと感じましたら修正を加えてください。
<1>特定データの削除
Sub DeleteRows()
' 変数宣言
Dim wb As Workbook ' ブック
Dim ws As Worksheet ' シート
Dim lastRow As Long ' ワークシートの最終行
Dim rng As Range ' 範囲
' ファイルを開く
Set wb = Workbooks.Open(ThisWorkbook.Path & "\TEST.xlsx")
Set ws = wb.Sheets(1)
lastRow = ws.Cells(Rows.Count, "C").End(xlUp).Row
' 列Cに"@"が含まれる行を削除
Set rng = ws.Range("C1:C" & lastRow)
rng.AutoFilter Field:=1, Criteria1:="=*@*", Operator:=xlAnd
ws.Range("A1:D" & lastRow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
rng.AutoFilter
' 列Dに"DUMMY"が含まれる行を削除
Set rng = ws.Range("D1:D" & lastRow)
rng.AutoFilter Field:=1, Criteria1:="=DUMMY*", Operator:=xlAnd
ws.Range("A1:D" & lastRow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
rng.AutoFilter
' 列Cで重複している行を削除
Set rng = ws.Range("A1:D" & lastRow)
rng.RemoveDuplicates Columns:=Array(3), Header:=xlYes
' C列をA列に移動
ws.Range("C:C").Cut ws.Range("A:A")
' A列以外を削除
ws.Range("B:XFD").Delete
' ファイルを保存
wb.SaveAs ThisWorkbook.Path & "\Example\EXCEL_.xlsx", FileFormat:=xlOpenXMLWorkbook
wb.Close SaveChanges:=False
' ファイルを閉じる
Set wb = Nothing
End Sub
<2>Excelファイルのcsvファイルへの分割化
Sub SplitData()
' 変数宣言
Dim wb As Workbook ' 現在のExcelファイル
Dim ws As Worksheet ' 現在のワークシート
Dim lastRow As Long ' ワークシートの最終行
Dim i As Long ' 行番号用のループカウンタ
Dim j As Long ' 列番号用のループカウンタ
Dim fileNum As Integer ' 出力ファイル番号
Dim outputPath As String ' 出力ファイルのパス
Dim csvFilename As String ' 出力ファイル名
' 現在のExcelファイルを設定
Set wb = ThisWorkbook
' "\Example\EXCEL_.xlsx"を開く
Set ws = Workbooks.Open(ThisWorkbook.Path & "\Example\EXCEL_.xlsx").Worksheets(1)
' ワークシートの最終行を取得
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
' 出力ファイルの初期値を設定
fileNum = 1
csvFilename = "output_" & Format(fileNum, "0000") & ".csv"
outputPath = ThisWorkbook.Path & "\Example\" & csvFilename
' データを180行ずつ分割し、csvファイルとして保存
For i = 1 To lastRow Step 180
Open outputPath For Output As #1
For j = i To i + 179
If j <= lastRow Then
Write #1, Join(Application.Transpose(ws.Rows(j).Value), ",")
End If
Next j
Close #1
' ファイル番号をインクリメント
fileNum = fileNum + 1
' 出力ファイル名を更新
csvFilename = "output_" & Format(fileNum, "0000") & ".csv"
outputPath = ThisWorkbook.Path & "\Example\" & csvFilename
Next i
' "\Example\EXCEL_.xlsx"を閉じる
ws.Parent.Close False
End Sub
この記事にはVBAのコードが含まれています。
<FONT COLOR='green'>緑の太文字→注釈
<FONT COLOR='brown'>茶色の太文字→条件分岐
<FONT COLOR='red'>赤の太文字→ループ
<FONT COLOR='BLUE'>青の太文字→その他
++++++++++++++++++++
OS ⇒Macintosh
Version⇒OTHER
++++++++++++++++++++
この記事にはVBAのコードが含まれています。
<FONT COLOR='green'>緑の太文字→注釈
<FONT COLOR='brown'>茶色の太文字→条件分岐
<FONT COLOR='red'>赤の太文字→ループ
<FONT COLOR='BLUE'>青の太文字→その他