- ベストアンサー
エクセルで該当する選択肢に○をつける
ある官公庁に提出する許認可関連の書類なのですが、普通にパソコンで自動化するなら入力候補リストを表示させて番号などで選択させ該当する項目を表示・印字させることになると思うのですが、候補となる項目をすべて列記して該当する項目に○をつける形でしかダメだという話になりました。(手書き族滅ぶべし!) たとえば「東京・名古屋・大阪・広島・福岡」と候補となる要素をすべて列記した上で該当するものを○で囲まなくてはダメだというのです。このような選択肢が50カ所くらいあるのでオートシェイプを使って図形をつくる過程をマクロで記録してショートカットキーで実行させるのもむしろ面倒です。 どのように解決したらよいものでしょうか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
質問の書類の状況が、はっきりつかめないのですが、多分VBAで対処せねばならないケースではないかと思います。 C列のセルにに「東京・名古屋・大阪・・」が入っている。 セルの書式は、配置・横位置・中央揃えにしておく。 Sheet1のシートモジュール(VBEのVBAProjectのSheet1をクリックして出てくる画面)に下記を貼り付ける。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo p1 Dim x As Range If Target.Column = 2 Then 'B列 Application.EnableEvents = False Set x = Target.Offset(0, 1) t = x.Top: t = t + x.Height / 10 l = x.Left: l = l + x.Width / 5 h = x.Height * 0.8 w = x.Width * 0.7 ActiveSheet.Shapes.AddShape(msoShapeOval, l, t, w, h).Select Selection.ShapeRange.Fill.Transparency = 0# Selection.ShapeRange.Fill.Visible = msoFalse p1: Application.EnableEvents = True End If End Sub B列をクリックすると、同行C列の地名に丸がつく。 通常操作では問題がないと思うが、DELキーや、色々のキーを押しまくるとStopするかもしれない。それらのことを知って少人数で使うなら、使えるでしょう。 テスト後などに、図形を全て消すときは Sub test02() ActiveSheet.DrawingObjects.Delete End Sub を実行すれば消えます。 なおB列に地名を入れて、B列のクリックで、B列地名に丸を囲むのは、コードを少し変えれば変えられます。
その他の回答 (5)
- banker_U
- ベストアンサー率21% (17/78)
こんにちは 解釈ですが、「書類を作る都度、50個ぐらいの選択肢のひとつ(ないし複数)に、○をつけなければならない。」と言うことですよね。 で、「オートシェイプの楕円を書く作業を自動記録でマクロ化しようと思ったが、50種類のマクロを作らなければいけないので面倒」 と言うことですよね。 わたしも同じような事態になったことがあります。といっても選択肢は10個ぐらいでしたが・・・ そのときの私の解決方法は以下です。ご参考まで。 一言で言うと、オートシェイプの表示非表示(線のあるなし)を切り替える方法です。 1.とりあえず1回は手作業で全部50個の丸を描く。 書いた丸は、書式設定で全部「線なし」にしておく。 2.入力シートの方には、50個のチェックボックスを作っておく。 3.任意のチェックボックスをチェックしたときに、対応するマクロの線の色を黒にするマクロを組む (当然はずしたときはまた「線なし」に戻す)。 あくまで概略だけですので、わからなければまた質問してみてください。
お礼
実はチェックした項目に数字が付随するもので変数を扱える本格的なVBAでないと実現できないようです。ご回答いただいた内容はたいへん参考になりました。ありがとうございました。
状況がよく読めてないのですが、とりあえず、 オートシェイプで○を一つつくって 後はコピー(Ctrl+C) と 貼り付け(Ctrl+V) の 繰り返しでいいのではないでしょうか?
お礼
私が書類を作るならどうでもなるのですが、リテラシーの低い(私も高いとは言えませんが)他人に作成作業をしてもらうとなると、画面のインターフェイス一つをとってもたいへんです。ご回答ありがとうございました。
- ASIMOV
- ベストアンサー率41% (982/2351)
>手書き族滅ぶべし! 同感です(^_^;) 私も、同じような物を作りました ○で囲む箇所は十数か所でしたが、文字入力でも、つい忘れそうになる箇所なども有ったので、すべての入力を、ユーザーフォームからするようにしました 官庁の書式の限ったことでは有りませんが、項目はいっぱい有るけど、書かなきゃならに所と、書かなくても良い所が、飛び飛びに有るので、つい忘れる事が有るのです すべての入力項目をユーザーフォームにまとめる事で、入力漏れが防げます ○で囲む部分は、フォーム上にチェックボックス、オプションボックス、コンボボックスを、内容に合わせて配置し、選択した項目の場所にオートシェイプで書き込むようにしました 確かに面倒な作業ですが、最初の1個が出来れば後は繰り返しです
お礼
私が書類を作るならどうでもなるのですが、パソコンなどさわったこともないパートのおばさんたちの作業を想定してくれ、というお話で、なるべくメニューから番号を指定するとかの単純な入力の形にしなくてはならなかったのです。必要なセルにマウスオーバーで入力フォームが現れる形にしたかったのですが、すべて印刷書式とは関係のないユーザーフォームをつくって入力漏れがない限り最期に印刷ボタンを押せば必要な書式で出力される形にしました。まだ調整が必要ですがご回答のおかげでなんとか完成しそうです。ありがとうございました。
- rabbit_cat
- ベストアンサー率40% (829/2062)
マクロで、オートシェイプを作って、それを、目的のセルの位置に移動させればよいのでは。 cells("A1").Left cells("A1").Top とかで、セルの位置がわかります。
お礼
オートシェイプのマクロを生成させてコードを作って組み込んでみました。時間はかかりましたがかなり勉強になりました。ありがとうございました。
=if(a1="東京"、○、"")なんて簡単な話ではないんですか。
お礼
ご回答いただきありがとうございます。実は一つのセルに「東京・大阪・名古屋・広島」などとなっており2段3列で表現してあります。セルの設定で「折り返して表示」にチェックを入れてあり、選択肢のどれかに○をつけなくてはいけません。担当者によると選択肢として許されている要素はどれとどれか、ということが表示できるのでその方式は崩したくないそうです。
お礼
VBAのコードをしこしこと書いてみたのですが、おかげでうまくいきそうです。当初スパゲッティだったコードが讃岐うどんくらいには、なれたと思います。細部について質問するかもしれませんが、よかったらご教授下さい。今回はありがとうございました。