- ベストアンサー
エクセル、特定の内容の抽出をしたいのです
よろしくお願いします。 文章的に入力されているセルのデータの中から、”日付”の入力がなされている場合、その日付だけを抜き出す数式を別個のセルに設定したいのですが、そのようなことができますでしょうか。 たとえば、A列は上から 1 先の取引について(2007/10/29)… 2 定例ミーティング(2007/10/20)… という風に入力されていたとします。 E列に、それぞれその同じ行の日付だけを抽出して表示させたい、と言った具合です。地道に手入力してゆけばすむことですが、データが膨大になることと、自分のエクセル理解度を上げたいので、よろしくご教授ください。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
初めての数字が日付け(A)の全角数字文字列(B)で定桁10桁という仮定で 例データ A列 B列結果 明日は2007/10/12日 2007/10/12 去年の2006/12/23に事件は起こった 2006/12/23 式は B1セルに MID(A1,MIN(FIND({"0","1","2","3","4","5","6","7","8","9"},A1&"0123456789")),10) B1式をB2に複写 結果上記の通り。 非常に技巧的な式だが、定石みたいなものがあるので、それによる。
その他の回答 (6)
=MID(A1,MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&1234567890)),10) ただし、日付部分は yyyy/mm/dd 形式で入力されているものとします。 つまり、2007/1/2 でなく 2007/01/02 というように。
お礼
ありがとうございます!はい、日付は4桁ですべて入力してありましたので、解決いたしました!文字、でなくデータとして拾ってくれたので大変助かりました。 アドバイスを頂いた方が多数でしたので、ポイントを振ることができず、大変申し訳ございません。 今回は最初に頂いた方から振らせて頂きます。ですが、感謝の気持ちは忘れません。
- n-jun
- ベストアンサー率33% (959/2873)
他のサイトで参考にしたコードです。 Sub TEST() Dim c As Range Dim matches, match With CreateObject("VBScript.RegExp") .Pattern = "(\d*\/\d*\/\d*)" For Each c In Range([A1], Cells(Rows.Count, "A").End(xlUp)) Set matches = .Execute(c.Value) For Each match In matches c.Offset(, 4).Value = match.Value Next Next End With End Sub ご参考になれば。
お礼
あろがとうございます! マクロはちょっとかじった程度ですが、コピペしてやってみます! ほかにも応用ができそうな気がします。
- n-jun
- ベストアンサー率33% (959/2873)
>いろいろなパターンでご教授頂きたかったので 数式のみではなく、マクロによる処理も含まれると言う事になるのでしょうか?
補足
初心者なので、数式が希望ですが、マクロも覚えられれば、と思いますので、お教え頂ければがんばってみます!(^^;)
日付の左側には全半角数字はありませんか? 日付は必ず全角文字ですか?全半角混在ですか? 日付の区切りの「/」は必ず半角文字ですか?全半角混在ですか? 日付の右側には全半角数字はありませんか? 条件は小出しにしないで、最初から明記しませう。
補足
●日付の部分は"/"含め、すべて半角で、その左に数字はありません。 (ある場合だと、また条件が変わってしまいますよね) ●小出しにしたつもりはありませんでした。いろいろなパターンでご教授頂きたかったので細かな説明を省かせて頂いており、ご迷惑をおかけ致しました。
- gutoku2
- ベストアンサー率66% (894/1349)
以下の条件を満たすのであれば、下記の方法で可能です。 条件1 日付は必ず ( で 始まり、 )で終わる。 条件2 括弧 ( は、全角である。 半角でもできますが、下記関数は全角括弧にのみ対応。 A1セルに、文字列が記載してあり、E1セルに関数を入れるとします。 (A1セル="1 先の取引について(2007/10/29)") =VALUE(MID(A1,FIND("(",A1,1)+1,FIND(")",A1,1)-FIND("(",A1,1)-1)) 入力後E1セルにて、右クリック - セルの書式設定 - 日付 にすれば、2007/10/29 と、日付として認識されます。 また、E1を =TEXT(VALUE(MID(A6,FIND("(",A6,1)+1,FIND(")",A6,1)-FIND("(",A6,1)-1)),"yyyy/m/d") と入力すれば、文字列として2007/10/29として認識されます。 (セルの書式設定をする必要がありません) 尚、括弧が半角の場合は、上記関数の"(" <全角>を→ "("<半角>に すればOKです。
お礼
置換して、すべての日付に()をつけてやってみました。 置換は自動なので、苦労なく、実行できました! さらに欲を言えば、括弧を条件とせずに抽出できれば最高ですが、お教え頂いた方法で、該当セルに日付のみが抽出された時は感激しました! ありがとうございます。 取り急ぎお礼まで(^-^)
補足
早速のアドバイス、ありがとうございます!ただ、No.1様にも申し上げたのですが、必ず括弧があるわけではないのですよ…。 VALUEの条件を"日付"みたいな感じではできないですよね。。。
- n-jun
- ベストアンサー率33% (959/2873)
日付の両端に括弧が必ずあるなら、その位置を見つけて文字列から 抜き出すのはどうでしょう? MID関数やFIND関数でできそうな感じです。
補足
早速のアドバイス、ありがとうございます! ただ、残念なことに、複数の担当者がつけた標題だったりして、必ず括弧がついているわけでもないのです。。。引き続き自分でもいろいろ試して見ます!
お礼
ありがとうございます! 実は、括弧をつけてご質問してしまったがために混乱を招いてしまっており、恐縮の思いでした。 わたしの書類は半角でしたが、半角でお教え頂きました数式でうまくできました。 FINd関数はこれまでつかったことがなかったので、皆様にご教授いただき、大変勉強になりました。 P.S.imogasi様、先日の別件でのリストに関する質問(QNo.3455089)ですが、はじめ「難しいかな」と思っていたのですが、実はimogasi様のアドバイスの方法を勉強して解決いたしました。 締め切ったあとで理解できたためお礼ができず、でした。改めてありがとうございました。