いつもお世話になっております。
エクセル、VBAに関する質問です。
● 行削除について
ある特定の行を削除したいと考えています。
添付ファイルを参照下さい。
ある特定の列(ex B列)内データに対し紐づいている特定の列(ex A列)
が専用(紐付⇒1)(ex78110に対しABCが1データ紐付いている)
の場合は、行を削除せず。
逆に、ある特定の列(ex B列)内データに対し紐づいている特定の列(ex A列)
が共通(紐付⇒2以上)(ex 紐付⇒3。12310に対しFBA、RFA、GTC
の3データが紐付いている)の場合は、行を削除。
という条件にて、行削除を実行したい、と考えています。
どの関数、コードを利用するかどうか。。
アイデアがまるで出てきません。
お知恵を貸してください。よろしくお願いします。
No.1
- 回答日時:
「紐づいている」という言葉は標準的な日本語では無い様ですので、私が御質問の意味を正確に理解しているのか、自信はあまり御座いませんが、質問者様がどの様な処理をなされたいのかに関しては、添付画像のリストのパターンから、何となく解った様な気がします。
(もし、私が間違って理解していた場合には、補足等で御指摘願います)
処でもし、質問者様の仰る様に、VBAで4行目、5行目、6行目を完全に削除してしまいますと、削除後に新たに別の得意先が、例えば、品番12310を購入(?)した場合、品番12310の行が削除されずに残る事になります。
ですから、元データは全て残して、別Sheetに編集後のリストを表示させる様にされた方が、宜しいのではないでしょうか?
その場合は、VBAを使わずとも、関数でも可能です。
今仮に、元のリストがSheet1に存在していて、Sheet3のA列を作業列として使用して、Sheet2に編集後のリストを表示させるものとします。
まず、Sheet3のA1セルに次の数式を入力して下さい。
=IF(OR(INDEX(Sheet1!$A:$A,ROWS($1:1))="",INDEX(Sheet1!$B:$B,ROWS($1:1))="",SUMPRODUCT((OFFSET(Sheet1!$A$1,,,MATCH("゜",Sheet1!$A:$A,-1))<>INDEX(Sheet1!$A:$A,ROWS($1:1)))*(OFFSET(Sheet1!$B$1,,,MATCH("゜",Sheet1!$A:$A,-1))=INDEX(Sheet1!$B:$B,ROWS($1:1))))>0),"",ROWS($1:1))
次に、Sheet3のA1セルをコピーして、Sheet3のA2以下に、Sheet1のリストの行数を上回る行数になるまで、貼り付けて下さい。
次に、Sheet2のA1セルに次の数式を入力して下さい。
=IF(ROWS($1:1)>COUNT(Sheet3!$A:$A),"",INDEX(Sheet1!A:A,SMALL(Sheet3!$A:$A,ROWS($1:1))))
次に、Sheet2のA1セルをコピーして、Sheet2のB1セルに貼り付けて下さい。
次に、Sheet2のA1~B1の範囲をコピーして、同じ列の2行目以下に、Sheet1のリストの行数を上回る行数になるまで、貼り付けて下さい。
以上です。
No.2ベストアンサー
- 回答日時:
こんな感じでどうでしょう。
Sub RowsDelete()
Dim i As Long, j As Long, EndRow As Long
Dim 品番 As Long, 得意先 As String
Dim Flag As Boolean
i = 2
EndRow = Range("A1").End(xlDown).Row
Do
品番 = Cells(i, 2).Value
得意先 = Cells(i, 1).Value
Flag = False
For j = i + 1 To EndRow
If Cells(j, 2).Value = 品番 And Cells(j, 1).Value <> 得意先 Then
Flag = True
Exit For
End If
Next j
If Flag = True Then
For j = EndRow To i Step -1
If Cells(j, 2).Value = 品番 Then Rows(j).Delete
Next j
EndRow = Range("A1").End(xlDown).Row
Else
i = i + 1
End If
Loop Until i >= EndRow
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 会計ソフト・業務用ソフト 同じデータの入ったセルの統合の方法 1 2022/10/04 12:29
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) VBA 指定した列にある日時データから時間を削除する方法について 4 2022/04/14 11:17
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) VBA 文字列変換と指定した列にある日時データから時間を削除する方法について 2 2022/04/14 15:23
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
Microsoft1Officeの互換ソフト...
-
Excel ピボットテーブルで日付...
-
エクセル関数を教えてください
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 白黒印刷で白線を印刷...
-
【関数】先頭だけにある、半角...
-
【関数】適切な文字数の数字を...
-
Excelのチェックボックスの使い...
-
エクセルでの作業計算方法について
-
Excelのpivotについて質問です
-
WPS OFFICEでの縦書きについて
-
時間によってファイル名が変わ...
-
エクセルのセルに同じ大きさの...
-
Aというブックの1というシート...
-
エクセルの順位別一覧表の自動...
-
西暦や和暦の表示をyyyymmdd表...
-
【マクロ】エクセルにかいてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報