人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

1291035763
●拡大する

●質問者: moon-fondu
●カテゴリ:コンピュータ
✍キーワード:お話 アメリカ アラスカ セル データ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント ベストアンサー

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

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

◎質問者からの返答

ありがとうございます!

うまくできました。


2 ● xatosi
●60ポイント

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


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

◎質問者からの返答

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

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

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


3 ● kiri-katidid
●40ポイント

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ