プロが教えるわが家の防犯対策術!

皆様はじめまして。関数初心者です。
以下の処理を行うには、どのような関数を用いれば良いでしょうか。

【例】
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

皆様のお知恵を拝借できますでしょうか。
どうぞ宜しくお願いいたします。

A 回答 (6件)

すみません 質問からズレて関数未使用ですが


オートフィルタを使い、列Bで「-B」で終わる を選ぶ
できた表をコピーして並び替え

 
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/09 20:53

A No.5です。


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

列見出しを設定し、作業列を設けて、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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/09 20:55

ちなみに・・・蛇足ですが


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

D列を作業列とし、


=COUNTIF(B1,"*"&{"-B"})
D列に1が入っているものをオートフィルタへ抽出

別の場所【結果】シート へ、コピーしてB列基準に並び替え。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/09 20:54

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行を並べ替える。

はどうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/07/09 20:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!