【】の中に文字が入っています。文字の数は不明です。
この【からはじまり】で終わるものをすべて引っ張り出して別のシートに集約したいです。
【】で始まる行のほかに要らない情報が羅列されている行もシートの中に散在しています。
アドバイスよろしくお願いいたします。
実務の現場からご提案すると
やたら複雑にすることもないと思いますので、
関数やマクロなど使わない、単純で一番簡単な方法は、置き換え処理をすることです。
これだと直感的でわかりやすいしミスが少ないのが長所です
具体的な手順としては
1:データセル全体を選択して(ctrl+A)
2:置き換え文字列の検索と置き換え(ctrl+H)
”【” の次に ”】” と2回の手間で処理できます。
以上
http://www.hatena.ne.jp/1121481836
人力検索はてな - エクセルの文字列処理の質問です。 【】の中に文字が入っています。文字の数は不明です。 この【からはじまり】で終わるものをすべて引っ張り出して別のシートに集約したい..
URLはダミーです。
該当列の先頭をクリックし、
メニューのデータ>フィルタ>オートフィルタ
を選択します。
次に、「オプション」で
上の条件ボックスに「【」、右のダウンリストで「で始まる」
を選択。
and,or
でandを選び、
下の条件設定で同様に「】」で終わるを選びます。
これで条件にあったものだけが表示されますので、ドラッグして選択し、別のシートにでもコピーしてください。
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
こんな方法があったとは!
ありがとうございます。