Excel VBA 質問スレッド No.39 (未解決)

VBA 同じ作業を自動化

投稿者 : れん     投稿日時 : 2017/10/09(Mon) 15:28:13     OS : Windows 10     EXCEL : Excel 2013
VBA初心者です。
エクセルは2016です・

CSVで抽出したデータを対象の管理番号とマッチしたら残して、マッチしない場合は行ごと消していく。的なことをしたいです。

基本的には管理番号でマッチングさせています。
今まではVLOKUPでしておりましたが、ボタン一つでしたいと思いました。

例えば一つのブックに管理番号は
1234
1235
1236

とエクセルにあります。
こちらとマッチする行だけを残したいです。
CSV作業が多いのでどなたか回答お願い致します(><)

[返信 1] Re : VBA 同じ作業を自動化
投稿者 : スズキ     投稿日時 : 2017/10/16(Mon) 10:47:06
シート1にCSVデータ、シート2に削除対象の管理番号がそれぞれA列にあるとして、
サンプル作ってみました。

Sub sample()

Dim wsCsv As Worksheet
Dim wsDel As Worksheet
Dim csvRow As Integer
Dim delRow As Integer
Dim delcnt As Integer

Application.ScreenUpdating = False

Set wsCsv = Worksheets("Sheet1") ' CSVから取り込んだシート
Set wsDel = Worksheets("Sheet2") ' 削除対象の管理番号が記載されたシート

csvRow = 2 ' 処理開始行

Do Until wsCsv.Cells(csvRow, 1).Value = ""

Dim no As Integer ' 管理番号
Dim delflg As Boolean ' 削除フラグ

no = wsCsv.Cells(csvRow, 1).Value
delflg = False
delRow = 2 ' 削除対象管理番号の開始行

' 削除対象の検索
Do Until wsDel.Cells(delRow, 1).Value = ""

If wsDel.Cells(delRow, 1).Value = no Then
delflg = True
Exit Do
End If

delRow = delRow + 1
Loop


If delflg Then
' 行削除
wsCsv.Rows(csvRow).Delete
delcnt = delcnt + 1
Else
' 削除してない場合のみ行カウントアップ
csvRow = csvRow + 1
End If
Loop


Application.ScreenUpdating = True

If delcnt > 0 Then
MsgBox delcnt & "行削除しました。", vbInformation
Else
MsgBox "削除対象はありませんでした。", vbInformation
End If

End Sub

[返信 2] Re : VBA 同じ作業を自動化
投稿者 : TAKA     投稿日時 : 2018/07/18(Wed) 11:55:57
はじめまして。データが共にA行にあり、二行目から始まっていると仮定して作りました。

Sub 回答例()
Dim Csv As Worksheet, 管理番号 As Worksheet
Dim Lr As Long, Fc As Range, i As Long
Set Csv = ThisWorkbook.Sheets("CSV")
Set 管理番号 = ThisWorkbook.Sheets("管理番号")

For i = 2 To Csv.Cells(Rows.Count, "A").End(xlUp).Row
Set Fc = 管理番号.Range("A:A").Find(Csv.Cells(i, "A").Value)
If Fc Is Nothing Then
Csv.Rows(i).Delete Shift:=xlUp
i = i - 1
End If
Next i

End Sub

スポンサード リンク
 
 
当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2019-06-17 03:57:05 )

Page
Top