- ベストアンサー
VBAでセルをクリックする回数で表示が変わる
ExcelVBAについてお伺いします。 成績表をつけているのですが、A列に「優・良・可・不可」の合否判定をしたいと思っています。 大体ずっと自分でその内容を見て判定ごとに入力してつけてきたのですが、人数があまりに多くて、それが面倒なのです。 クリックを1回したら「優」に、 もう一度したら「可」に、さらにすると「不可」なるようなマクロを組みたいと思ってい ます。 A列にのみ限定してそのようなマクロを組むことは可能でしょうか? ワークシートのイベントだと、他の列もそうなってしまったりするのです。 「A列限定の仕方」と「クリックするたびにセルが変わる」の具体的な方法をご存知の方、よろしければお知恵を貸してく ださい。 コンボボックスにしようかとも思ったのですが、クリックイベントを他のことにも流用したいので、あえて今回「マクロで 組む」方法をとりたいと思っています。 わかりにくい説明ですが、よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ExcelVBAのシートイベントにはクリックが無いので、ダブルクリックでの例です。 シート名のタブを右クリックし、コードの表示で出てきた画面にコピペします。 試すのはテストブックで。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim s As String If Target.Cells(1, 1).Column = 1 Then Cancel = True Select Case Target.Cells(1, 1).Value Case "優": s = "良" Case "良": s = "可" Case "可": s = "不可" Case Else s = "優" End Select Target.Cells(1, 1).Value = s End If End Sub
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17070)
ご質問にピッタリの、簡単で、VBAコードも1行のものを紹介します。 (1)ワークシート上に(コントロールツールボックスから)リストボックスを貼りつけます。 (2)右クリックしてプロパテイのListFillRange にF1:F4といれます。(どこでも邪魔にならないセル範囲のところで結構です。) (3)F1:F4の各セルに、優、良、可、不可をいれる。 (4)デザインモード状態で、リストボックスをダブルクリックする。 Private Sub ListBox1_Click() End Sub が出ます。 (5)コードを1行下記のようにいれる。 Private Sub ListBox1_Click() ActiveCell = ListBox1.List(ListBox1.ListIndex) End Sub (6)デザインモードを脱してワークシートへ戻る。 (7)優良可をいれたいセルをクリック。 次にリストボックスの中の優などをクリック。 それで前記のセルに優などクリックした評価文字がセルに入る。 連続して、A列クリック-リストクリックの連続繰り返しで 評価がセット出来る。
お礼
回答ありがとうございます。たったの3行ですませてしまうとは、すごいです。指示を見ながらやってみて驚きました。こういう方法もあるのですね。本当にありがとうございました。また何かありましたらよろしくお願いします。
- papayuka
- ベストアンサー率45% (1388/3066)
余計なお節介ですが、、、 #1さんのコードを使用される場合は判定部分を If Left(ad, 3) = "$A$" Then にしないと、AA~AZ列でも反応しちゃうと思います。
お礼
再度の回答ありがとうございます。ただいまものすごくポイントことで悩んでおります。みなさまがこんなに早く素晴らしい回答をくださるとは思ってもみなかったもので・・・。本当にありがとうございます。
- hana-hana3
- ベストアンサー率31% (4940/15541)
評価のために何百回クリックする事になるのでしょう? 簡単に、任意の数字入力で変更させる方法です。 (ご希望と違いますが・・・) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And IsNumeric(Target) Then Select Case Target Case 1 Target = "不可" Case 2 Target = "可" Case 3 Target = "良" Case 4 Target = "優" Case Else Target = "" End Select End If End Sub 右クリックメニューで選択する方法もありますが、厄介だったので・・・。 1~4の数字を入力すると記入されます。 文字の場合は何もしません。
お礼
回答ありがとうございます。そして良いアイディアをくださってすごく嬉しいです。そうですよね・・・確かに何回もクリックするのはものすごく疲れます。おっしゃるとおりです。数字入力の方が楽ですし。これはいけそうです!大感謝です。また何かありましたらよろしくお願いします。
- tamagawa49
- ベストアンサー率46% (123/265)
「クリックするたびに」というイベントは無さそうなので、SelectionChangeイベントで作ってみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim ad As String ad = ActiveCell.Address If Mid(ad, 2, 1) = "A" Then If ActiveCell = "" Then ActiveCell = "優" ElseIf ActiveCell = "優" Then ActiveCell = "良" ElseIf ActiveCell = "良" Then ActiveCell = "可" ElseIf ActiveCell = "可" Then ActiveCell = "不可" ElseIf ActiveCell = "不可" Then ActiveCell = "" Else End If End If End Sub 空欄→優→良→可→不可→空欄 となるようにしました。 ただし、selectionchangeですので、同じセルを二度クリックする場合は、一度カーソルを別のセルに移してから再度A列を選ばなければなりません。
お礼
お早い回答ありがとうございます。こういう方法でするのか・・・と感心しました。「クリックするたびに」ってないのですね。ちょっとショックが・・・。本当に助かりました。ありがとうございます。またお伺いすることもあると思いますが、その時はよろしくお願いします。
お礼
回答頂きましてありがとうございます。2行目の「シート名のタブを右クリックし、コードの表示で出てきた画面にコピペ」のお言葉助かりました。実は最初エディタにコピペしても動かなくて困っていました(^^;)おわかりだと思いますが、実はVBAの超初心者なのです。すごく使いやすいシートになりました。ありがとうございました。また何かありましたらよろしくお願いします。