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

エクセルの文字列処理の質問です。
【】の中に文字が入っています。文字の数は不明です。
この【からはじまり】で終わるものをすべて引っ張り出して別のシートに集約したいです。
【】で始まる行のほかに要らない情報が羅列されている行もシートの中に散在しています。
アドバイスよろしくお願いいたします。

●質問者: clinejp
●カテゴリ:コンピュータ
✍キーワード:アドバイス エクセル 文字列
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● cxj02436
●10ポイント

http://www.29/

実務の現場からご提案すると

やたら複雑にすることもないと思いますので、


関数やマクロなど使わない、単純で一番簡単な方法は、置き換え処理をすることです。


これだと直感的でわかりやすいしミスが少ないのが長所です


具体的な手順としては


1:データセル全体を選択して(ctrl+A)


2:置き換え文字列の検索と置き換え(ctrl+H)

”【” の次に ”】” と2回の手間で処理できます。


以上


2 ● soorce
●25ポイント

http://www.hatena.ne.jp/1121481836

人力検索はてな - エクセルの文字列処理の質問です。 【】の中に文字が入っています。文字の数は不明です。 この【からはじまり】で終わるものをすべて引っ張り出して別のシートに集約したい..

URLはダミーです。


該当列の先頭をクリックし、

メニューのデータ>フィルタ>オートフィルタ

を選択します。


次に、「オプション」で

上の条件ボックスに「【」、右のダウンリストで「で始まる」

を選択。


and,or

でandを選び、


下の条件設定で同様に「】」で終わるを選びます。


これで条件にあったものだけが表示されますので、ドラッグして選択し、別のシートにでもコピーしてください。

◎質問者からの返答

こんな方法があったとは!

ありがとうございます。


3 ● ku__ra__ge
●25ポイント

http://www.google.ne.jp/

Google

Excelを起動したら、Alt+F11でVBEを表示させ、挿入→標準モジュールで、標準モジュールを追加して、以下のマクロコピー&ペーストしてください。

次に、カーソルを「Sub 文字列検索()」の行に置いて、F5キーを押してください。


あとは、集約先のシート名を指定すれば、括弧内の文字がすべて、指定したシートに集約されます。


Dim sOUTPUT_SHEET_NAME As String


Sub 文字列検索()

Dim nShtIdx As Integer

sOUTPUT_SHEET_NAME = InputBox(”検索結果出力シート名を入力してください”)

If sOUTPUT_SHEET_NAME = ”” Then Exit Sub

Worksheets(sOUTPUT_SHEET_NAME).Activate

Worksheets(sOUTPUT_SHEET_NAME).Range(”A1”).Select

For nShtIdx = 1 To Worksheets.Count

If Worksheets(nShtIdx).Name = sOUTPUT_SHEET_NAME Then GoTo Continue

Dim oFindRange As Range

Dim sFstAddress As String

Set oFindRange = Worksheets(nShtIdx).Cells.Find(”【”)

If oFindRange Is Nothing Then GoTo Continue

sFstAddress = oFindRange.Address

Do Until oFindRange Is Nothing

Dim nStrIdx As Integer

Dim bKakkoFlg As Boolean

Dim nKakkoIdx As Integer

For nStrIdx = 1 To Len(oFindRange.Text)

If Mid(oFindRange.Text, nStrIdx, 1) = ”【” Then bKakkoFlg = True: nKakkoIdx = nStrIdx

If Mid(oFindRange.Text, nStrIdx, 1) = ”】” And bKakkoFlg Then

Call OutStr(nShtIdx, oFindRange.Address, Mid(oFindRange.Text, nKakkoIdx + 1, nStrIdx - (nKakkoIdx + 1)))

End If

Next

Debug.Print oFindRange; ”,”;

Set oFindRange = Worksheets(nShtIdx).Cells.FindNext(oFindRange)

If oFindRange Is Nothing Then Exit Do

If sFstAddress = oFindRange.Address Then Exit Do

Loop

Continue:

Next

Worksheets(sOUTPUT_SHEET_NAME).Select

End Sub


Sub OutStr(nSheetIdx, sAdrs, sOutText)

Selection.Offset(0, 0).Value = Worksheets(nSheetIdx).Name

Selection.Offset(0, 1).Value = sAdrs

Selection.Offset(0, 2).Value = sOutText

Selection.Offset(1, 0).Select

End Sub

関連質問


●質問をもっと探す●



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