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

仕事で、あるデータをまとめているのですが、
たくさんのデータの中で該当する条件があった(条件物にチェックを入れた)場合に、上に寄せるという方法をとりたいと考えています。また、そのチェックはいくつかあります。その場合、多ければ多い程どんどん上にいくような感じにしたいと考えています。

その方法を昨日から探しているのですが、なかなか見つからず・・・。
マクロ?を使うしかないでしょうか?その場合、どういったものになるか教えて頂けると幸いです。
また参考になるものがあれば教えていただけますでしょうか?

[補足]フィルターですと、条件に当てはまらないものは消えてしまい見れなくなるので個人的には微妙だと考えています。

使用ソフトのバーションは2013です。
大変そうな内容かと思いますが、親切な方いらっしゃいましたら是非教えてくださいますようよろしくお願いいたします。

「[EXCEL]チェックボックスにレ点が入」の質問画像

質問者からの補足コメント

  • すみません、1つ補足します。
    ○と×のところについてですが、表示上ではそうなっていますが、
    内部的には 1→○ 0→× となるようにデータの入力規則でルールを設定してあります。

      補足日時:2016/09/10 12:19
  • なるほど…ありがとうございます。
    できればチェックボックスの方が、初めて見た人からしてわかりやすいと考えているのですが、
    その方法は難しいでしょうか?

    一応始めに出した画像では、文字色を白にしていたため見せておりませんでしたが、
    2行目(あとで設置する行は変えます)に、チェックボックスにチェックが入ると
    FALSEからTRUEになります。
    これをママチャリさんが出している、チェックを入れると黄色い枠に1が出るという感じのように
    設定する方法ってわかりますでしょうか?
    度々申し訳ありませんが、ご教示くださると幸いです。

    「[EXCEL]チェックボックスにレ点が入」の補足画像2
    No.1の回答に寄せられた補足コメントです。 補足日時:2016/09/10 18:44

A 回答 (3件)

No.1 ママチャリです。


最初から言っていただければ話が早かったのに・・・。桧山さんを甘く見ていました(すいません)。

G3セルの式を次のように変えて、Cntl+Shift+Enterで配列数式にしてください。
【G3セル】=SUM($B$1:$F$1*B3:F3)

さらに、該当SheetオブジェクトのWorksheet_Calculateイベントプロシジャに次のコードを書いておけば、チェックボックスを変える度に並び替えを行うことができます。
ただし、Calculateイベントなので、何らかの再計算が行われる度に並べ替えられます。データ行の○×(0,1)を変更しても再計算が行われてしまうので、その場合は手動計算にしておいた方が良いですよ。

さらに、1行目とG列を非表示にすれば、完璧でしょう!!

Private Sub Worksheet_Calculate()
Me.Sort.SortFields.Clear
Me.Sort.SortFields.Add Key:=Range("G3"), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With Me.Sort
.SetRange Range("A2:G" & Me.Cells.SpecialCells(xlCellTypeLastCell).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
「[EXCEL]チェックボックスにレ点が入」の回答画像3
    • good
    • 1
この回答へのお礼

ありがとうございます!!!!!
やってみたら出来ました!ママチャリさん超完璧です!!!

あとは行と列の項目が結構ありますので、その辺の調整したら完成できそうです!
ベストアンサーに選ばせて頂きます!ありがとうございました!

お礼日時:2016/09/10 22:41

>[補足]フィルターですと、条件に当てはまらないものは消えてしまい見れなくなるので個人的には微妙だと考えています。



何か誤解があるようです。フィルターで、フィルターを使わずに並べ替えをしたほうが楽ではないでしようか。降順・昇順がありますから、それで並べ替えればよいです。

マクロで行うというもの吝かではありませんが、ひとつはどこまで作りこむか、また、どこまで組み込み方を理解できるかなどの不安が残ります。

フォームコントロールのチェックボックスが、きちんとセルに収まるように置きます。これについては、正確にやっていただかないと、正しく反応しません。以前、この方法に対して、別の回答者から、クレームをつけられた記憶がありますが、常識的に、フォームコントロールやオブジェクトの置く位置について、マクロを書く側が担保することは無理です。正確にセルに収まるようにやっていただくしかありません。今回は、列位置だけです。

ただ、あまり狭い幅のセルにフォームコントロールをお使いになるのは、難しいとだけは言っておきます。

>Cntl.TopLeftCell.Column '
これで、列位置が決定されます。

前回のクレームの場合のような、代案としては、cbNo = Mid(NameObj, InStrRev(NameObj, Space(1), , vbTextCompare)) を使います。しかし、こちらも、正しく、チェックボックスの名称が1~5まで入れられていることが条件です。ホームタブ-編集-検索と選択-オブジェクトの選択と表示を使って修正します。Check Box 1 など、最後尾に数字があることが条件です。どちらでもよいのですが、前者のほうが楽だと思います。

その上で、すべてチェックボックスに、このひとつのマクロを設定します。

'//標準モジュール
Sub SortMacro()
Dim Rng As Range
Dim NameObj As String
Dim Cntl As Object
Dim stFlg As Long
Dim cbNo As Long

On Error Resume Next
NameObj = Application.Caller()
If Err() <> 0 Then MsgBox "このマクロは直接動きません。", vbExclamation: Exit Sub
On Error GoTo 0
Set Cntl = ActiveSheet.CheckBoxes(NameObj)
'' チェックボックスが雑に置かれているので、正確な位置が出せない場合は、
'' このコメントアウト側を使う
' cbNo = Mid(NameObj, InStrRev(NameObj, Space(1), , vbTextCompare))
' cbNo = Val(cbNo) + 1
 cbNo = Cntl.TopLeftCell.Column '物理列
With ActiveSheet
'起点
Set Rng = .Range("A3:F11") 'データ範囲
End With
With Rng
 If Cntl.Value = xlOn Then
  stFlg = 2  '降順
 Else
  stFlg = 1  '昇順
 End If
 .Sort Key1:=ActiveSheet.Cells(3, cbNo), Order1:=stFlg, _
  Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
  Orientation:=xlTopToBottom, SortMethod:=xlPinYin
End With
End Sub
'//
添付画像は、フィルターの並べ替え機能です。
「[EXCEL]チェックボックスにレ点が入」の回答画像2
    • good
    • 0
この回答へのお礼

一応、回答頂く前にママチャリさんからの回答の中でできることがわかりました。ひとまずマクロの知識は乏しいので、ママチャリさんの方で進めさせていただいておりました。こちらの方が簡単そうと考えた上です。

現状残りの問題点としてましては、
・チェックを入れて、指定するセルに『「TUREが出た時、別のセルに1と表示する」、「FALSEが出たとき別のセルに0と表示する」やり方
・オートフィルタを、チェック入れる度に自動更新するやり方
の2点が気になっております。
前者の用途は、ママチャリさんが作られた添付画像にある1行目に結果反映させ、評価点に反映させる感じでいきたいと考えております。

こちら解決方法はご存知でしょうか?
ご存知でしたらご教授いただけますと幸いです。

お礼日時:2016/09/10 20:10

添付のような表を作ってみてはいかがでしょうか。

イメージはかなり違いますが、作るのは簡単です。
「○、×」の実際の値が「0、1」ということなので、分かりやすいように「0、1」で作っています。

1行目は、チェックボックスの代わりです。チェックしたい列に1を入力します。
2行目は見出しで、オートフィルタを掛けています。
G列は作業列で、評点を求めています。実際にはG3セルに次の式が入っていて、下にオートフィルされています。
【G3セル】=SUMPRODUCT($B$1:$F$1,B3:F3)

チェック行に入力した後、G列のオートフィルタで降順に並び替えれば、ご希望通り表示になります。
「[EXCEL]チェックボックスにレ点が入」の回答画像1
この回答への補足あり
    • good
    • 1
この回答へのお礼

すみません、教えてGooの使い方がわからず、
お礼できなくて申し訳ありません。
大変わかりやすく助かりました。
ただ気になることがあり、そちらは補足に付け加えましたので、
ご確認よろしくお願いいたします。

お礼日時:2016/09/10 20:13

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