• 締切済み

エクセルVBA 教えてください

VBA初心者です。 現在エクセルで書類作成のテンプレート原本を作成しています。 その中に 1.携帯電話 2.ポケットベル 3.固定電話 4.その他 というように複数の中から選択する項目があります。リストボックスでとも考えていたのですが、選ばれていない項目も表示しておきたいので、数字にオートシェイプで丸を付けてもらおうと思っています。 そこで質問なのですが、この書式テンプレートを入力する際には入力フォームを呼び出します。そのフォーム内で □1.携帯電話 □2.ポケットベル □3.固定電話 □4.その他 のように複数選択可能なチェックボックス形式の入力欄を作成します。入力フォームの全ての項目が入力され、実行ボタンを押したのち、チェックの入れられた数字の上にのみオートシェイプで丸が入ることは可能でしょうか? 何分VBAの素人なので、何を書いている部分なのか等をわかりやすく教えてくれると幸いです。 よろしくお願いします。

みんなの回答

回答No.7

なるほど、状況はなんとなく理解しました。 フォームの件、丸を付ける件、実際にそんなに難しい話ではありません。 ※少しでもVBAを弄ったことがあるなら、ですが。 でも、設問が多ければ多いほど、やはりソコソコの手間がかかります。 ゼロから作り上げるとなると、それはもはや http://www.lancers.jp/work/search/system/vba このようなところに頼んでもいいレベルです。 コレを商売にしている方がいる限り、 フリーのQAサイトでそれをおいそれと作って差し上げるわけにはいかない、 ということをご理解ください。 さて。 ご自身で「手順」を書き込んでいらっしゃるのですから、 あとはその通りに(勉強なさりながら)組み上げていくだけなのですが・・ 比較的簡単に、まず、テストの準備からいきましょう。 ワークシートに楕円を描いておきます。 楕円を選択した状態でVBEを開き、イミディエイトウィンドウに   selection.name="Q1_1" と入力し、Enterを押します。 これで、この楕円の名前が「Q1_1」と設定されました。 続けてイミディエイトウィンドウに   activesheet.shapes.range(array("Q1_1")).visible=false と入力してEnterキーを押すと、あら不思議、楕円が消えました。 もう一度、イミディエイトウィンドウに   activesheet.shapes.range(array("Q1_1")).visible=true と入力、Enterキーを押すと、楕円が復活します。 つまり、そんな感じです。 コレをチェックボックスの動きに連動させる文を書きます。   もし、チェックボックス1にチェックが入ったら   楕円を「見せる」   チェックボックス1のチェックが入っていなかったら   楕円を「消す」 こんな文ですね。 ごく簡単に説明すると、こんな感じです。 組み上げた後にはメンテナンスが発生します。 頑張って会得してくださいませ。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.6

#3です。 以下は、小生が、相当何でもできる者で、言っているのではなく、常識的なことを言っているだけ。 ーー 質問には既成の「公文書」に選択のため、丸を入れると書いてなかったように思う。 エクセルしか多少の経験がないのかもしれないが、「何でもエクセル」はおかしい。 用途にあったソフトを、まず自分で作るのでなく、探すべきだ。 https://download.goo.ne.jp/software/category/win/writing/print/ あたりに使えるソフトがないかな。 (オフィスにはVBAを使える余地があるが、一般に既成(市販、フリー)ソフトは、出来上がった機能以外に、改造する方法はない(法的、契約的にも)と思うこと。) 無ければ、自分で作らなければならないが、今では、目的の内容も進んで、複雑化し、内容や作るソフトのための前提知識も必要で、一朝一夕の勉強ではできず、一般的に、素人にはおいそれと作れるものではなくなっている。 フリーのソフトが見つからず、市販ソフトを買うお金が無く、自分で作れなければ、部下でもやれる人がいなければ、今まで通りの方法で処理する、のは人生や会社の鉄則ではないですか。社長や上司にでもいわれたのなら、できませんというしかない。あなた質問者もSEなどの資格で就職したのではないでしょう。 WordのVBAで、決まった書類(サイズはA4以下などに限る)の好みの位置に図形の「円」を書き込み、その既成の公的書類に印刷することはできるかもしれないが、むつかしく思う点がある。先日既成の自社作成の印刷済み書類の定位置に連続番号を入れる質問があり、提案したが。

回答No.5

うーん、伝えると言うのは難しい事ですね。 問題は「意味があるのか」と言うことなのです。 チェックを入れたら丸がつく。 と言うのは、選択肢に二つの印をつけると言うことですね。 そこに何か意味があるのでしょうか。 チェックを入れたら太字になる、斜体になる。 つまり、見た目に強調させるなら意味を見出だせないことはないですが。 おそらく、かなり軽く考えていらっしゃるのでしょうが、 それなりにダラダラと長くなる処理ですよ。 選択されたら丸をつける、選択されていないものは丸を消す。 選択し直す人もいるでしょうから。 それを設問の数だけ繰り返す、無駄に長い処理文になるでしょうから、 やはり安易に賛成は出来ないところです。 どうしても、というなら、 If・Shapes・Visible、あるいはSelect Caseなどを 少し調べてみると解決の糸口が見えるかもしれません。 次善の策として、もう一つ代案。 チェックボックスもセルに関連付けることは可能です。 同様に関連付けたセルに、TRUEかFALSEを返します。 これを使って、例えばB3セルに関連付けたとして、 =IF(B3=TRUE,"(1)","1") これなら簡単でしょう。

NSrai
質問者

お礼

何度もお答えいただき本当にありがとうございます!本当に時間を割いてしまって申し訳ないです。 説明下手で申し訳ありません。 実は、とある決まっている公文書を今までは手書きで記載していました。その公文書の中に箇条書きで1~4までの記号が打たれており、数字に丸を付けて回答という項目があります。 今後手書きではなく、パソコン入力で書類作成を行うという方向性が決まり、同じ書式をエクセルで作成しました。自分的には〇のオートシェイプを複数設置した状態にしておいて不要な〇に関しては削除してもらう。という方法をとろうとしたのですが、使うスタッフが削除の仕方がわからずそのまま印刷するということを行っています。そこでもっと簡易化できないかなぁと考えている次第です。 その中で、箇条書きになっている項目の横にフォーム呼び出しのマクロが埋め込んであるボタンを設置します。そのボタンを押すと入力フォームが開き、そのフォームには1~4の箇条書きチェックボックスと入力完了ボタンが設置されています。例えば1と3にチェックを入れ、入力完了ボタンを押すとフォームを閉じてシートに書かれている箇条書きの数字のところに〇を付けたいのです。これができれば使用する人の操作も簡易化できるかなと考えています。 この動きをVBAで書くとどうなるのか全く想像ができない素人が作成結果だけを希望し質問しています。無知なまま質問していることをご理解いただけると幸いです。 >If・Shapes・Visible、あるいはSelect Caseなどを少し調べてみると解決の糸口が見えるかもしれません。 ヒントを下さりありがとうございます!自分でも調べてみます! 本当にありがとうございます。

  • FEX2053
  • ベストアンサー率37% (7995/21380)
回答No.4

何かを選んでからボタンを押してマクロを動かすなら、 Selection.Value で「カーソルのある位置のデータを得る」ことができますよ。 例えば、「カーソルのある位置のデータを選んでA1セルに 書き出す」だけなら Data_1 = Selection.Value Cells(1,1).value = Data_1 とか Selection.copy Range("A1") とか、いろいろ考えられます。

NSrai
質問者

お礼

ご回答ありがとうございます。 現在、フォーム内のテキストボックスに書かれたものをシートセル内に貼り付けることはできていますが、なにかのヒントをいただいたのでSelection.Valueを少し自分でも勉強し深めていきたいと思います。 ご回答ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

初心者であれば、あまり仕組みやGUIに凝らない方がよい。 やりたいこと(かっこよい)や、今まで(他のソフトで)見たことのある気に入った仕組みなどは、勉強してからにして。 ーー 入力規則とユーザーフォームにコントロールを張り付ける、イベントを利用する(例。ボタンを押す)などの勉強をすべきで、当面そこらあたりで止めておくべきかと。 >チェックの入れられた数字の上にのみオートシェイプで丸が入ることは可能でしょうか? 可能でしょうが、データとして扱いにくい。図形とシートのセルの関係なども勉強をしてないでしょう。 セルの値がどう入っているかを問題にしてデータとすべきでしょう。 文字に丸があるかないかで選択したことを判定するようなことは複雑なだけ。 あくまでセルの値がどうなっているかで、選択したかどうかを判定すべきでしょう。 ベテランなら、できるとしても、回答者にコードまでを書かせて、コピペしてでは情けないと思うが。

NSrai
質問者

お礼

ご回答ありがとうございます。おっしゃられる通り自分には難題であってVBA初心者なので、無駄に凝っていると認識していますし、コードまで書いていただくのは申し訳ないと思いながらも期限がある仕事なので甘えて投稿させていただいている次第です。 入力規則等を使ったりすれば簡単にできるので、ここでは質問をしないのですが、現在作成しているの書式が公文書であり、従来は手書きをしているものであるため記号に丸を付ける等限られた記入ルールがあって今回の質問に至った次第です。 今まで手書きであったものをパソコン入力ができるようにテンプレート作成してほしいと依頼があり、テンプレート作成が完了した後に使用するスタッフの中にパソコン操作に不慣れな方もいるため、オートシェイプを使う操作等ができないスタッフも存在します。そのためできるだけ簡素化したく思っています。おっしゃられる通りVBA初心者がこだわる必要はないのですが・・・。 >セルの値がどう入っているかを問題にしてデータとすべきでしょう。 文字に丸があるかないかで選択したことを判定するようなことは複雑なだけ。 先述したように、テンプレートを使用し作成したものを印刷して提出するだけの目的なので、文字に丸があるかないかだけで構いません。 >ベテランなら、できるとしても、回答者にコードまでを書かせて、コピペしてでは情けないと思うが。 不勉強・無知は承知の上で質問させていただいております。OKWEBはそういう場所だと思っておりますので。 これだけ言われるのですからきっとimogasiさんは上級者ですよね…。そんな上級者の方からご指導いただけないのが残念です。 ご回答ありがとうございました。

回答No.2

失礼しました。 リストボックスで複数選択しようと思うとVBAが必要です。 とだけ補足です。

回答No.1

> VBA初心者です。 とのことですから、開発タブはもう表示されていると判断して。 ご質問文を読んでみて、お望みの処理 > 複数の中から選択する > 選ばれていない項目も表示しておきたい だけに絞るのであればVBAは必要ないかもです。 開発タブの挿入から、リストボックスやオプションボタンでいけます。 リストボックスならとりあえず作って右クリック→書式設定で  入力範囲:リストがある範囲  リンクするセル:選択結果を表示したいセル に設定してやるとOKです。 オプションボタンならとりあえず幾つか作って、同じく書式設定で  リンクするセル:選択結果を表示したいセル に設定します。 複数選択可能にしたいならリストボックスが便利です。 おそらく使い方は感覚で理解可能と思いますよ。 詳細はWeb検索すると色々見つかりますのでとりあえず割愛。 お試しくださいませ。

NSrai
質問者

お礼

ご回答ありがとうございます。ご丁寧に2回も投稿いただき感謝しております。 自分の質問の表現が曖昧だったので申し訳ないですが、今回はどうしても数字・記号に〇が入って見えるように印刷したいのでご教授いただいた内容はほかの業務の際に使用させていただきます。 ご丁寧なご回答ありがとうございました!感謝いたします。

関連するQ&A