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に適用されます。