1291035763 仕事で困っています。

似たようなモデルでお話ししますと、今、B列に長文のデータがずらりと入っています。
この長文の中から、指定の文字列だけを取り出して、A列に移動させたいのです。

「1つの文字列を取り出す」場合は、添付の図のように、アメリカだけを取り出して、移動させたいのです。

また、「2つ以上の文字列を取り出す」場合は、必ず指定した順番で(図の例で言いますと、「アメリカ」と「アラスカ」という文字列を取り出したいのですがが、必ず先に「アメリカ」を取り出して、その後「アラスカ」を取り出して、引っ付けて、同じ行のA列のセルに移動させたい)のです。

このような処理をできるだけ早く行える関数やマクロなどご存知でしたら、教えていただけないでしょうか?
よろしくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2010/11/29 22:02:45
  • 終了:2010/12/04 22:12:36

ベストアンサー

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982010/11/29 22:42:23

ポイント50pt

=IF(ISERR(FIND("アメリカ",B1)),"","アメリカ") & IF(ISERR(FIND("アラスカ",B1)),"","アラスカ")

最初の行に これを 貼り付けて それをコピーして 他の行に貼り付けたらいいでしょう。

id:moon-fondu

ありがとうございます!

うまくできました。

2010/12/04 11:34:13

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982010/11/29 22:42:23ここでベストアンサー

ポイント50pt

=IF(ISERR(FIND("アメリカ",B1)),"","アメリカ") & IF(ISERR(FIND("アラスカ",B1)),"","アラスカ")

最初の行に これを 貼り付けて それをコピーして 他の行に貼り付けたらいいでしょう。

id:moon-fondu

ありがとうございます!

うまくできました。

2010/12/04 11:34:13
id:xatosi No.2

xatosi回答回数9ベストアンサー獲得回数02010/11/30 00:46:05

ポイント60pt

このようなマクロを組んでは如何でしょうか


Option Explicit

Sub 文字列取りだし()

'

' 文字列取りだし Macro

'

'

'取り出し対象

Dim varGet() As Variant

varGet = Range("B1:b6").Value

Dim strG As String

Dim strGet() As String

Dim lngY As Long

Dim lngYEnd As Long

lngY = LBound(varGet, 1)

lngYEnd = UBound(varGet, 1)

Do While lngY <= lngYEnd

ReDim Preserve strGet(lngY)

strG = varGet(lngY, 1)

strGet(lngY - 1) = Replace(strG, """", "")

lngY = lngY + 1

Loop

'抽出対象

Dim varChusyutu As Variant

varChusyutu = Range("c1:c6")

Dim strGet_C() As String

Dim lngY_C As Long

Dim lngYEnd_C As Long

lngY_C = LBound(varChusyutu, 1)

lngYEnd_C = UBound(varChusyutu, 1)

Do While lngY_C <= lngYEnd_C

ReDim Preserve strGet_C(lngY_C)

strGet_C(lngY_C - 1) = varChusyutu(lngY_C, 1)

lngY_C = lngY_C + 1

Loop

'抽出作業

Dim lngC_Chusyutu As Long

Dim lngC_Tango As Long

Dim strCCell As String

Dim strTCell As String

Dim lngFind As Long

Dim blnSearch As Boolean

Dim blnExist As Boolean

Dim strList() As String

ReDim strList(1)

lngC_Tango = 0

Do While lngC_Tango < 6

strTCell = strGet(lngC_Tango)

If Not Len(strTCell) = 0 Then

lngC_Chusyutu = 0

Do While lngC_Chusyutu < 6

strCCell = strGet_C(lngC_Chusyutu)

blnSearch = True

lngFind = 1

Do While blnSearch

lngFind = InStr(lngFind, strCCell, strTCell, vbTextCompare)

If Not lngFind = 0 Then

blnExist = F_HairetuKensaku(strList, strTCell)

If Not blnExist Then

ReDim Preserve strList(UBound(strList) + 1)

strList(UBound(strList) - 1) = strTCell

End If

lngFind = lngFind + Len(strTCell)

If lngFind > Len(strCCell) Then

Exit Do

End If

Else

blnSearch = False

End If

Loop

lngC_Chusyutu = lngC_Chusyutu + 1

Loop

End If

lngC_Tango = lngC_Tango + 1

Loop

'結果出力

Dim lngLen As Long

lngLen = UBound(strList)

Dim lngRowmm As Long

lngRowmm = 0

Const cOutStart As Long = 6

Dim strOutCell As String

Do While lngRowmm < lngLen

Cells(lngRowmm + cOutStart, 2).Value = strList(lngRowmm) 'B列7行目以降に出力

lngRowmm = lngRowmm + 1

Loop

MsgBox ("完了")

End Sub

Private Function F_HairetuKensaku(strList() As String, strFind As String) As Boolean

Dim blnFind As Boolean

blnFind = False

Dim lngN As Long

lngN = 0

Dim lngEnd As Long

lngEnd = UBound(strList)

Do While lngN < lngEnd

If strList(lngN) = strFind Then

blnFind = True

Exit Do

End If

lngN = lngN + 1

Loop

F_HairetuKensaku = blnFind

End Function

id:moon-fondu

あれ・・・xatosiさんに教えていただいたマクロを、そのまま貼り付けて実行してみたのですが、うまくいきません(>_<)

「アメリカ」「アラスカ」は、B列から移動されることなく、そのままです。

もしよろしければ、再度ご回答いただければ幸いなのですが、どこを書き換えれば、「アメリカ」「アラスカ」といった文字列を、その文字列がある同じ行のA列もしくはC列などの空白に、移動させることができるのでしょうか?

2010/12/04 12:01:51
id:kiri-katidid No.3

kiri-katidid回答回数59ベストアンサー獲得回数72010/12/01 02:08:43

ポイント40pt

1番 taknt さんと同様の回答ですが:

 

(1)取り出したい文字列を、優先順にC列以降の弟2行に記入する

   例:アメリカ、アラスカの順の場合、セルC2に「アメリカ」、セルD2に「アラスカ」

 

(2)文字列の有無を判断する関数を、C列以降の弟3行に記述する

   例:セルC3に、「=IF(ISERROR(FIND(C2,B3,1)),"",C2)」

     セルD3に、「=IF(ISERROR(FIND(D2,B3,1)),"",D2)」

 

     (1)で記入した文字列があるときはその文字列を2行目から引用表示し、無い時は空白を表示します。

 

(3)A列のセルに、文字列有無の結果(C列以降の3行目)を連結表示する

   例:セルA3に、「=C3&D3」

 

(4)他の行に関数をコピーする準備として、参照セルを絶対位置指定に変える

   例:セルC3を、「=IF(ISERROR(FIND($C$2,B3,1)),"",$C$2)」

     セルD3を、「=IF(ISERROR(FIND($D$2,B3,1)),"",$D$2)」

 

(5)セルをコピーして他の行のセルに貼り付ける

   例:セルC3をコピーして、C列の最終行(B列に文章が入っている最終の行)までを選択して貼り付ける

     セルD3をコピーして、D列の最終行(B列に文章が入っている最終の行)までを選択して貼り付ける

     セルA3をコピーして、A列の最終行(B列に文章が入っている最終の行)までを選択して貼り付ける

 

注意点:

1.B列の文はそのままです

  「移動」よりも「抽出」のイメージです

 

2.同じ文字列を2箇所から取り出す場合は関数を変える必要があります

  例:文「アメリカにあるアラスカは、アメリカの中でも・・・」から

    アメリカ、アラスカ、アメリカと取り出したい場合

    (1)は上記と同様に、セルE2に「アメリカ」と記入

    (2)はセルE3に、「=IF(ISERROR(FIND(E2,B3,xxx)),"",E2)」

       xxx は FIND(C2,B3,1)+LEN(C2)

 

 

URLは参照サイトです

http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/itiran.html

id:moon-fondu

うまくできました(^_^;)

ありがとうございます<m(__)m>

2010/12/04 11:34:48
  • id:Mook
    文字列の指定はどのように行うのでしょうか。
    また、取り出すとは言いながらあらかじめ検索する文字列が分かっているならば、単純に文字を
    含んでいるかどうかの判断になると思うのですが。

    関数でいえば、C1に検索文字列があった場合
    =IF(COUNTIF(B1,"*"&$C$1&"*")>=1,$C$1,"")

    C1、D1に検索文字列があった場合
    =IF(AND(COUNTIF(B1,"*"&$C$1&"*")>=1,COUNTIF(B1,"*"&$D$1&"*")>=1),$C$1&$D$1,"")
    という式でできるかと思いますが。

    質問の意味を取り違えていたら、補足ください。
  • id:Silvanus
    マクロはきっと簡単に組めると思いますが
    取り出す対象となる文字列はどうやって指定するのですか?
    画像の例では、アメリカとアラスカは取り出す対象であってインドは異なる様ですね。
    あと、2単語を取り出す場合も、アメリカとアラスカの順序を
    指定しておかなくてはいけないと思います。
    上記の設定を別のシートに保管されるのが良いのではないでしょうか。
  • id:hathi
    >> B列のセルの長文テキストの中から、指定の文字列だけを取り出して、隣のA列のセルに移動させる
     
    1 「指定の文字列」をどこで指定しているのかがわかりせん
    2 「指定の文字列」が一つなのか、複数あるのか、どこで見分けるのかがわかりません
    3 「指定の文字列」は、行毎に違うのか、全行同一の文字列でやるのかがわかりません
    4 「取り出して移動する」結果、B列のセルからは取り出された文字列は消えるのですか。(画像では残っているように見えますが)
    5 B列の一つのセルに同じ「指定の文字列」が複数個ある場合はA列にどのように取り出すのかがわかりません。
      例 「米国」「羅馬」が「指定の文字列」で、B列のセルに「羅馬を訪問した米国人は345万人で、これは米国から出国した人の12%にあたる。さすがに羅馬は米国では人気が高い。」
     このような場合、A列のセルには、どう入れるのかわかりません。
  • id:moon-fondu
    皆様、真剣にご回答いただきありがとうございます!
    なのに申し訳ございません、今日はかなり遅い時間になってしまったので・・・明日以降、皆様の回答をじっくり読ませていただきます(>_<)
    よろしくお願いします。
  • id:moon-fondu
    あと2日で締め切りなのに、返信が遅くなってすいません(>_<)

    >Mookさん
    すいません、ちょっと関数が複雑で頭が回りませんでして・・・・Mookさんが書いてくださった関数のどこを書き換えると、B列からうまく「アメリカ」や「アラスカ」などの文字列を、取り出せるのでしょうか?「C1に検索文字列があった場合」を、書き換えて、B1とかしてみたのですがうまくいきませんでして・・・「$」でセルを固定する理由も、ちょっと理解できませんでして・・・(:_;)

    >Silvanusさん
    そうですね、インドは対象ではないんです。取り出す対象となる文字列はどうやって指定するのですか?・・・とは、どういう意味でしょうか(@_@;)?マクロで指定できないのでしょうか?理解力が乏しくてすいません(>_<)

    >hathiさん
    すいません、質問が悪かったです!

    1 「指定の文字列」をどこで指定しているのかがわかりせん
    「指定の文字列」は、B列にある「アメリカ」と「アラスカ」です。

    2 「指定の文字列」が一つなのか、複数あるのか、どこで見分けるのかがわかりません
    「アメリカ」一つだけあるセルもありますし、「アメリカアラスカ」「アラスカアメリカ」と、複数あるセルもあります。
    ただ、必ず「アメリカ」を優先して抽出したいです。

    3 「指定の文字列」は、行毎に違うのか、全行同一の文字列でやるのかがわかりません
    全行同一の文字列、「アメリカ」と「アラスカ」に対して、実行したいです。

    4 「取り出して移動する」結果、B列のセルからは取り出された文字列は消えるのですか。(画像では残っているように見えますが)
    消して移動させる方法と、消さずにコピーする方法、どちらも知りたいです。

    5 B列の一つのセルに同じ「指定の文字列」が複数個ある場合はA列にどのように取り出すのかがわかりません。
      例 「米国」「羅馬」が「指定の文字列」で、B列のセルに「羅馬を訪問した米国人は345万人で、これは米国から出国した人の12%にあたる。さすがに羅馬は米国では人気が高い。」

    複数ある場合も、「米国」に一致すれば、全て抽出して、同じ行の空白の列に移動させたいです。順番は、文章の前からになりますかね・・・。
  • id:xatosi
    ごめんなさい、仕様をちょっと取り違えていました。
    他の方の回答で解決されたようですので、修正版は出しませんが、
    あくまで参考として、こういうモノだったということで以下のアドレスにファイルを置いておきます。
    http://xatosi.info/project/omochabako/moziretutolidasi.zip
  • id:moon-fondu
    ファイル開いたのですが、うまくいきません(>_<)
    basファイルをExcelで開いて、それを標準モジュールに貼り付けて、実行してみたのですが・・・変化なしです。
    また機会がありましたら、質問したいと思います。
    ご回答いただき、ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません