[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定範囲から文字列を検索して抜き出したい』(pen)
皆様
下記、ご教示ください。
A1:E5の範囲のどこかのセルに、「ABC」から始まる文字列が入力されています。
それを、さがしだして「ABC」を含む9文字を抜き出す処理をしたいです。
■やりたいこと
・探すセル範囲:A1:E5 ・探す文字列:あいう ・抜き出したい文字列:ABC******
■その他の条件
・抜き出したい文字列「ABC******」が全角になっている場合は、半角にして抜き出す。 ・抜き出す文字列の前後に他の文字列がある場合も考慮する。 例:「注意:ABC******の内容に含む」と入力されていた場合でも、 「ABC******」のみを抜き出したい。
探し出すところまでは、下記で対応できている状況です。
Set ordernum = Range("A1:E5").Find(What:="ABC", MatchCase:=False, MatchByte:=False, LookAt:=xlPart)
MID関数が使えるかと思い、
c = Mid(Range(ordernum.Address), Find("ABC", Range(ordernum.Address)), 9) を試しましたがだめでした。。。
お力を貸していただけますようお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows10 >
Sub test() Dim ordernum As Object Dim cw As String
Set ordernum = Range("A1:E5").Find(What:="ABC", MatchCase:=False, MatchByte:=False, LookAt:=xlPart) If Not ordernum Is Nothing Then cw = StrConv(ordernum, vbNarrow) If Left(cw, 3) = "ABC" Then MsgBox Left(cw, 9) End If End If End Sub (???) 2017/08/08(火) 17:33
ご教示ありがとうございます。
■やりたいこと
・探すセル範囲:A1:E5 ・探す文字列:あいう ・抜き出したい文字列:ABC******
と書いてしまっていましたが、
■やりたいこと
・探すセル範囲:A1:E5 ・探す文字列:ABC ・抜き出したい文字列:ABC******
でした。すみません。
抜き出したい文字列は、あるひとつのセルの中に他の文字列に紛れてある感じです。
なので、ABC******が始まるのが何文字目か確認してそこから9文字抜き出すことがしたいです。
left(CW,3)にしてしまうと、上記の例で記載した、「注番:」と記載の場合のみしか対応できず、
もう少し長い文章が入力されてしまっている場合などに対応が出来ません。
ABC******の前に、例では「注番:」としましたが、
「ABC*********」のみが記載されている場合や、
「前回から増額ABC*********」と記載があったりとさまざまです。
また、「ABC*********」と全角で記載されている場合や、
「他の文字列ABC******他の文字列」となっている場合もあります。
?@ABC*********という全角か半角の文字列が含まれるセルを探し出す。
?A同セルにABC*********以外の文字列が入力されたいたら、排除した状態で抜き出したい。
?B「*******」の部分はユニークになるので、ABCからはj決まる9文字を抜き出すとしたい。
といった状態です。
【補足】
全体の背景は、複数シートが入っているファイルを、シートごとに分割する作業です。
その際に、各ファイルのタイトルを、日付、ABC******、件名にしたいのです。
ただ、ABC******は、各入力者が備考や注意事項も一緒に入力してしまう場合と、
注意などを書くために、セルをずらした範囲で入力している場合があり、
入力されているセルと、余計な入力を無視して、ABC******のみを取得したいというものです。
よろしくお願いいたします。
(pen) 2017/08/09(水) 09:56
Sub test() Dim ordernum As Object Dim cw As String Dim iw As Long
Set ordernum = Range("A1:E5").Find(What:="ABC", MatchCase:=False, MatchByte:=False, LookAt:=xlPart) If Not ordernum Is Nothing Then cw = StrConv(ordernum, vbNarrow) iw = InStr(cw, "ABC") If 0 < iw Then MsgBox Mid(cw, iw, 9) End If End If End Sub (???) 2017/08/09(水) 10:07
丸文字の件、失礼いたしました。気をつけます。
StrConvで、半角に変換
InStrで、始まりの位置を取得
の理解であってますでしょうか。
あまり日数がないので、まずはそのままコピーしてテストしてみます。
やり方を調べていたときに、同じ関数が出てきて、試したのですが、
だめだったので、自分で書いたものと比べてみます。
また、わからないことがありましたら、質問させていただきます。
ありがとうございました。
(pen) 2017/08/09(水) 10:22
エクセルのヘルプはわかりにくい先入観があって、全く見てませんでした(汗
私の言葉も足りず、追って説明していただくようにしてしまい申し訳ありませんでした。
vbNarrow のほかにも指定できるものがあるのだろうと思って本とかも調べて、
vbNarrow で半角=StrConvで半角という表現になってました。失礼しました。
ヘルプももう少し、皆さんが教えてくださるようにわかりやすい表現や例になってくれるといいですね。。。
また色々勉強してみたいと思います。
ありがとうございました。
(pen) 2017/08/10(木) 11:29
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.