エクセルの文字列処理の質問です。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:cxj02436 No.1

回答回数144ベストアンサー獲得回数0

ポイント10pt

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

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


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


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


具体的な手順としては


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


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

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


以上

 

id:soorce No.2

回答回数46ベストアンサー獲得回数2

ポイント25pt

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

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

URLはダミーです。


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

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

を選択します。


次に、「オプション」で

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

を選択。


and,or

でandを選び、


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


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

id:clinejp

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

ありがとうございます。

2005/07/16 14:21:39
id:ku__ra__ge No.3

回答回数118ベストアンサー獲得回数40

ポイント25pt

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

コメントはまだありません

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

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

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

回答リクエストを送信したユーザーはいません