プロが教える店舗&オフィスのセキュリティ対策術

Excel初心者で申し訳ありませんが、教えてください。
A列に出席番号を記述しています。B1セルに出席番号を入力すると、
該当番号のB列に”○”を表示させたいのです。
ただ、その結果を残して次の番号をB1に入れてたいのです。
(宿題を提出しているかどうかのチェック表を作成したいのです)
ちなみに、B2以下には、=IF(B$1=$A$3:$A$43,"○"," ")という式を入力しています。毎回コピーして値を貼り付ける作業を繰り返す以外で
どのような方法がありますか?
よろしくお願いします。

A 回答 (4件)

詳しい方が回答下さるまでの繋ぎにどうぞ。



私には、マクロを使う以外にはわかりません。
マクロに関して詳しくは、Web検索などをご利用ください。

Excel が起動している状態で Altキー + F11キー でマクロのエディタ(Visual Basic Editor)を開きます。
Visual Basic Editor を開くとプロジェクトいう名のウインドウがあります。
そのウィンドウの中に VBAProject というのがあり、
その階層下に Microsoft Excel Objects というのがあり、
さらにその階層下に ワークシート名が並んでいると思います。
チェック表を作成しているシート名(たとえばSheet1 )に該当する部分をダブルクリックしてください。
すると、新しく真っ白なウインドウが表示されると思います。
そのウィンドウに下記のコードをコピペしてください。
(出席番号は、A3:A43 の範囲に書かれているとしています。)
その後、ファイルメニューから「終了して Microsoft Excel に戻る」を選択してください。
Excel に戻った後は、お望みの結果が得られるはずです。
これまで書かれていた B2 以下の式は不要です。
なお、B1セルに値を入力した後も、次のセルに移動しないようにしてあります。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer

If Target.Column = 2 And Target.Row = 1 Then
For i = 3 To 43
If ActiveSheet.Cells(i, 1) = ActiveSheet.Cells(1, 2) Then
ActiveSheet.Cells(i, 2) = "○"
Exit For
End If
Next
ActiveSheet.Cells(1, 2).Select
End If
End Sub
    • good
    • 0
この回答へのお礼

とてもわかりやすく回答していただきありがとうございました。
おかげでやっとできました!
これを元に少しVBAの勉強をして、B列以降にも計算できるようにしていきたいと思っています。
本当にありがとうございました。

お礼日時:2007/09/24 11:39

>B1セルに出席番号を入力すると


B1ひとつに入力するのは、魅力的と思いますが、これではVBAを使わないと絶対関数ではできません。
ーー
そこで(仮に)D列を使うことを考えました。
D列において、順次上から下のセルへ入力していく。
制約は無く、
入力順序は生徒番号順で無くても良いし
、空白セルがあっても良い。
ーー
例データ 20人学級の例 A列生徒番号
A列 B列(関数式の結果)
1
2
3○
4
5○
6
7
8
9
10
11
12○
13
14○
15
16○
17
18
19
20
ーー
B1に
=IF(ISERROR(MATCH(ROW(),$D$1:$D$20,0)),"","○")
B20まで式を複写する。
D列に
12
3
5
14
16
のように順次入れていく。番号を入れると即反応してくれる。
結果上記B列の通り
===
VBAならSheet1のChangeイベントに
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ret As Variant
If Target.Address <> "$C$1" Then Exit Sub '入力する場所
Dim c As Range
Set c = Worksheets("Sheet1").Range("A1:A20").Find(Worksheets("Sheet1").Range("C1"))
If c Is Nothing Then

MsgBox "なし"
Exit Sub
Else
Application.EnableEvents = False
c.Offset(0, 1) = "○"
Application.EnableEvents = True
End If
End Sub
あと訂正抹消の問題があるが、略。
ーー
関数の方はB列の、その番号が入ったセル内容を抹消(DEL)すれば該当行の○も消える。
    • good
    • 0
この回答へのお礼

丁寧に関数のやり方と、マクロの方法2パターンも回答していただきありがとうございました。
これを機会に少しVBAの勉強もしてみたいと思っています。

お礼日時:2007/09/24 11:41

こんにちは。



>毎回コピーして値を貼り付ける作業を繰り返す以外で
それなら、マクロ以外にはないと思います。

画面の下のシート[タブ]を右クリックして、コードの表示で以下を貼り付けて、Alt + Q で画面を閉じます。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ret As Variant
If Target.Address <> "$B$1" Then Exit Sub '入力する場所
     'レガシースタイル
  ret = Application.Match(Target.Value, Range("A1", Range("A65536").End(xlUp)), 0)
  If Not IsError(ret) Then
    Application.EnableEvents = False
     Cells(ret, 2).Value = "○"
    Application.EnableEvents = True
  End If
End Sub
    • good
    • 0

ご質問の通りのやり方ではないのですが。

。。

1クラス41人として、
・A2~A42 に出席番号を書いておき、
・B1~AP1 の範囲に宿題を提出した学生の出席番号を入力する(Tabキーでセルを移動します)
とします。

B2に、=IF(COUNTIF($B$1:$AP$1, A2)>0, "○", "")と書き、
B42までコピーすれば良いと思います。

入力し終わったら、B2~B42の範囲をコピーし、他の場所へ「形式を指定して貼り付け」(値を指定)すれば、また使えます。

本当ならAccessを使うところなのでしょうが、覚えるのが大変ですよね。
    • good
    • 0

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