テキスト文字列内の日付の削除(Microsoft Excel)
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に適用されます。