質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

1291閲覧

2つのシートを比較し、ない行を削除

minako_tera

総合スコア12

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/11/04 05:48

編集2021/11/04 06:22

下記のような2つのシートがあり、番号がふられています。
番号「3」のようにシートAにあってシートBにない場合、
シートAの番号「3」の行をすべて削除したいのですが、コードの書き方がわかりません。
お手数ですが、コードの記載方法の理解もしたく、ご教授よろしくお願いいたします。

シートA

製品名前番号
りんご田中
鈴木
りんご井上
みかん井上

シート2

製品名前番号
りんご田中
鈴木
みかん井上

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

VBA

1Sub sample() 2 Dim sheetA As Worksheet, sheetB As Worksheet 3 Set sheetA = Sheets("シートA") 4 Set sheetB = Sheets("シートB") 5 6 Dim lastRow 7 lastRow = sheetA.Range("C" & sheetA.Rows.Count).End(xlUp).Row 8 9 Dim i 10 For i = lastRow To 2 Step -1 11 If WorksheetFunction.CountIf(sheetB.Range("C:C"), sheetA.Range("C" & i)) = 0 Then sheetA.Rows(i).Delete 12 Next 13End Sub

投稿2021/11/04 13:44

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minako_tera

2021/11/14 05:01

返信が遅くなり申し訳ございません。初心者でもわかりやすい回答ありがとうございます。
guest

0

一例です。ご参考に。

vba

1Public Sub sample() 2 Dim r1 As Range '削除対象セル範囲 3 With Worksheets("シートA") 4 Set r1 = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp)) 5 End With 6 Dim r2 As Range '検索対象セル範囲 7 With Worksheets("シート2") 8 Set r2 = .Range(.Cells(2, 3), .Cells(.Rows.Count, 3).End(xlUp)) 9 End With 10 11 Dim c As Range, v As Variant 12 Dim delRows As Range '削除行を格納する 13 For Each c In r1 14 v = Application.Match(c.Value, r2, 0) '完全一致で検索 15 If IsError(v) Then '見つからなければ 16 If delRows Is Nothing Then 17 Set delRows = c.EntireRow 18 Else 19 Set delRows = Union(delRows, c.EntireRow) 20 End If 21 End If 22 Next 23 If Not delRows Is Nothing Then delRows.Delete 24End Sub

投稿2021/11/04 08:18

hatena19

総合スコア34084

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minako_tera

2021/11/04 08:51

どうもありがとうございます。大変助かります。 お時間かかりますが、確認させていただきます。
minako_tera

2021/11/14 05:02

確認が遅くなり申し訳ございません。無事できました。ご丁寧にありがとうございました。
guest

0

つたないですが以下のようなコードはいかがでしょう?

コード Dim LASTROW1 As Long Dim LASTROW2 As Long LASTROW1 = Worksheets(1).Cells(Rows.Count, 3).End(xlUp).Row LASTROW2 = Worksheets(2).Cells(Rows.Count, 3).End(xlUp).Row Dim k As Long Dim kk As Long Dim i As Long Dim STR1 As String Dim STR2() As String ReDim STR2(LASTROW2) As String For i = 2 To LASTROW2 STR2(i) = Worksheets(2).Cells(i, 3).Value Next i Dim TF As Boolean For k = LASTROW1 To 2 Step -1 STR1 = Worksheets(1).Cells(k, 3).Value TF = False For kk = 2 To LASTROW2 If STR1 = STR2(kk) Then TF = True End If Next kk If TF = False Then Worksheets(1).Rows(k).Delete End If Next k

投稿2021/11/04 07:34

ppss

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

minako_tera

2021/11/04 07:47

ご連絡ありがとうございます。 理解するまでに少し時間がかかりそうですので、まずはご連絡させていただきました。 よろしくお願いいたします。
minako_tera

2021/11/14 05:04

確認が遅くなり申し訳ございません。無事できました。ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問