- ベストアンサー
Excel2007でリスト中の特定の文字を表示する方法を知りたい
- Excel2007のA列には日付を含む文章が入っており、C列には日付が入っています。A列の文章にC列の日付がある場合、その日付をB列に表示したいです。FIND関数だけでは対応できないため、他の方法を探しています。
- Excel2007で、A列に含まれる文章から、C列の日付を抜き出してB列に表示したいです。FIND関数による単純な検索では対応できないため、別の方法を探しています。
- Excel2007のA列には日付を含む文章があります。C列には日付が入っているので、A列の文章からC列の日付を抜き出してB列に表示したいです。FIND関数ではうまくいかず、別の方法を模索しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは! No.1さんの補足を読ませていただくと、関数でやるとなるとかなり難しいと思います。 そこでお望みでないマクロになってしまいますが 一例です。 データはA・C列とも1行目からあるとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long, k As Long, M As Long Dim str1 As String, str2 As String Columns(2).ClearContents For k = 1 To Cells(Rows.Count, 3).End(xlUp).Row str1 = WorksheetFunction.Text(Cells(k, 3), "yyyy/m") For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For M = 1 To Len(Cells(i, 1)) str2 = Mid(Cells(i, 1), M, Len(str1)) If str2 = str1 Then Cells(i, 2) = str2 End If Next M Next i Next k End Sub 'この行まで ※ 関数でないので、データ変更があっても反映されません。 データ変更があるたびにマクロを実行する必要があります。 関数で簡単にできる方法があればごめんなさいね。m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
No.2です! たびたびごめんなさい。 前回のコードではB列はシリアル値ではありません。 質問内に >その日付だけをB列のセルに抜き出す・・・ とありますので、B列はC列のシリアル値そのものを表示しなければならないのだと思います。 前回のコードは削除して、↓のコードに変更してください。 Sub test() 'この行から Dim i As Long, k As Long, M As Long Dim str1 As String, str2 As String Columns(2).ClearContents For k = 1 To Cells(Rows.Count, 3).End(xlUp).Row str1 = WorksheetFunction.Text(Cells(k, 3), "yyyy/m") For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row For M = 1 To Len(Cells(i, 1)) str2 = Mid(Cells(i, 1), M, Len(str1)) If str2 = str1 Then With Cells(i, 2) .Value = Cells(k, 3) .NumberFormatLocal = "yyyy/m" End With End If Next M Next i Next k End Sub 'この行まで ※ これでC列のシリアル値(表示形式は "yyyy/m")のデータがB列に表示されると思います。 何度も失礼しました。m(_ _)m
お礼
何度も推敲していただき、ありがとうございます。 もう少しだけ締め切りを延長させてください。
- mu2011
- ベストアンサー率38% (1910/4994)
>Aに入っている文章にCの日付がある場合、その日付だけをB列のセルに抜き出すというものです。 ⇒こんな感じでしょうか。 =IF(ISNUMBER(FIND(TEXT(C1,"yyyy/m"),A1)),C1,"")
お礼
ご回答ありがとうございます。 このような方法もあるのですね。大変勉強になりました。 誤解を受ける文面でしたが、C列にはC1に1995/1があり、その後C120 の2005/1まで、120の日付が入っています。 ご回答案では、C1と対応しているかどうかしか見ることができませんので、残念ながらうまくいきませんでした。 ただ、この方法は応用が効くかもしれないと思い、今まで苦闘しておりました。 お礼が遅くなり、申し訳ございませんでした。
お礼
ご回答ありがとうございます! マクロにお詳しいんですね。大変勉強になりました。 どうしても関数で実現できない場合、こちらを使わせて頂きます。 多くのお時間をいただき、本当にありがとうございます。