- ベストアンサー
Excel関数 指定文字を抽出し、昇順に並び替えをしたいのですが
皆様はじめまして。関数初心者です。 以下の処理を行うには、どのような関数を用いれば良いでしょうか。 【例】 A B C 1 書名1 1111 1000 2 書名2 1111-A 1200 3 書名3 1111-B 1200 4 書名4 1112 1300 5 書名5 1112-A 1500 6 書名6 1112-B 1500 列Bの中から、-Bのデータを抜き出し、更にBを基準に昇順並び替え 【結果】 A B C 3 書名3 1111-B 1200 6 書名6 1112-B 1500 皆様のお知恵を拝借できますでしょうか。 どうぞ宜しくお願いいたします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
すみません 質問からズレて関数未使用ですが オートフィルタを使い、列Bで「-B」で終わる を選ぶ できた表をコピーして並び替え
その他の回答 (5)
- mitarashi
- ベストアンサー率59% (574/965)
A No.5です。 アルキメデスではないですが、風呂に入っていて気がつきました。今回の事例では、作業列は不要ですね。結局A No.2の方の回答をオートフィルター→フィルターオプションに変えただけですね。フィルターオプションの方が、準備は面倒ですが、より複雑な条件での抽出には向いています。ご参考まで。
- mitarashi
- ベストアンサー率59% (574/965)
列見出しを設定し、作業列を設けて、B列の数値を取り出し、フィルタオプションで、B列に文字Bが入っているものだけを抽出して別の場所に出力し、抽出先で作業列の値で並び替えといったところでしょうか。 番外編で、物好きにしか分からない?VBAコードです。列見出しが入っていない事を前提にしています。結果をF1以下に出力します。 Sub test() Dim i As Long Dim targetRange As Range Dim targetRow As Range Dim destRange As Range Dim rs As Object Const adBSTR As Long = 8 Const adInteger As Long = 3 Const adOpenStatic As Long = 3 Const adLockOptimistic As Long = 3 Const adUseClient As Long = 3 Set rs = CreateObject("ADODB.Recordset") Set targetRange = ActiveSheet.Range("a1").CurrentRegion Set destRange = ActiveSheet.Range("f1") With rs .CursorLocation = adUseClient .fields.Append "field0", adBSTR, 20 .fields.Append "field1", adBSTR, 50 .fields.Append "field2", adInteger .fields.Append "field3", adInteger .CursorType = adOpenStatic .LockType = adLockOptimistic .Open End With With rs For Each targetRow In targetRange.Rows .AddNew For i = 1 To targetRow.Columns.Count .fields(i - 1).Value = targetRow.Cells(i).Value Next i .fields(targetRow.Columns.Count).Value = Val(targetRow.Cells(2).value) .Update Next End With rs.MoveFirst rs.Filter = "field1 like '*B*'" rs.Sort = "field3 ASC" Do While Not rs.EOF For i = 0 To targetRange.Columns.Count - 1 destRange.Offset(0, i).Value = rs.fields(i) Next i rs.MoveNext Set destRange = destRange.Offset(1, 0) Loop Set rs = Nothing End Sub
お礼
早速お答えいただき有難うございました。 VBAは当方にとってこれから勉強しなければいけない分野ですが、 参考になりました。
- Rin-u_u
- ベストアンサー率35% (6/17)
ちなみに・・・蛇足ですが =IF(COUNTIF(B5,"*"&{"-A"}),1,IF(COUNTIF(B5,"*"&{"-B"}),2,0)) としておけば、 -Aのときは1を返し、-Bのときは2を返すので (それ以外は0) 種別ごとにデータの抽出がしやすくなります。
- Rin-u_u
- ベストアンサー率35% (6/17)
D列を作業列とし、 =COUNTIF(B1,"*"&{"-B"}) D列に1が入っているものをオートフィルタへ抽出 別の場所【結果】シート へ、コピーしてB列基準に並び替え。
お礼
早速お答えいただき有難うございました。 オートフィルタ機能は初めて知りました。 参考にさせていただきます!
- mkoed
- ベストアンサー率37% (32/86)
DEFに以下のような感じで入れてって、 D E F 1 =IF(COUNTIF(B1,"*-B*"),A1,"") =IF(COUNTIF(B1,"*-B*"),B1,"") =IF(COUNTIF(B1,"*-B*"),C1,"") 2 =IF(COUNTIF(B2,"*-B*"),A2,"") =IF(COUNTIF(B2,"*-B*"),B2,"") =IF(COUNTIF(B2,"*-B*"),C2,"") 3 4 関数ではないですが「データ」-「ソート」でDEF行を並べ替える。 はどうでしょうか。
お礼
早速お答えいただき有難うございました。 参考にさせていただきます。
お礼
早速お答えいただき有難うございました。 オートフィルタ機能は初めて知りました。 関数無しでも出来るんですね!