Karanは、ワークブックに多くのテキストデータを持っています。そのテキストデータの一部には日付が含まれています。彼女は日付を削除する方法を必要としていますが、セル内にある可能性のある他のテキストはすべて残します。たとえば、「4/15/16テストが正常に実行されました」または「テストが4/15/16に実行されました」として開始されるのは、削除後、「

テストが正常に実行されました」および「テストが実行されました」です。

日付が常に単純なパターンに従っている場合は、SUBSTITUTE関数を使用して日付を削除できます。たとえば、日付が常に1桁の月と2桁の日で構成されている場合は、次を使用して削除できます。

=SUBSTITUTE(A1,MID(A1,SEARCH("?/??/??",A1),7),)

このような式には複数の問題があります。まず、セルA1に日付がない場合、またはセルA1の日付が1桁の日しかない場合は、エラー値を返します。さらに、日付に2桁の月がある場合は、最初の桁がそのまま残るか(日付が2桁の日を使用している場合)、エラー値を返します(日付が1桁の日を使用している場合)。

セルのテキストの最初または最後に日付が表示される場合は、別の種類の数式を使用できます。

=IFERROR( IF( VALUE( LEFT( A1, 1)) > 0, RIGHT( A1, LEN(A1) - 7), ""), LEFT( A1, FIND( "/", A1) - 2))

このアプローチの問題は、正確なパターンM / DD / YYまたはMM / D / YYも必要になることです。したがって、前の式と同じ問題が発生します。

より用途の広いアプローチは、マクロを使用して日付を検索し、それを文字列から削除することです。次のマクロ例では、セルの内容を調べ、分割関数を使用してセルを「単語」に分割します。次に、単語が日付でない限り、単語を元に戻し始めます。

Function RemoveDates(ByVal vC As String)

Dim arr As Variant     Dim s As String     Dim i As Integer

RemoveDates = ""

If vC > "" Then         arr = Split(vC, " ")

For i = LBound(arr) To UBound(arr)

If Not IsDate(arr(i)) Then                 s = s & arr(i) & " "

End If         Next i         RemoveDates = Left(s, Len(s) - 1)

End If End Function

次のように、マクロをワークシートのユーザー定義関数として使用します。

=RemoveDates(A1)

このマクロの唯一の欠点は、単語間に複数のスペースがある場合、それらのスペースが置換プロセスで削除されることです。これが重要な場合は、次のように、マクロ内の正規表現に依存することを検討してください。

Function RemoveDates(MyRange As Range) As String     Dim sRaw As String     Dim sPattern As String     Dim regEx As New RegExp

sRaw = MyRange.Value

sPattern = "[0-9]{1,2}[-.\\/][0-9]{1,2}[-.\\/][0-9]{2}"



With regEx         .Global = True         .MultiLine = True         .IgnoreCase = False         .pattern = sPattern     End With

If regEx.Test(sRaw) Then         RemoveDates = regEx.Replace(sRaw, "")

Else         RemoveDates = "Not matched"

End If     Set regEx = Nothing End Function

この関数は、以前のユーザー定義関数と同じ方法でワークシートで使用されます:

=RemoveDates(A1)

正規表現の使用は、一部の人にとってはブラックアートのように見えるかもしれませんが、この特定の使用法はかなり簡単です。パターン(sPattern変数に格納されている)は、1桁または2桁の後に除算文字(ダッシュ、ピリオド、バックスラッシュ、またはスラッシュ)が続き、さらに1桁または2桁の後に、別の除算文字の後に2桁が続くと見なされることを示しています。日付。そのような一致がセルで見つかった場合、それは削除されます。

通常のespressionsアプローチを使用するには、Visual Basic Editorに次のライブラリへの参照を含める必要があります([ツール]メニューから[参照]を選択します)。

Microsoft VBScript Regular Expressions 5.5

また、参照するセルに日付がない場合、関数は「一致しません」を返すことに注意してください。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(7768)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。