プロが教えるわが家の防犯対策術!

中を見ていただき、ありがとうございます。
Excel2007を使い、以下の機能を「VBAを使わず」実装したいと考えています。

まずA列の各セルには、日付(2007/12のような形式)を含む文章が入っているものとします。
またC列の各セルには、日付(2007/12のような形式)が入っているものとします。

やりたいことは、Aに入っている文章にCの日付がある場合、その日付だけをB列のセルに抜き出すというものです。
たとえば、A1のセルに「今月はよく働いた(2007/4)」があれば、B1に「2007/4」を表示したいです。
日付部分以外にもスラッシュやカッコが出てきますので、FIND関数では対応できない気がいたします。また、VLOOKUPとROWとワイルドカードを組み合わせてみたのですが、力及びませんでした。

そこで、以上の機能を実装する方法をご存知の方がおられましたら、お知恵をお貸しください。

A 回答 (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
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
マクロにお詳しいんですね。大変勉強になりました。

どうしても関数で実現できない場合、こちらを使わせて頂きます。
多くのお時間をいただき、本当にありがとうございます。

お礼日時:2012/07/21 13:27

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 
    • good
    • 0
この回答へのお礼

何度も推敲していただき、ありがとうございます。
もう少しだけ締め切りを延長させてください。

お礼日時:2012/07/21 13:29

>Aに入っている文章にCの日付がある場合、その日付だけをB列のセルに抜き出すというものです。


 ⇒こんな感じでしょうか。
  =IF(ISNUMBER(FIND(TEXT(C1,"yyyy/m"),A1)),C1,"")
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
このような方法もあるのですね。大変勉強になりました。

誤解を受ける文面でしたが、C列にはC1に1995/1があり、その後C120 の2005/1まで、120の日付が入っています。
ご回答案では、C1と対応しているかどうかしか見ることができませんので、残念ながらうまくいきませんでした。

ただ、この方法は応用が効くかもしれないと思い、今まで苦闘しておりました。
お礼が遅くなり、申し訳ございませんでした。

お礼日時:2012/07/20 17:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!