• ベストアンサー

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 皆様のお知恵を拝借できますでしょうか。 どうぞ宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • daizu808
  • ベストアンサー率24% (29/118)
回答No.2

すみません 質問からズレて関数未使用ですが オートフィルタを使い、列Bで「-B」で終わる を選ぶ できた表をコピーして並び替え  

momowanwan
質問者

お礼

早速お答えいただき有難うございました。 オートフィルタ機能は初めて知りました。 関数無しでも出来るんですね!

その他の回答 (5)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.6

A No.5です。 アルキメデスではないですが、風呂に入っていて気がつきました。今回の事例では、作業列は不要ですね。結局A No.2の方の回答をオートフィルター→フィルターオプションに変えただけですね。フィルターオプションの方が、準備は面倒ですが、より複雑な条件での抽出には向いています。ご参考まで。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

列見出しを設定し、作業列を設けて、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

momowanwan
質問者

お礼

早速お答えいただき有難うございました。 VBAは当方にとってこれから勉強しなければいけない分野ですが、 参考になりました。

  • Rin-u_u
  • ベストアンサー率35% (6/17)
回答No.4

ちなみに・・・蛇足ですが =IF(COUNTIF(B5,"*"&{"-A"}),1,IF(COUNTIF(B5,"*"&{"-B"}),2,0)) としておけば、 -Aのときは1を返し、-Bのときは2を返すので (それ以外は0) 種別ごとにデータの抽出がしやすくなります。

  • Rin-u_u
  • ベストアンサー率35% (6/17)
回答No.3

D列を作業列とし、 =COUNTIF(B1,"*"&{"-B"}) D列に1が入っているものをオートフィルタへ抽出 別の場所【結果】シート へ、コピーしてB列基準に並び替え。

momowanwan
質問者

お礼

早速お答えいただき有難うございました。 オートフィルタ機能は初めて知りました。 参考にさせていただきます!

  • mkoed
  • ベストアンサー率37% (32/86)
回答No.1

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行を並べ替える。 はどうでしょうか。

momowanwan
質問者

お礼

早速お答えいただき有難うございました。 参考にさせていただきます。

関連するQ&A

専門家に質問してみよう