済みません、どなたか教えて下さい。
001 100 200 300 400
001 111 222 100 201 301 444
001 111 222 100 202 300 400
001 111 222 100 203 301 400
001 111 222 100 204 300 440
002 100 200 300 400
002 111 222 100 201 301 400
002 111 222 100 202 300 404
002 111 222 100 203 300 400
002 111 222 100 204 301 444
Excelで上記のような表があるとします(行列番号は省略しています)。
2列目に注目していただきたいのですが、データが111の場合のみ、右隣のセルに222という値があります。
この111と222の入ったセルのみを削除(左方向にシフト)したいのですが(この場合B2:C5とB7:C10)、
データが多い為手動では非常に時間がかかります。
そこでこれをマクロ化したいと考えているのですが、どのようにすればよいのか方法(考え方)がわかりません。
VBAは初心者ですが、かなり難しいでしょうか。
ちなみに、データのレコード数は決まっておりません。
上記の例で言う111、222の入る列番号は決まっております。
よろしければどなたかご指導下さい。宜しくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんばんは。
最初の質問と、#1の補足で付けた内容とは、少し違いますね。
ユーザー設定オプションを設けました。そして、最後は、目で確認してから削除してください。
なお、設定の中の「オフセット列数」というのは、検索対象列に対して、セル左ひとつなら、-1、検索対象列自体なら、0、セル右にひとつなら、1 と入れます。
'----------------------------------------------------
'なるべく、標準モジュールに登録してください。
'---------------------------------------------------
Sub TestMatchDelete()
Dim dlRng As Range
Dim i As Long
Const OCOL As Integer = 3 '検索対象列
Const OFSTCOL As Integer = -1 'オフセット列数
Const DELCOL As Integer = 4 '削除する列数
'ユーザー設定
With ActiveSheet
For i = 1 To .Range("B65536").End(xlUp).Row
If .Cells(i, OCOL).Value = 111 Then
If dlRng Is Nothing Then
Set dlRng = .Cells(i, OCOL).Offset(, OFSTCOL).Resize(, DELCOL)
Else
Set dlRng = Union(dlRng, .Cells(i, OCOL).Offset(, _
OFSTCOL).Resize(, DELCOL))
End If
End If
Next i
If Not dlRng Is Nothing Then
dlRng.Select
If MsgBox("この範囲を削除します。よろしいですか?", vbQuestion + vbOKCancel) = vbOK Then
dlRng.Delete xlShiftToLeft
End If
Else
MsgBox "検索対象列に該当するものがありません。", 48
End If
.Range("B1").Activate
End With
Set dlRng = Nothing
End Sub
ありがとうございます。
凄いです。完璧です。しかも初心者用にユーザー設定オプションを設けていただき、
更に確認メッセージまで入れていただいて…。
これで作業が大変楽になります。
私もVBAをもっと勉強しなくては…。
本当に感激です。ありがとうございました。
No.1
- 回答日時:
B列が111、C列が222の行をB列、C列のセルを削除し左にシフトするマクロです。
マクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて下さい。マクロの実行はワークシート画面に戻ってALT+F8でマクロ一覧を開き、マクロ名を選択して「実行」ボタンです。
Sub Macro4()
Dim idx As Long
For idx = 1 To Range("B65536").End(xlUp).Row
If Cells(idx, "B") = 111 And Cells(idx, "C") = 222 Then
Cells(idx, "B").Resize(1, 2).Delete Shift:=xlShiftToLeft
End If
Next idx
End Sub
念のため申し添えますが、セルの値が数値(右詰)ではなく文字列(左詰)ならば "111"、"222"のようにダブルコーテーションで囲む必要があります
If Cells(idx, "B") = "111" And Cells(idx, "C") = "222" Then
この回答への補足
申し訳ございません!せっかくこんなに素晴らしい回答を頂いたのですが、
私の説明不足でこのままでは使用できませんでした。
もう一度サンプルを挙げさせていただきます。
001 東 001 002 AAA
003 東 111 222 BBB 北 001 002 AAA
005 東 111 333 CCC 北 001 002 AAA
004 東 111 444 DDD 北 001 002 AAA
008 西 001 002 AAA
009 西 111 666 BBB 南 001 002 AAA
006 西 111 777 DDD 南 001 002 AAA
007 西 111 888 CCC 南 001 002 AAA
上記の例で、3列目をキーにして、111という値があった場合に、該当するレコードの2列目から5列目までを
左シフトで削除したい、ということなのです。
つまり、該当レコードであってもキーになる列以外の値は必ずしも同じではないということです。
結果はこうなります。
001 東 001 002 AAA
003 北 001 002 AAA
005 北 001 002 AAA
004 北 001 002 AAA
008 西 001 002 AAA
009 南 001 002 AAA
006 南 001 002 AAA
007 南 001 002 AAA
初めからきちんとした説明をしておけば良かったのですが、本当に済みませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
ゆるやかでぃべーと タイムマシンを破壊すべきか。
これはディベートの論題だと仮定したうえでの回答お願いします。あなたは、その末にタイムマシンを壊してしまうのか、使い道を探すのかどうかを考えてもらいたいです。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
マクロ 特定のセル値のみクリアする
Visual Basic(VBA)
-
vbaでシートより100より大きい値を削除するコードを教えてください
Visual Basic(VBA)
-
【Excel VBA】複数の条件を満たすデータを行削除
Excel(エクセル)
-
-
4
VBAで指定範囲内の空白セルを左詰めで一括削除したいのですが
Visual Basic(VBA)
-
5
ある条件を満たすセルに対応する行のセル内容をコピーして・・
Visual Basic(VBA)
-
6
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
7
IF関数などを使って条件に合った「行」を削除するような機能はありますでしょうか?
Excel(エクセル)
-
8
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
9
エクセルVBAでオートフィルター最上行を取得するには
Excel(エクセル)
-
10
Excel VBA 特定の条件の時に指定されたセルのクリア
Excel(エクセル)
-
11
VBAで特定の条件のセルのみクリアにする
Excel(エクセル)
-
12
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
13
エクセル2016でfilter関数がないので、、抜き出す関数をおしえてください。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
エクセル 文字数 多い順 並...
-
Excelで半角の文字を含むセルを...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセルの並び変えで、空白セ...
-
Excel、市から登録している住所...
-
2つのエクセルのデータを同じよ...
-
【ACCESS/必須条件とOR条件を組...
-
お店に入るために行列に並んで...
-
Excel 文字列を結合するときに...
-
エクセル 同じ値を探して隣の...
-
エクセルで、列の空欄に隣の列...
-
エクセルのセル内の文字の一部...
-
エクセルの表から正の数、負の...
-
エクセルで特定の行を削除した...
-
エクセルで一行毎、一枚づつ自...
-
エクセルで文字が混じった数字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
エクセル(勝手に太字になる)
-
Excelで半角の文字を含むセルを...
-
エクセル 文字数 多い順 並...
-
2つのエクセルのデータを同じよ...
-
エクセルで文字が混じった数字...
-
文字列に数字を含むセルを調べたい
-
エクセル 時間帯の重複の有無
-
VBAで文字列を数値に変換したい
-
「B列が日曜の場合」C列に/...
-
エクセル 同じ値を探して隣の...
-
エクセルの項目軸を左寄せにしたい
-
エクセルで、列の空欄に隣の列...
-
お店に入るために行列に並んで...
-
Excel、市から登録している住所...
-
エクセルの並び変えで、空白セ...
-
オートフィルターをかけ、#N/A...
-
エクセルの表から正の数、負の...
おすすめ情報