Excelで下記の文字列を抽出したいのですがどなたか教えてください
例)
- abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出
-- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出したいのですが宜しくお願いします

このQ&Aに関連する最新のQ&A

A 回答 (4件)

>- abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出


=TRIM(MID(SUBSTITUTE(A1," ",REPT(" ",100)),100,100))

>-- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出
=TRIM(LEFT(SUBSTITUTE(TRIM(REPLACE(A1,1,FIND("--",A1,FIND("--",A1)+1)+LEN("--"),))," ",REPT(" ",100)),100))
    • good
    • 0
この回答へのお礼

ありがとうございます。
上記内容でやってみました。結果問題なく処理できました。
REPT関数は今回初めて使いました。
関数は煩雑になりやすいのですが、短く応用しやすいので助かりました。

お礼日時:2011/04/12 17:34

エクセルでは文字列の抽出は関数では複雑になる。


そう答えても質問者には、仕様がないかもしれないが、VBAなら素直に考えたとおりコードを組めばできる面はある。
VBAでは変数と言う一時的なデータを次のステップで使えるから。具体的には始めて見つかったスペースなどの位置を次のステップで使えるが、関数では難しい場合が多い。
>先頭の文字が'-'かブランクで任意の文字を取得でブランクの前
例 データ
A列  B列(答え)
qqq asdf ghasdf
wer-ghj ertyghj
qwe ertu-dfgertu
B1にユーザー関数で =kiridasi(A1," ")
標準モジュールに
Function kiridasi(a, b)
a = Replace(a, "-", " ")
p1 = InStr(a, b)
If p1 = 0 Then
kiridasi = 0
Else
p2 = InStr(Right(a, Len(a) - p1), b)
If p2 = 0 Then
p2 = Len(a) + 1
Else
End If
kiridasi = Mid(a, p1 + 1, p2)
End If
End Function
参考
関数では
=MID(SUBSTITUTE(A1,"-"," "),FIND(" ",SUBSTITUTE(A1,"-"," "))+1,FIND(" ",SUBSTITUTE(MID(A1,FIND(" ",SUBSTITUTE(A1,"-"," "))+1,LEN(A1)-FIND(" ",SUBSTITUTE(A1,"-"," "))),"-"," ")))
色んな場合にこれで正しいか自信がもてない。
ーー
エクセルやそのVBAでは、こういう文字列の切り出しには向いてない。
ーー
「正規表現」などのことは、ややそれを目指している考えのようなので、今後こういう内容の問題を多用するなら勉強してはどうでしょう。
ーー
>-- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出
例 データ
--asd--dfgasd
asd--ghyj--sghyj
sd--ddf--ddf
B1にユーザー関数 =kiridasi2(A1,"--")  と入れる。
ーー
ユーザー関数
Function kiridasi2(a, b)
p1 = InStr(a, b)
'MsgBox p1
'MsgBox Replace(a, b, " ", Count:=1)
p2 = InStr(Replace(a, b, " ", Count:=1), b)
'MsgBox p2
kiridasi2 = Mid(a, p1 + 2, p2 - (p1 + 2))
End Function
VBAのReplace関数には、countという引数で、置き換える文字列の個数を指定出来るので助かる。
エクセル関数には無いようだ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
Excelを使用していると、知人からもVBAは覚えるべきだと言われます、作業効率をはかるため、この機会にやりたいと思います。
言語はCOBOLのプログラムを作成したことはあるのですが
手始めに何か良いVBAの入門書があれば教えてください。

お礼日時:2011/04/12 17:13

》 任意の文字,桁も不明で2回目の'--'後の・・・



「任意の文字,桁も不明」なのに「'--'後」と仰ってる!矛盾してませんか?

空白は何個あっても文字列と称さないと仮定すれば、
ご質問の意味は、
左端の文字列の個数が1個なら、1個目の同文字列の直後の文字列を、
左端の文字列の個数が2個なら、2回目の同文字列の直後の文字列を、
左端の文字列の個数が3個なら、3回目の同文字列の直後の文字列を、
左端の文字列の個数がn個なら、n回目の同文字列の直後の文字列を、
ということですか?
それとも、左端の文字列は必ず「-」が1個以上あるので、その個数に応じて抽出位置を計算したいと?

この回答への補足

ありがとうございます
質問の内容ですが、1番目については、先頭の文字が'-'かブランクで任意の文字を取得でブランクの前までを取得したいのです。2番目めは'-'かブランクで2番目の任意の文字桁数でやはりブランクの前の文字列を取得したいのです。宜しくお願いします。

補足日時:2011/04/12 08:10
    • good
    • 0

>- abcdef xxxx ---- この場合任意の文字桁も不明で最初のブランクの後のabcdefを抽出



 抽出開始位置は解りましたが、どこまでを抽出すれば良いのかが不明です。
 2番目の空白の1文字前まででしょうか?
 それとも最初に現れる"xxxx"の2文字前まででしょうか?
 それとも最初に現れる"----"の部分から数えて後ろから2番目の空白の1文字前まででしょうか?
 質問をなさるのでしたら、条件を明確にして頂く様、御願いします。

 取り敢えず、「最初の空白の1文字後から、2番目の空白の1文字前まで」の場合に関して回答させて頂きます。
 今仮に、元の文字列がA1セルに入力されているものとしますと、抽出結果を表示させるセルには、次の数式を入力されると良いと思います。

=IF(LEN(A1)-LEN(SUBSTITUTE(A1," ",))>1,MID(A1,FIND(" ",A1)+1,FIND(" ",A1,FIND(" ",A1)+1)-FIND(" ",A1)-1),"")


>-- abc -- def zzz この場合任意の文字,桁も不明で2回目の'--'後のdefを抽出

 2番目の"--"の後は、"def"ではなく、" def zzz"だと思います。
 もしかすると、抽出開始位置は2番目の"--"の後ではなく、2番目の"-- "の後からではないでしょうか?
 仮にそうだとしても、どこまでを抽出すれば良いのかが不明です。
 例えば、

-- abc -- def ghi zzz jkl

という文字列の場合は、どこまでを抽出すれば良いのでしょうか?
 " zzz"の直前までと考えて、

def ghi

を抽出すれば良いのでしょうか?
 それとも、最後の空白の直前までと考えて、

def ghi zzz

を抽出すれば良いのでしょうか?
 それとも、"-- "の後で最初に現れる空白の直前までと考えて、

def

を抽出すれば良いのでしょうか?
 此方も、条件を明確にして頂く様、御願いします。

 取り敢えず、「2番目の"-- "の直後から、その後で最初に現れる空白の直前まで」の場合に関して回答させて頂きます。
 今仮に、元の文字列がA1セルに入力されているものとしますと、抽出結果を表示させるセルには、次の数式を入力されると良いと思います。

=IF(ISNUMBER(FIND(" ",A1,FIND("゛",(SUBSTITUTE(A1,"-- ","゛",2)))+LEN("-- "))),MID(A1,FIND("-- ",A1,FIND("-- ",A1)+1)+LEN("-- "),FIND(" ",A1,FIND("゛",(SUBSTITUTE(A1,"-- ","゛",2)))+LEN("-- "))-FIND("-- ",A1,FIND("-- ",A1)+1)-LEN("-- ")),"")
    • good
    • 0
この回答へのお礼

上記内容でやってみました。結果がきちんと出せました。
関数のISNUMBERは今回初めて使いました。
いろいろ応用ができそうです。

ありがとうございます。

お礼日時:2011/04/12 17:24

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル プルダウンの作り方

お世話になります。
エクセルでプルダウンの作り方を教えていただけませんでしょうか?
住所を▼のボタンでクリックしたら【北海道,青森,秋田,岩手・・・】などの選択ができるようにしたいのです。
宜しくお願いします。

Aベストアンサー

メニューから「データ」、「入力規則」、「設定」で「入力値の種類」を「リスト」を選択します。
そうすると「元の値」という表示がでますので、そこで前もって作っておいたリストの範囲を指定します。
多くないのでしたら、そのままそこにカンマで区切って入力しても出来ます。

QExcel VBAで複数のExcelブックからある文字列を検索→抽出したものをまとめたい

Excel VBAで以下の操作は可能でしょうか。
私はAccessVBAを少しさわる程度でExcel VBAはまったくわかりませんし、
まだ現物データを見ていないので説明不足ですが、
ご存知の方がいらっしゃいましたらどうぞご回答をお願いします。
コード等もあわせて教えて下さるととても助かります。

複数のExcelブックからある文字列を検索→抽出したものをまとめたい。
・検索抽出したい文字列の入っているセル位置は固定。
・抽出したデータを新たなファイルにするか、どうするかはまだ未定。
・Excelブックは100個ほどある。

Aベストアンサー

いくつもの課題があるようですね。

検索については、[VBA .Find] 等で探すと幾つかの例が見つかります。
http://excelvba.pc-users.net/fol7/7_2.html
ヒットした情報はセルのオブジェクトなので、.Value で値を取出して、作業シートや配列に格納する事も可能です。

100個のブックをどのように指定するのかは解りませんが、同一フォルダなら Dir()関数でファイルを複数のファイルを連続して取出す事が可能です。

まずは、ネットで探したサンプルを元に簡単なコードを書いて実験して見てください。
解らない部分は、大抵はヘルプやネットで探せます。

Qエクセルでプルダウンメニューの作り方

  エクセルの画面で、よく三角形を逆さまにした形をクリックするといくつかメニューが出てき、どれかを選べるようになっていますが、その作り方を教えてください。
 会社で人事を担当していますが、三角形(プルダウンボタン)をクリックすると社員氏名一覧が表示され、そこから選択できるようにしたいのです。
 しばらく自力でいろいろやってみましたが、さっぱり見当がつかず、どうやればいいのか分かりませんでした。よろしくお願いします。

Aベストアンサー

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならないでしょうか?
Excel2007の場合は↓のURLが参考になるかもしれません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-ny_kis2.html

尚、同一Sheetに「名簿表」を作成する場合は名前定義する必要はなくて
「元の値」の右側の四角をクリックし、リスト表示したいセルをそのまま範囲指定すればOKです。

以上、お役に立てば良いのですが・・・m(_ _)m

こんばんは!
当方使用のExcel2003での一例です!

↓の画像のようにSheet2に名簿表を作成しておきます。
画像ではSheet2のA2セル以降を範囲指定 → 名前ボックスに仮に「名簿」と入力しOK
これで範囲指定したセルが「名簿」と名前定義されましたので、

Sheet1のリスト表示させたいセルを範囲指定 → メニュー → データ → 入力規則
→ リスト → 「元の値」の欄に
=名簿
としてOK

これでSheet1のセルをアクティブにすると右側に下向き▼が表示されますので、そこをクリック!
これで希望に近い形にならない...続きを読む

QExcelで文字列の中から部分一致したものを抽出

エクセルで特定の文字を含むセルを抽出する方法を探しています。

A列に元データ、C列に検索条件があります。
C列の条件に一部でも一致するデータを抽出したいです。(結果イメージを添付します)

可能であれば、関数で対応したいです。

どなたかお分かりになる方いらっしゃいましたら、
教えていただけないでしょうか?

よろしくお願いいたします。

Aベストアンサー

こんにちは!
A列は当然文字列だと思いますが、C列の日付セルがシリアル値だと厄介です。
とりあえずC列の日付セルは「文字列」だという前提での一例です。

画像の配置ではB2セルに
=IF(OR(ISNUMBER(FIND(C$2:C$6,A2))),"○","")
これは配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → B2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
数式の前後の{ }マークが入り配列数式になります。
これをフィルハンドルで下へコピーしてみてください。

※ 検索データ(C列データ)が増える場合は元データにまず使うことはないであろうと思われる
「*」(アスタリクス等の文字、#のような文字でも構いません)を入力しておき、数式内の
>C$2:C$6
部分の範囲を広げておきます。
そして検索データが増えた場合はアスタリクスの代わりに検索文字列を入力します。
(空白セルは範囲指定しないようにするためです)

※ C列日付データがシリアル値の場合、別の方法を考える必要があります。m(_ _)m

こんにちは!
A列は当然文字列だと思いますが、C列の日付セルがシリアル値だと厄介です。
とりあえずC列の日付セルは「文字列」だという前提での一例です。

画像の配置ではB2セルに
=IF(OR(ISNUMBER(FIND(C$2:C$6,A2))),"○","")
これは配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は
上記数式をドラッグ&コピー → B2セルを選択 → 数式バー内に貼り付け → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定!
数式の前後の{ }マークが...続きを読む

Qエクセル(Excel) 納品書の作り方【画像修正版

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が見にくかったのでシート<CENTER></CENTER>だけにしました。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルでコピー!
そのまま最後の24行目までコピーしておきます。

F4セルには
=IF(COUNTBLANK(B4:E4),"",D4*E4)
という数式を入れ、F24までオートフィルでコピー!

これでB列に商品番号を入力すればSheet2のデータが反映され、
E列に数量を入力でF列に金額が表示されると思います。

最後に合計金額のF26セルは
=IF(COUNT(F4:F24),SUM(F4:F24),"")
手数料のF27セルは
=IF(F26="","",F26*0.2)

これで何とか形にならないでしょうか?

※ 振込金額の欄は不明ですので手を付けていません。

参考になりますかね?m(_ _)m

こんばんは!
前回投稿した者です。

当方もかなり古い(人間も古い!なぁ~んちゃって!)Excel2003を使用しています。
↓の画像のようにSheet2にデータを作成しておきます。

#N/A というエラーは、「検索値」がない!ということですので
お示しの画像のB列にSheet2のA列にないデータを入力するとそういったエラーが表示されます。

画像のセル配置ですと
C4セルに
=IF($B4="","",VLOOKUP($B4,Sheet2!$A:$C,COLUMN(B1),0))
(「$」マークの位置に気を付けてください)
という数式を入れD4セルまでオートフィルで...続きを読む

QExcelで表1からある文字列を検索し、HITした同一行にある数値を計算し、表2に反映させたい

はじめまして。Excelの関数を利用して、
以下のような仕組みを作りたいと思います。

毎日の作業を表にまとめた(表1)から、
作業を抜き出して、作業毎の時間と件数の累計をまとめた(表2)
を作成したいと思います。

表1から作業と作業毎の時間と件数を抽出し、
計算して出力するような式を書きたいのですが、
うまい方法が思いつく方がいらっしゃいましたら、
ご教授いただければと思います。

※表1と表2はシートを分けたいです。

何卒よろしくお願いします。

(表1)
 日付  作業  担当者 作業時間 作業件数
---------------------------------------------
1月10日  A   太郎    7    500
1月10日  B   花子    8    300
1月11日  A   太郎    7    500
1月11日  C   花子    8    400
1月12日  B   太郎    4    600
1月12日  C   太郎    4    300
1月12日  C   花子    8    500
---------------------------------------------

(表2)
作業 作業時間 作業件数
-------------------------
 A    14    1000
 B    12     900
 C    20    1200
-------------------------

はじめまして。Excelの関数を利用して、
以下のような仕組みを作りたいと思います。

毎日の作業を表にまとめた(表1)から、
作業を抜き出して、作業毎の時間と件数の累計をまとめた(表2)
を作成したいと思います。

表1から作業と作業毎の時間と件数を抽出し、
計算して出力するような式を書きたいのですが、
うまい方法が思いつく方がいらっしゃいましたら、
ご教授いただければと思います。

※表1と表2はシートを分けたいです。

何卒よろしくお願いします。

(表1)
 日付  作業  担当者...続きを読む

Aベストアンサー

No.2です!
たびたびごめんなさい。
前回画像をアップしたものは小さすぎて見づらいと思いますので、
もう一度画像をアップさせていただきます。

何度も失礼しました。m(__)m

Qエクセル(Excel) 納品書の作り方【改めて】

昨日http://oshiete.goo.ne.jp/qa/7348426.htmlで質問させていただき、詳しくご回答いただき少し進んだのですが、状況が変わったので改めて質問させていただきます。

■エクセル(Excel)で納品書の作成をしています。
シート1に納品書、シート2に商品マスタ(一覧)を作っていて、シート2の一覧を反映させて
納品書に番号を打ち込むだけで、商品名・単価までが出るシステムを作りたいのですが、
昨日のご回答の中の「VLOOKUP」?を入れて、自分なりにマス目の数字を変えてやってみたのですが
反映されずN/?のようなエラーになってしまいます。

※画像が貼り付けてあります。商品名は1番以外伏せさせていただいています。
くっつけてありますが、左側がシート1・右側がシート2です。

1、上記のように、シート2との関連付けの係数を、写真の場合の数字で教えてください。

2、合計と、合計から20%を引いた数値を割り出す関数も、写真の数字で御願いします。

宜しくご教授お願い致します。

Aベストアンサー

画像がいまいちよく見えないのですが、納品書の項目は左から、No、商品番号、商品名、単価、数量、金額でいいのでしょうか(名前は多少違っていても意味があっていればもんだいないです)

でしたら、
C1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,2,FALSE))
D1セルに=IF(ISBLANK(B2),"",VLOOKUP(B2,Sheet2!$A$2:$C$200,3,FALSE))
E1セルは空白で
F1セルに=IF(D2="","",D2*E2)
といれて、C1からF1までをコピーしてその下の行にタテに貼り付ければ出来ますよ。
おそらくエラーが出たのは、コピーしたときにVLOOKUP関数の最初のセルの指定がずれてしまっているのでは無いかと思いますよ。     

QExcelで、sheet全てを含む形で、文字列の検索を行い、該当する文字列のあるsheetへ自動的に飛ぶにはどうしたらよいでしょうか?

環境:Excel2003
状態:Excelのsheet毎に「ア行」「カ行」・・・と作り、10sheet作成。
   それぞれ「ア行」のsheetなら、「あ行」の氏名を、
   「カ行」のsheetなら、「か行」の氏名を記載しています。
【検索したいこと】
例えば、「明本」と検索sheet上などで検索をした場合、自動的に「ア行」sheetの「明本」のセルに飛ぶようにしたい。

※通常の「検索」「オプション」の方法以外に何かありましたら、お教えいただければと思います。

※マクロについては初心者なので、もしマクロでの方法がありましたら詳しく教えていただきたく思います。

すみませんが、宜しくお願い致します。

Aベストアンサー

「検索」「オプション」で検索場所をシートからブックに変更すれば、全体のシートから目的の単語で検索できます

マクロでも出来ると思いますが、難しそうなのでこの方法が一番簡単ではないでしょうか?

Qエクセル2007でプルダウンで選んだものに反応

Excel2007でプルダウンで選んだものに反応して隣のセルが自動入力される方法(エクセル2007)
A1をプルダウンで「猫」「犬」から選べるようにし、「猫」を選んだ場合B1に自動に「111」が、「犬」を選んだ場合B1に自動に「222」と入力されるようにしたいです。
ご教授の程、宜しくお願いします。

Aベストアンサー

VLOOKUP関数での方法です。
(1)別シートに入力文字列と対応コード表を作成。(仮にSheet2のA:B列範囲で順不同)
(2)B1に=IF(COUNTIF(Sheet2!A:A,A1),VLOOKUP(A1,Sheet2!A:B,2FALSE),"")を設定
   入力文字列が存在しない場合は空白としています。

QEXCELで、文字列の中から数字を抽出したいのですが。

お世話になります。
EXCELにおいて、A1のセルに文字と数字が入力されています。この中から、最初の数字のみを、B1に抽出したのですが、ご教示お願いします。
文字の長さと数字の位置は、様々な文字列です。
宜しくお願い致します。

Aベストアンサー

こんにちは

>最初の数字のみを
とのことなので、最初の一文字だけでいいのですよね?

それでいいのでしたら
=MID(A1,MIN(FIND({"1","2","3","4","5","6","7","8","9","0"},
JIS(A1)&"1234567890")),1)
こんな感じでしょうか?

参考URL:http://www.geocities.jp/chiquilin_site/data/050223_numerical_extraction.html


人気Q&Aランキング

おすすめ情報