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

現在シート1にはデータベースの表があり行ごとに各管理項目が並んでおります。
各管理項目の頭にリンクさせたチェックボックスと【チェックした順番セル】を挿入し、文字通りチェックボックスにチェックをつけた順番が1から順に表示されるようにしたいのですが関数またはvbaで対応できるものはありますでしょうか?

エクセル2013を使用しています。
アドバイス頂ければありがたいです。よろしくお願いします。

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

  • ご回答ありがとうございます
    データベースのシート1と印刷シート2があり印刷シートはHLOOKUPでシート1の情報を反映させています。
    データベースの頭の番号を参照して連続印刷のマクロを組んでいるのですが、チェックボックスにチェックした順で印刷できたら楽なため質問させていただきました。
    なんとかカウントアップの方法ないものでしょうか

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/01/08 20:56
  • ご回答ありがとうございます
    データベースのシート1と印刷シート2があり印刷シートはHLOOKUPでシート1の情報を反映させています。
    データベースの頭の番号を参照して連続印刷のマクロを組んでいるのですが、チェックボックスにチェックした順で印刷できたら楽なため質問させていただきました。
    なんとかカウントアップの方法ないものでしょうか

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/01/08 20:57

A 回答 (4件)

シート データベースのA列に


チェックを入れた番号があるとして

別シートに
 A  B
 1
 2
 3
・・・
と連番を入れた列を準備
B列には
=Index(データベース!B:B,Match(A2,データベース!A:A))
みたいにして関数で順番に探し出す。
この回答への補足あり
    • good
    • 0

もう1回クリックしてチェックを外したらどうするの?



質問のようにリストの順番指定するのに向いたユーザーインターフェースではないのでは。


Excelだとリボンを右クリック、「リボンのユーザー設定」みたいな、リストボックスとチェックボックス、項目を「上へ」「下へ」変更するボタンなんか使うのが一般的です。

OE でメールの表示項目を設定 - パソコントラブルQ&A
http://www.724685.com/weekly/qa050622.htm
この回答への補足あり
    • good
    • 0

> なんとかカウントアップの方法ないものでしょうか



初期値1で、最後に入力した順番をどこかのセルに記録しといて、その値を加算して更新とか。
印刷順序の番号振られてる範囲での最大値を持ってきて、チェックされた行に最大値+1を追加していくとか。
で、出来なくは無いと思います。


が、
チェックしたけど間違えたのでチェック外したらどうするの?
よく見たら1番目を抜かしてたら、全部チェック外して再度チェックしなきゃならない?
とかって操作性を考慮すると、使いにくいです。
なので、一般的には例に出したようなインターフェースが利用されます。
    • good
    • 2

こんにちは



簡単に作成してみようと思ったら、前段階がちょっとやっかいでした。

チェックボックスをリンクさせたセルの変更はシートのイベントで取得できないようなので、チェックボックスのクリックを個々に取得する必要があるようです。
処理そのものは共通のコードで可能なのですが、入り口をチェックボックスの数だけ作成しなければならないので
 Sub チェック1_Click()
  call checkbox_click(2)
 End Sub
のようにして、対象行等を引数にして共通処理のマクロを呼び出せば良いことになります。
一方で、チェックボックスの数だけイベント処理のコードが必要になるので、数が大量にある場合には面倒そうに思います。

他の方法として、一定時間ごとにチェックして変化の有無を調べるというのもないことはないですが、無駄な処理が多くなるので、あまり良い方法とは思えません。
勝手ながら少し内容を変えて、行のダブルクリックで、似たような機能になるようにしてみましたので、ご参考まで。

A列にチェックボックスが並んでいるとして、B列にクリックした順序が数字で表示されるものと仮定しています。
添付図のA列はチェックボックスのように見えますが、実はただの枠線表示あるだけで、チェックマークはセルへ文字列”✔”をマクロから記入することで、チェックボックス的な動作を実現しています。
(面倒でないなら、上記で示したチェックボックス+マクロの方法でもきちんとできます)
テストのために、たくさんのイベント処理を記したくなかったので、この方式でテストしました。

シートのイベント処理に・・・
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim rng As Range
Dim i As Long, rw As Long

If Target.Column = 1 Then

 Set rng = Range("B:B")

 If Target.Value = "" Then
  Target.Value = WorksheetFunction.Unichar(10004)
  Target.Offset(0, 1).Value = WorksheetFunction.Count(rng) + 1
 Else
  Target.Value = ""
  Target.Offset(0, 1).Value = ""
  For i = 1 To WorksheetFunction.Count(rng)
   rw = WorksheetFunction.Match(WorksheetFunction.Small(rng, i), rng, 0)
   Cells(rw, 2).Value = i
  Next i
 End If

 Cancel = True
End If

End Sub

として試してみました。
ただし、Unichar(10004)は✔の文字を表していますが、環境依存文字なので適切なものに変える必要があるでしょう。

他の方の指摘にあるようにチェックを外した際に連番でなくなる可能性があるので、外した場合は詰めて再度附番するようにしてあります。
ただし、番号の間に後から割り込ませたい場合には、少々操作テクニックが必要になってきます。
(「少数点以下の数字で一旦指定しておいて、空いているところをチェック→チェックを外す」ことで連番に変更されることを利用して割り込ませることが可能です)

※ 質問者様の実際の環境やセルの位置関係もわかりませんので、ご参考にでもなれば…
「チェックボックスをクリックした順にカウン」の回答画像4
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています