- 締切済み
Excelでセルの機能付与について質問です
見てくださってありがとうございます. 早速質問ですが,Excelで表を作成した際に,ひとつのセルにクリックするたびに内容が変わる機能をつけたいのですが,どのようにすれば良いかわかりません.どなたか教えてください.よろしくお願いします. イメージとしまして,クリックするたびにセルに書かれている内容が[小→中→大→小]の様にループさせたいです.因みにExcel2007です.
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.1・3です。 >右クリックの動作を追加する(右クリックは逆の動作を考えています)場合どのようにすればいいのでしょうか. については前回のVBE画面に ↓のコードを追加してみてください。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 'この行から If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub Cancel = True With Target Select Case .Value Case "大" .Value = "中" Case "中" .Value = "小" Case Else .Value = "大" End Select End With End Sub 'この行まで これで右クリックで 大 → 中 → 小 → 大・・・ と繰り返されるはずです。 >今回このエクセルを扱うのはパソコンが苦手な友人なので,ダブルクリックではなく,クリックで行いたいのと に関してですが、 ↓のコードにすれば選択(クリック)しただけでの変更は可能です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Application.Intersect(Target, Range("A1:A10")) Is Nothing Or Target.Count <> 1 Then Exit Sub With Target Select Case .Value Case "小" .Value = "中" Case "中" .Value = "大" Case Else .Value = "小" End Select End With End Sub ただし、これは文字通り「SelectionChange」イベントですので セル選択が変わった時に実行されるマクロとなります。 すなわち別セルを選択した状態で元のセルを選択する必要があります。 おそらくお望みとしてはセル移動せずに クリック で 小 → 中 → 大 右クリックで 大 → 中 → 小 といった動きだと思いますが、 シングルクリックだけでは難しいように思われます。 たとえ >今回このエクセルを扱うのはパソコンが苦手な友人なので といってもPCを使おうか!という人であれば「ダブルクリック」くらいは問題ないと思いますので、 前回の「ダブルクリック」のコードを今回の「右クリック」のコードを併用してもらってはどうでしょうか? その方がセルの移動なしで可能ですのでこの方法をオススメしたいのですが・・・m(_ _)m
- banzaiA
- ベストアンサー率16% (100/595)
>書かれている内容が[小→中→大→小]の様に とは、先の回答者さんのように[小→中→大→小]を表示させることですか? それとも、例えば、A1のセルに「会社」と入力されていて、 A1セルをクリックするたびに、 「会社」の表示を(フォントのポイントを)、「小さいフォントポイント」から「標準フォントポイント」そして「大きいフォントポイント」というふうに 表示させたい ということですか?
- tom04
- ベストアンサー率49% (2537/5117)
No.1です! たびたびごめんなさい。 余計なコードがたくさんありました。 ↓のコードに変更してください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'この行から If Application.Intersect(Target, Range("A1:A10")) Is Nothing Then Exit Sub Cancel = True With Target Select Case .Value Case "小" .Value = "中" Case "中" .Value = "大" Case Else .Value = "小" End Select End With End Sub 'この行まで ※ ダブルクリックでの操作ですので、必要でないものがかなりありました。 何度もごめんなさいね。m(_ _)m
補足
返事が遅くなり申し訳ありません. 回答と素晴らしいコードありがとうございます. ですが申し訳ないですが,要望があります. 今回このエクセルを扱うのはパソコンが苦手な友人なので,ダブルクリックではなく,クリックで行いたいのと,この記述に,右クリックの動作を追加する(右クリックは逆の動作を考えています)場合どのようにすればいいのでしょうか. 注文ばかりですみませんが,ご教授下さい.よろしくお願いします.
- tsubuyuki
- ベストアンサー率45% (699/1545)
エクセルには 「セルをクリックすると内容が変わる」 という不便な機能はありませんので、 この機能が欲しいと思ったらVBAを使って自作する必要があります。 ですが、VBAの起動タイミングとして用意されているのは あるセルをクリックしたら、で考えると ・ダブルクリックしたら ・右クリックしたら ・フォーカスが移動したら 主にこの三つです。 例えば「A1をクリックしたら」としたい場合、 ・A1セルをダブルクリックしたら ・A1セルを右クリックしたら ・他のセルからA1セルにフォーカスを移したら と言うことです。 で、これをごく簡単に書いてみると Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$A$1" Then Select Case Target Case "小" Target = "中" Case "中" Target = "大" Case "大" Target = "小" Case Else Exit Sub End Select Else Exit Sub End If End Sub 以上、ダブルクリックの場合。 右クリックに反応させるなら、1行目を Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 移動時なら1行目を Private Sub Worksheet_SelectionChange(ByVal Target As Range) に書き換え、シートモジュールに用意してやればOKです。 試してみるとご理解いただけると思いますが、 「連続操作が出来ない」点でどちらにしても不便だと思います。 (好みですので「思います」と表現しています。) ここから先は私の好みの話ですが、 私なら「ボタンあるいは四角形をクリックしたらセルを書き換える」として 例えば四角形をセル内の邪魔にならないところに配置し、 Sub 正方形長方形1_Click() Select Case Range("A1") Case "小" Range("A1") = "中" Case "中" Range("A1") = "大" Case "大" Range("A1") = "小" Case Else Exit Sub End Select End Sub これを仕込みます。 以上、参考までに。 ※VBA(及びVBE)の使い方は別途お調べください。
お礼
回答ありがとうございます. 細かくわかりやすく説明していただきありがとうございます. かなり参考になりました.今後も参考にさせてもらいます.
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 (1)ひとつのセルにクリックするたびに・・・ とすると、間違ったセルを選択しても反応してしまいますので、 ダブルクリックとしてみました。 (2)対象セル範囲が判らないので、とりあえずA1~A10セルだけが反応するようにしています。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてA1~A10セルをダブルクリックしてみてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'この行から If Application.Intersect(Target, Range("A1:A10")) Is Nothing Or Target.Count <> 1 Then Exit Sub Cancel = True Application.EnableEvents = False With Target Select Case .Value Case "小" .Value = "中" Case "中" .Value = "大" Case Else .Value = "小" End Select End With Application.EnableEvents = True End Sub 'この行まで ※ セル範囲は実際の配置に合わせて適宜変更してください。 (コード内の「Range("A1:A10")」部分です) ※ 空白にする選択肢があっても良いと思いますが、 とりあえずはご質問通りにやってみました。m(_ _)m
補足
解答ありがとうございます. 言葉足らずですみません. 先の回答者さんの内容であっています.今回自分が作成したいのは,クリックする事に表示しているセルの内容が○が表示されていたら△へと言ったような事をしたいんです. わかりにくいかもしれませんが,例:「○―クリック→△―クリック→×―クリック→○―以降ループ→」 といった感じっです.すみませんがよろしくお願いします.