エクセルでコマンドボタンを使ってID以外のデータを削除する方法

このQ&Aのポイント
  • エクセルのコマンドボタンを使って、特定のID以外のデータを削除する方法について教えてください。
  • テキストボックスにIDを入力し、コマンドボタンを押すと、別のシートからデータをコピー・貼り付けし、データを並べ替え、IDを表示することはできました。しかし、特定のID以外のデータを削除し、そのIDの方のみの一覧表を作成する方法が分かりません。
  • どうか、エクセルのコマンドボタンを使って特定のID以外のデータを削除する方法を教えてください。
回答を見る
  • ベストアンサー

エクセル コマンドボタンで検索したID以外を削除

エクセル コマンドボタンで検索したID以外を削除 ID、氏名等が入っているシートがあります。 テキストボックスにIDを入力しコマンドボタンを押すことで、 (1)別のシートからデータをコピーし、貼り付ける。 (2)データを並べ替える。 (3)あるセルにIDを表示する。 (4)そのID以外のデータを削除し、そのIDの方のみの一覧表を作成。 ということを行いたいんです。 (1)~(3)は何とかできたんですが、(4)がどうしても分からないんです。 Private Sub CommandButton1_Click() Worksheets("Sheet1").Activate Range("A2").CurrentRegion.Select Range("A2").CurrentRegion.Copy Worksheets("Sheet2").Activate Range("A3").Select ActiveSheet.Paste Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortTextAsNumbers Range("B2").Select Range("B2").Value = TextBox1.Value Unload Me End Sub どうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>回答番号:No.1 この回答への補足 >Aの列にIDがずらっと並んでいます。 A列にIDが入力されているのなら下記で試してください。 With Selection For i = .Rows.Count To 1 Step -1 If Range("A" & i + 2).Value <> Range("B2").Value Then .Rows(i).Delete Shift:=xlUp End If Next End With >ID、氏名以外にも入力する項目が8項目あるんですが、 >その中には入力しない空白のセルも入っています。 現在与えられた情報では明確に答えることができません。 操作対象セル範囲を、CurrentRegionプロパティで取得しています。 CurrentRegionプロパティのヘルプに オブジェクトを返すプロパティです。 アクティブ セル領域 (Range オブジェクト) を返します。 アクティブ セル領域とは、空白行と空白列で囲まれたセル範囲です。となっています。 従って、データセルの範囲内に、空白セルが点在するような場合は大丈夫だということになります。 ヘルプを見るのは、調べたい単語の文字列内にカーソル(文字キャレット)を置いてF1キーを押してください。 VBEのヘルプ http://miyahorinn.fc2web.com/vbabegin/s_02_03.html デバッグで、F8キーによるステップインで実行をしてみてください。 実行結果から、コードの意味が理解しやすくなります。 デバッグについて http://members.jcom.home.ne.jp/rex-uchida/vba110.htm あと、Excelの正しいレイアウト情報と、試されたコード全体を提示してください。 獲得したい結果と合わせて、回答を考える上で、非常に有益になります。

atom002
質問者

お礼

返答が遅れてしまい、大変申し訳ありませんでした。 自分なりにいろいろ試した結果、 まったく同じ内容のワークシートをもうひとつ作成し(ワークシート2)、IF、VLOOKUPの関数を利用して検索したいIDのみを表記するというようにしました。 検索IDを入力しマクロを実行すると、 1、ワークシート2のすべてをコピー 2、ワークシート3に貼り付け(値のみ) 3、空白行も含めて並べ替え ということを行うことで、何とか目的は達成できました。 本来ならもう少し簡単な方法もあったかと思いましたし、もっと助けていただいてよりよいものを完成させたかったのですが、時間がなかったために簡素な形で利用することとなりました。 せっかく回答をしていただいたのですが、それを生かすことができず大変申し訳なく思っています。 私の質問に対し、真摯に回答していただき大変ありがとうございました。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.3

音信不通ですが進展はあったのでしょうか? まだ未解決状態なら遠慮なく質問してください。 その際、現状のままでよいので、コードを全文提示するようにしてください。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

とりあえず、原始的なやり方ですが 1行毎にIDを確認しながら、IDの異なる行を削除します。 上から削除すると、Excelでは行が移動します。 コードの対象行とずれてしまい間違った行を削除することになります。 この場合は、下から行を削除してやります。 Dim i As Long With Selection For i = .Rows.Count To 1 Step -1 If Range("B" & i + 2).Value <> Range("B2").Value Then .Rows(i).Delete Shift:=xlUp End If Next End With 1行毎に削除するので時間がかかります。 余談ですが、Selectしなくても大丈夫です。 Worksheets("Sheet1").Activate Range("A2").CurrentRegion.Select Range("A2").CurrentRegion.Copy Worksheets("Sheet2").Activate Range("A3").Select ActiveSheet.Paste は、下記のようにまとめられます。 Worksheets("Sheet1").Range("A2").CurrentRegion.Copy _ Destination:=Worksheets("Sheet2").Range("A3") SortもSelectしなくても大丈夫ですから工夫してみてください。

atom002
質問者

補足

回答をありがとうございました。 早速試してみました。 しかし、残念なことに、まったく消えなかった上に、Bの列が他の列に比べて一段上に上がっただけの結果になりました。 理由ははっきりとは分かりません。 ID、氏名以外にも入力する項目が8項目あるんですが、その中には入力しない空白のセルも入っています。 それが原因なのでしょうか。 もう少し詳しく説明します。 B2に検索したいIDが入力されます。 Aの列にIDがずらっと並んでいます。 行毎には10項目ほどの入力内容が書かれています。 で、B2=Aの列に書かれているIDならその行は残す、それ以外のIDは削除するということをしたいんです。 よろしくお願いします。

関連するQ&A

  • 記述を簡略化させたい

    お世話になります。 下記の記述をスマートにさせたいのですが、ご教示お願いします。         記 Sub 優先順位() Range("A16:Y25").Select Selection.Sort Key1:=Range("Y16"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A43:Y52").Select Selection.Sort Key1:=Range("Y43"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A70:Y79").Select Selection.Sort Key1:=Range("Y70"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A97:Y106").Select Selection.Sort Key1:=Range("Y97"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("A16").Select End Sub

  • コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが

    コマンドボタンを押したときシート2のa行の空白セルを選択したいのですが以下のやり方では”RangeクラスのSelectメソッドが失敗しました。”のエラーが出てしまいます。どこがいけないのか教えてください。 Private Sub CommandButton1_Click() Worksheets("sheet2").Activate Range("a65536").End(xlUp).Offset(1).Select End Sub ちなみに、コマンドボタンはシート1にあります。 よろしくお願いします。

  • Excelのイベントマクロ

    Private Sub Worksheet_Activate()に関する質問です。 ワークシート1と2があるとします。 ワークシート1は普通のデータが記されており、それのソートを実行するマクロをMacro1、そのデータから重複したものを外してソートするマクロをMacro2とし、Macro1から呼び出してます。 今、シート2を開いたときは必ず、シート1でMacro1を実行するようにしたいのですが、以下のように記述すると、無限ループになってしまいうまくいきません。 どなたか、方法をお教えください。 Sheet2に記載したイベントマクロ Private Sub Worksheet_Activate() Sheets("Sheet1").Select Macro1 Sheets("Sheet2").Select End Sub 標準モジュールに記載したマクロ Sub Macro1() Dim team As Integer ActiveSheet.Unprotect ("pass") Range("A3:c18").Select Selection.Sort Key1:=Range("c3"), Order1:=xlAscending, Key2:=Range("A3") ,Order2:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal team = Range("b1").Value ActiveSheet.PageSetup.PrintArea = "$A$3:$c$" + CStr(team + 2) Macro2 Range("A1").Select ActiveSheet.Protect ("pass") End Sub Sub Macro2() Range("i3:j18").ClearContents Range("i3").Select Selection.Consolidate Sources:="R3C6:R18C7", Function:=xlMax, TopRow:=False,LeftColumn:=True, CreateLinks:=False Range("i3:k18").Select Selection.Sort Key1:=Range("k3"), Order1:=xlAscending, Header:=xlNo,OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal Range("j3:j18").Select Selection.NumberFormatLocal = "0_);[赤](0)" End Sub

  • エクセル VBA 集計方法

    各シート毎に下記の内容にて集計をしたいのですが、A2のセルにデータがない場合集計をしない方法がわからないのでご存じの方宜しくお願い致します。 Sheets("Sheet1").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Sheets("Sheet2").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True Sheets("Sheet3").Select Range("A1:P62").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal Selection.Subtotal GroupBy:=1, Function:=xlSum, TotalList:=Array(16), _ Replace:=True, PageBreaks:=False, SummaryBelowData:=True End Sub

  • VBA コマンドボタンにおけるコードについて

    下記のようなコードを作成しました。 これを簡略化するにはどうすれば良いのでしょうか? よろしくお願いします。 Private Sub CommandButton1_Click() Sheets("sheet2").Select Select Case UserForm1.ComboBox1.Text Case Is = Sheets("sheet2").Range("A1").Value Sheets("sheet2").Range("B1").Value = "X" Case Is = Sheets("sheet2").Range("A2").Value Sheets("sheet2").Range("B2").Value = "X" Case Is = Sheets("sheet2").Range("A3").Value Sheets("sheet2").Range("B3").Value = "X" Case Is = Sheets("sheet2").Range("A4").Value Sheets("sheet2").Range("B4").Value = "X" Case Is = Sheets("sheet2").Range("A5").Value Sheets("sheet2").Range("B5").Value = "X" ・ ・ ・ End Select End Sub

  • 【VBA】 超初心者です 複数のシートに転記したい

    Sub べんきょう() Worksheets(Array(1, 3)).Select Range("A1").value = 20 End Sub もしくは Sub べんきょう() Worksheets("sheet1").Select Worksheets("sheet3").Select False Range("A1").value = 20 End Sub でやってもsheet1にしか転記されないんです!! ご指導よろしくお願いします!

  • エクセルVBA ウィンドウ左上になるセルを指定する

    いつもお世話になっております。 以下のようなマクロを書きました。 Sub test() Worksheets("Sheet2").Select Range("A1").Value = "☆" Worksheets("Sheet1").Select Range("AG100").Activate End Sub 上記マクロでは、最後にAG100セルが見えるようになりますが AG100セルがウインドウ一番左上でアクティブになるように するためにはどのように記述すればよいか ご教示ください。 よろしくお願いします。

  • Excelのマクロ 検索範囲を広げたい

    マクロ初心者です。 マクロが入ってるExcelファイルがあるのですが、 マクロボタンを押しても結果がでないので、たぶんマクロの検索範囲が1列しかなってないみたいなので広げたいのですが、どうしたらよいでしょうか? Sub 検索準備() ' ' 検索準備 Macro ' ' Sheets("データ表").Select Range("A3:ES2002").Select Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Sheets("検索表").Select Range("A4").Select ActiveCell.FormulaR1C1 = "=+R[1]C" Range("A4").Select Selection.Copy Range("B4:ES4").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False Sheets("個人スキル").Select Range("D3:E3").Select End Sub Sub スキル検索() ' ' スキル検索 Macro ' ' ' Sheets("検索表").Select Range("A4:ES4").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("A1:ES4").Select Application.CutCopyMode = False Selection.Copy Sheets("計算表").Select ActiveWindow.SmallScroll ToRight:=-3 Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=True Range("F1:J149").Select Application.CutCopyMode = False Selection.Copy Range("L1").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll ToRight:=4 Range("L13:P149").Select Application.CutCopyMode = False Selection.Sort Key1:=Range("L13"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin, DataOption1:=xlSortNormal Range("L23").Select Sheets("個人スキル").Select Range("D3:E3").Select End Sub 検索準備ボタンと、スキル検索2種類ボタンがあります。 どこをいじくればよいのか分かりません。 検索表の検索範囲が表題を抜かして人の名前などが入ってる列が1列しかなってないので・・・

  • 複数のシートに 転記

    Sub べんきょう()   Worksheets(Array(1, 3)).Select   Range("3:3").Activate   ActiveCell.ClearContents  End Sub シート1,3の3行目のデータを消したい もしくは Sub べんきょう()   Worksheets(Array(1, 3)).Select   Range("3:3").Activate   ActiveCell.Interior.color = xlNone  End Sub シート1,3の3行目の色を消したい うまくいかなくて困ってます…。 どなたかどうかご指導よろしくです。

  • ActiveX コントロールでのセル選択

    Excel VBA独学中の初心者です。 目的:ActiveX コマンドボタンをクリックして他のSheetのセルを選択する 環境例:シートが2個(Sheet1、Sheet2) Sheet2にActiveXコントロールのコマンドボタンを置く 【プログラム1】:コマンドボタンには次のようなVBAコードを記述 ---------------- Private Sub 別シートセル選択_Click() Worksheets(1).Activate Range("A5").Select End Sub ---------------- 結果:この時次のようなエラーが出ました。 '実行時エラー'1004 'アプリケーション定義またはオブジェクト定義のエラーです。 -------------------------------- -------------------------------- 【プログラム2】:コマンドボタンには次のようなVBAコードを記述 ---------------- Private Sub 別シートセル選択_Click() Worksheets(1).Activate Worksheets(1).Range("A5").Select End Sub ---------------- 結果:OK ---------------- ---------------- ところが次の【比較1】【比較2】の場合、「Range("A5").Select」だけでOKでした。 ---------------- 【比較1】 コントロールの存在するSheetのセルを選択する場合は「Range("A5").Select」だけでOKでした。 ---------------- 【比較2】 Subマクロで記述する場合も「Range("A5").Select」だけでOKでした。 プログラムは以下 -------- Sub セル選択() Worksheets(1).Activate Range("A5").Select End Sub ---------------- 【質問】 ActiveX コントロールを置いているSheetとは別のSheetのセルを選択する時は、選択しようとするセルの「Sheet名」から記述しなければならないのでしょうか。 「Range("A5").Select」だけでOKだった【比較1】【比較2】との違いを教えていただきたくお分かりの方宜しくお願いします。 (用語の使い方に誤りがありましたらすみません。)

専門家に質問してみよう