特定の用語を含むセルの削除(Microsoft Excel)
Ankurには、さまざまな用語を含む何千ものセルを含むワークシートがあります。彼は、それらの用語の多くとそれらが出現するセルを削除する必要があります。たとえば、「google」、「youtube」、「linkedin」などの用語を含むすべてのセルを削除する必要がある場合があります。 Ankurは、これらの各用語を検索して置き換えることができることを知っていますが、それは非常に面倒です。彼は、削除するすべての用語を特定して、Excelにそれらの数千のセルからそれらを削除させる方法があるかどうか疑問に思います。
この種のことを定期的に行う必要がある場合、最善の解決策はマクロを使用することです。秘訣は、マクロで、置き換えるものを正確に指定する方法です。 1つの方法は、次の例のように、情報を配列に詰め込むことです。
Sub RemoveTerms1() Dim vTerm As Variant Dim vArray As Variant vArray = Array("google", "youtube", "linkedin") For Each vTerm in vArray Selection.Replace What:=vTerm, _ Replacement:="", LookAt:=xlPart Next vTerm End Sub
検索される用語はvArray配列に配置され、配列の各メンバー(各用語)がステップスルーされます。 Replaceメソッドは、実際の置換を行うためにSelectionオブジェクトとともに使用されます。マクロはセルを削除しません。用語に一致するテキストを削除するだけです。置き換える場合、検索では大文字と小文字が区別されないため、「google」は「Google」と一致します。
Selectionオブジェクトが使用されるため、実際にマクロを実行する前に、処理するリストを選択することが重要です。
そうしないと、何も置き換えられません。
必要に応じて、ブック内のセルの範囲から用語を取得するマクロを作成できます。
Sub RemoveTerms2() Dim c As Range Dim rngSource As Range Dim vTerm As Variant Dim arrTerms As Variant Dim i As Integer i = -1 arrTerms = Array() For Each c In Range("D1:D9").Cells If Trim(c.Value) > "" Then i = i + 1 ReDim Preserve arrTerms(i) arrTerms(i) = Trim(c.Value) End If Next c On Error Resume Next Set rngSource = Application.InputBox( _ Prompt:="Please select Range", _ Title:="Removing Cells Containing Terms", _ Default:=ActiveSheet.UsedRange.Address, Type:=8) On Error GoTo 0 If rngSource Is Nothing Then MsgBox ("You didn't specify a range to process") Else For Each vTerm in arrTerms rngSource.Replace What:=vTerm, _ Replacement:="", LookAt:=xlWhole Next vTerm End If End Sub
このマクロは、範囲D1:D9から検索語を取得し、処理するセルの範囲を選択するように求めます。 LookAtパラメーターをxlWholeに指定することを除いて、前のマクロで使用されたものと同じReplaceメソッドを使用します。これは、検索語を削除するには、検索語がセル全体と一致する必要があることを意味します。ただし、これらの用語では大文字と小文字は区別されません。
これまでの例では、実際にはセルが削除されていないことに注意してください。セルの内容を削除するだけです。多くの場合、実際のワークシートのレイアウトを乱したくないので、これはまさにあなたが望むものです。本当にセルを削除したい場合は、Replaceメソッドを使用しません。代わりに、拡張テキスト比較をオンにして、Like演算子を使用して一致するものがあるかどうかを確認できます。
Option Compare Text Sub RemoveTerms3() Dim c As Range Dim rngSource As Range Dim vTerm As Variant Dim arrTerms As Variant Dim i As Integer Dim sLook As String i = -1 arrTerms = Array() For Each c In Range("D1:D9").Cells If Trim(c.Value) > "" Then i = i + 1 ReDim Preserve arrTerms(i) arrTerms(i) = Trim(c.Value) End If Next c On Error Resume Next Set rngSource = Application.InputBox( _ Prompt:="Please select Range", _ Title:="Removing Cells Containing Terms", _ Default:=ActiveSheet.UsedRange.Address, Type:=8) On Error GoTo 0 If rngSource Is Nothing Then MsgBox ("You didn't specify a range to process") Else For Each vTerm in arrTerms sLook = "" & vTerm & "" For Each c In rngSource If c.Value Like sLook Then c.Delete Next Next vTerm End If End Sub
検索語は引き続きD1:D9の範囲から取得され、処理する範囲の入力を求められることに注意してください。ただし、そこからはプロセスが異なります。マクロは各セルを調べ、部分的に一致する場合はセルが削除されます。
マクロのこのバリエーションが正しく機能するためには、プロシージャ自体の外にOption CompareText行を含める必要があります。
これは、テキストの比較を可能にするキーワード(Likeなど)を有効にするようにVBAに指示します。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]
。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(13373)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。