とっておきの「夜食」教えて下さい

ExcelVBAについてお伺いします。
成績表をつけているのですが、A列に「優・良・可・不可」の合否判定をしたいと思っています。
大体ずっと自分でその内容を見て判定ごとに入力してつけてきたのですが、人数があまりに多くて、それが面倒なのです。
クリックを1回したら「優」に、 もう一度したら「可」に、さらにすると「不可」なるようなマクロを組みたいと思ってい
ます。
A列にのみ限定してそのようなマクロを組むことは可能でしょうか?
ワークシートのイベントだと、他の列もそうなってしまったりするのです。
「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
    • good
    • 0
この回答へのお礼

回答頂きましてありがとうございます。2行目の「シート名のタブを右クリックし、コードの表示で出てきた画面にコピペ」のお言葉助かりました。実は最初エディタにコピペしても動かなくて困っていました(^^;)おわかりだと思いますが、実はVBAの超初心者なのです。すごく使いやすいシートになりました。ありがとうございました。また何かありましたらよろしくお願いします。

お礼日時:2004/05/10 23:46

ご質問にピッタリの、簡単で、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列クリック-リストクリックの連続繰り返しで
評価がセット出来る。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。たったの3行ですませてしまうとは、すごいです。指示を見ながらやってみて驚きました。こういう方法もあるのですね。本当にありがとうございました。また何かありましたらよろしくお願いします。

お礼日時:2004/05/11 00:00

余計なお節介ですが、、、



#1さんのコードを使用される場合は判定部分を

If Left(ad, 3) = "$A$" Then

にしないと、AA~AZ列でも反応しちゃうと思います。
    • good
    • 0
この回答へのお礼

再度の回答ありがとうございます。ただいまものすごくポイントことで悩んでおります。みなさまがこんなに早く素晴らしい回答をくださるとは思ってもみなかったもので・・・。本当にありがとうございます。

お礼日時:2004/05/10 23:52

評価のために何百回クリックする事になるのでしょう?


簡単に、任意の数字入力で変更させる方法です。
(ご希望と違いますが・・・)

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の数字を入力すると記入されます。
文字の場合は何もしません。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。そして良いアイディアをくださってすごく嬉しいです。そうですよね・・・確かに何回もクリックするのはものすごく疲れます。おっしゃるとおりです。数字入力の方が楽ですし。これはいけそうです!大感謝です。また何かありましたらよろしくお願いします。

お礼日時:2004/05/10 23:49

「クリックするたびに」というイベントは無さそうなので、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列を選ばなければなりません。
    • good
    • 0
この回答へのお礼

お早い回答ありがとうございます。こういう方法でするのか・・・と感心しました。「クリックするたびに」ってないのですね。ちょっとショックが・・・。本当に助かりました。ありがとうございます。またお伺いすることもあると思いますが、その時はよろしくお願いします。

お礼日時:2004/05/10 23:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A