• 締切済み

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

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

  • NSrai
  • お礼率59% (19/32)

みんなの回答

回答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/17068)
回答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% (7987/21355)
回答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/17068)
回答No.3

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

NSrai
質問者

お礼

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

回答No.2

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

回答No.1

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

NSrai
質問者

お礼

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

関連するQ&A

  • ExcelでVBAを利用してオートシェイプ情報取得

    Excelのオートシェイプをテキストデータに変化するVBAを作成したいです ただし対象となるオートシェイプは複数のオートシェイプがグループ化された グループオブジェクトになっています それら特定のパターンを持つオートシェイプオブジェクトの一群があり 1つ1つには想定される名称が存在します 具体的な操作としては複数のオートシェイプオブジェクトを横に並べたイメージダイアグラムを 作成し、それらにそって対応するテキストを配置していきたいというものです このようなオートシェイプの情報をうまく拾う方法、テキストデータと紐づける方法はありませんでしょうか よろしくお願いいたします

  • エクセル VBA 日付入力?

    エクセル 2000のVBAにて簡単な 日程表を作成しています。 フォームの テキストボックス1に 10/8 を入力したら テキストボックス2には 10/15 ~ テキストボックス15には 1/21 が自動で 入力されるようにするには、どのようにすればよろしいでしょうか?

  • VBAでテキストボックスに斜線を入れるには?

    excelで、大きなオートシェイプのテキストボックスの中に、いくつかの小さな やはりオートシェイプのテキストボックスを貼り付けます。 通常は小さなテキストボックスに文字を入力して使うのですが、全ての小さな テキストボックスに何の文字も入力されていない場合は、大きなテキストボックスに 自動で斜線(シェイプの直線?)が入り、またどれか一つでも小さなテキストボックスに 文字が入力された場合は自動で斜線が消える様にしたいのです。      _____________     |    ____         /|     |  |____|      /  |     |    ____     /    |     |  |____| /      |     |          /        |     |        /  ____   |     |      /  |____| |     |    /              |     |  /                |     |/                  |        ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ こんな感じなのですが、VBAで可能でしょうか? 以前もこんな感じの質問をしたばかりで恐縮ではありますが、よろしくお願いいたします。

  • VBAでエクセル内の情報を他のアプリケーションへ自動入力したいです

    業務効率を上げるために、VBAでエクセル内の情報を他のアプリケーションに自動入力させたいです。 入力する情報は、複数の項目があり、固定されています。 できれば、ワンクリックですべての入力フォームに自動入力させたいです。 これらのことは、VBAで実現可能なのでしょうか? また、実現可能な場合、どのようにすればよろしいのでしょうか? VBAを始めたばかりで何が出来て何が出来ないか、あまりわかっておりません。 VBAを習熟している方にとっては、簡単に質問であるかも知れませんが、どうぞご教授ください。 よろしくお願いいたします。

  • エクセルVBA フォームのテキストボックスの入力規則

    エクセル2000を使用しています。 VBAでフォームを作成しています。日付の入力項目をテキストボックスで 作りたいのですが、”yyyy/mm/dd”の形式で入力するようテキストボックスの中に表示し、それ以外の入力形式を制限するにはどのようにしたらよいでしょうか。

  • Excel VBAについて質問です。

    VBA初心者です。 フォームを2つ作成しております。 1つはフォーム名[入力用] もう1つはフォーム名[要求元]です。 フォーム[要求元]はリストボックス[リスト]と コマンドボタン[入力]と[終了]があります。 リストボックスのデータはRowsourceでセル番地を直接指定してます。 フォーム[要求元]においてリストボックスでデータを選びコマンドボタン[登録]を押すと、 フォーム[入力用]のテキストボックスに代入する方法がわかりません。 どなたか御教授お願い致します。

  • ExcelのVBAにてキーになるものを入力すると、その関連データを振り分ける

    2つのシートがあり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  1   2   3  (行)   1     A   B   C  2     ○   △   ×  3     ア   イ    ウ (1)sheet1にコンボボックスにてAを入力する。AはセルA1(固定)に、BはセルC3(固定)に、Cは、セルE5にそれぞれ決められたセルにコピーされる。 (2)sheet1にコンボボックスにて○を入力する。○はセルA1(固定)に、△は、セルC3(固定)に、×は、セル(E5)にそれぞれ決められたセルにコピーされる。 (1)と(2)のコピーされる場所は、同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、あまりよくわかりません。 宜しくお願い致します。

  • excel VBA オートシェイプのテキスト段落

    おはようございます。 【オートシェイプ内のテキスト行間を指定するプロパティ】 オートシェイプ内のテキスト行間を指定するプロパティはありますでしょうか? excel 2007で オートシェイプにテキストをいれた場合、 右クリックすると「段落」という項目がでてきて、 オートシェイプ内のテキストの行間を指定できたのですが、 オートシェイプ内のテキストの行間をVBAで指定することはできるのでしょか? (マクロを登録してもなにも記述されていないので、困っています。) 最終的にはアクティブブックの全シートのオートシェイプの行間を変更する VBAにしたいと思っています。 参考URL等あれば教えていただけませんでしょうか? よろしくお願いいたします。

  • エクセルVBAで計算機を作成について

    エクセルVBAのユーザーフォームで計算機を作成しております。 以下の点で参考書で調べたのですが壁にぶつかっております。 1、クリアボタンを作成して押下する事によって表示さ れている数字を「0」にしたいのですが出来ません。 2、テキストBOXに表示される数字を12桁まで表示にし たいのですがMAXLENGTHを12にしても制限をかける事  が出来ません。 3、テキストBOXに数字や計算結果を表示してるのです  が、手動入力を出来ない様にしたいのですが出来 ません。 非常にせっぱ詰まっていて言葉足らずかもしれませんがどなたか教えてください。

  • エクセル VBAについて

    お世話になります エクセルでのVBAのFoamにて編集画面を作成中ですが 画像の挿入(ダイアログボックス)一つ一つの貼り付けは可能ですが複数の画像の貼り付けができません。 それと貼り付けた画像たとえば4枚あるとすると 一枚一枚決まった枠内に自動に大きさなどを変更して貼り付けをしたいのですがいい方法ないですか?

専門家に質問してみよう