- ベストアンサー
マクロの自動実行
Excel2007を使用しております。マクロ初心者です。 以下のようなことをExcelで実現したいと思っています。 ある列すべてに同じリストが登録されてあり、 その列のセルから"○"がリストから選択されましたら、自動的に同じ行の右の列のセルが自動的に"○"がつく というようにExcelに登録したいのです。 いろいろと検索をしたのですが、検索の仕方が悪いのかこれといった答えの書いてあるサイトが見つかりません。 ※リストの登録の仕方まではわかりますが、それ以降がわかりません。 この問題の解決策を、もしくはこの問題を解決できるサイトをご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
例えばA列にリストが設定されているのでしたら次のようなマクロになりますね。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And Target.Value = "○" Then Target.Offset(0, 1).Value = "○" Exit Sub End If End Sub
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >※リストの登録の仕方まではわかりますが、それ以降がわかりません。 リストというのは、Excelの用語の中のリストですか?本来は、リストのオブジェクトは、範囲が限定されますが、マクロやオブジェクトについては分かるということですね。 (書いている最中に、imogasiさんが、書いていただきました。) 「選択されましたら」という言葉の意味が、マウスでクリックすると解釈しました。 そうすると、以下のようなコードにしたらよいと思います。 >この問題の解決策を、もしくはこの問題を解決できるサイトをご教授願います。 ワークシート上のイベント・ドリブン型マクロというのは、特殊ですから難しいです。以下は、私個人の書き方ですが、やはり先人のものを真似たり、他人から指摘されたりして切磋琢磨して覚えてきました。ここのサイトでは、基本的には、回答者同士のやりとりが禁じられているのと、初心者の方にとっては、玉石混交ですので覚えにくいです。 イベント・ドリブン型は、中級で出てくるものですが、最初に、UserForm のコントロール・ツールから覚えるのが普通ですので、ワークシートなどのイベント・ドリブン型は、あまりガッチリしたものを覚える機会がないと思います。旧バージョンのマクロでは、このようなスタイルではありませんでした。 Excel 2007 になってすから、内部的に変わったようです。イベント・ドリブン型は、間違えると、無限ループになります。 作業コードの前にごちゃごちゃ書くのはエラーを出さないためです。 '------------------------------------------- 'シートモジュール '------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column <> 1 Then Exit Sub 'A列 If Target.Count > 1 Then Exit Sub If Target.Value = "" Then Exit Sub If Trim(Target.Value) Like "○" Then Target.Offset(, 1).Value = "○" 'ひとつ右隣 End If End Sub '------------------------------------------- なお、これには、以下の構文は必要ありません。 Application.EnableEvents = False '作業コード Application.EnableEvents = True
お礼
丁寧な回答をありがとうございます。 解決できました!
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルVBAの初心者との事だが、エクセルそのものの経験が少ないのか、文章が判りにくい。 >マクロの自動実行 マクロはある意味では、自動実行されるもので、質問の内容から書く必要なさそう。 「あるセルで○を選択すると、隣列に○を入れたい」とか >ある列すべてに同じリストが登録されてあり どういう意味。各行で同じ値がその列に入っているように取れるが、そんなデータはありえないでしょう。 リストの意味が多義的なのを知らないのだろうが、リストという言葉を使わなくてもよい場合か(下記の(1)など)。 (1)世間で言う、同じ性格のデータが連なって入力されている (2)エクセル2003までのリスト(エクセルの術語) http://www11.plala.or.jp/koma_Excel/contents3/mame3020/mame302004.html 2007では意味が変わっている。ーー>テーブル http://excel2007.officetanaka.com/?day=20061020 (3)データー入力規則のデータの「入力値の種類」で選択した「リスト」 ドロップダウンリストからクリックして選択 この中の(3)か? >リストの登録の仕方まではわかりますが リストとは入力規則のリスト(上記(3))? >その列のセルから"○"がリストから選択されましたら 選択された結果、そのセルの値!が○になるなら、こんなこと書く必要なし。 ーーー A列で○の行がクリックされたらその隣のB列同行に○を入れる とでも表現すべきか? ○が隣列とダブって意味無いように思うが。 ドロップダウンのクリックイベントを捕らえるのは初心者には難しい 。選択されてA列の値が変わったを捉えるしかない。 その変化を捉えるイベントはシートのChangeイベントで コードは#1のご回答の通り。 イベントがVBA初心者の課題ではないと思う。
お礼
手早い回答ありがとうございました! おかげ様で解決できました!