- ベストアンサー
VBAでセルの中のタイトル文から日付部分だけ抽出
エクセルのVBAで、セルの中のタイトル文から日付部分だけを抜き出そうと考えているのですが、 うまくいきません。 正規表現でうまくできないか悪戦苦闘してますが、お手上げです(汗) やりたいとことは 「こちらの文章は4/5に作成しました。」 「こちらの文章は4/5に作成しました。」 「こちらの文章は04/05に作成しました。」 「こちらの文章は4月5日に作成しました。」 「こちらの文章は4月5日に作成しました。」 の日付(4月5日)だけ抽出して全て04/05に変換となります。 分かる方、お手数ですが、ご教授お願いします><
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>お手上げです 正規表現のパターンですか? 使い方ですか? 以下を参考にしてください。 Function 抽出(ByVal 文字列 As String) As String Dim 正規表現 As Object Dim 一致集合 As Object Dim パターン As String パターン = "([\d0-9]+[//][\d0-9]+|" _ & "[\d0-9]+[月][\d0-9]+日)" Set 正規表現 = CreateObject("VBScript.RegExp") 正規表現.Pattern = パターン Set 一致集合 = 正規表現.Execute(文字列) If 一致集合.Count > 0 Then 一致部分 = 一致集合.Item(0).Value '★日付として正しいかチェック If IsDate(一致部分) Then 抽出 = 一致部分 End If End If End Function パターンは「nn/nn」または「nn月nn日」という もので、nnは半角または全角の数字1個以上を 示します。
その他の回答 (1)
- plus_x
- ベストアンサー率62% (10/16)
全然きれいじゃないですが、動けば良しの精神で。 A1セルに入力してある文字から、日付を抽出してB1セルに入れます。 変換もVBAですると更に長くなるので、書式で対応しました。 Sub TEST() Dim テスト, 結果, パターン As String, レンジ As Range Set テスト = CreateObject("VBScript.RegExp") With テスト パターン = "\d?\d/\d?\d" .Pattern = パターン .IgnoreCase = True .Global = True Set 結果 = .Execute(StrConv(Cells(1, 1), vbNarrow)) If 結果.Count > 0 Then Cells(1, 2).Value = 結果(0).Value Cells(1, 2).NumberFormatLocal = "mm/dd" Else パターン = "\d?\d月\d?\d日" .Pattern = パターン Set 結果 = .Execute(StrConv(Cells(1, 1), vbNarrow)) If 結果.Count > 0 Then Cells(1, 2).Value = 結果(0).Value Cells(1, 2).NumberFormatLocal = "mm/dd" Else MsgBox "日付がみつかりません" End If End If End With End Sub
お礼
plus_x様 ご回答ありがとうございました! 一つ一つ内容を確認していき、理解することができました^^