• ベストアンサー

Excel 計算結果のみを残し続けたいのですが・・・

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

質問者が選んだベストアンサー

  • ベストアンサー
  • k-pix
  • ベストアンサー率51% (50/98)
回答No.2

詳しい方が回答下さるまでの繋ぎにどうぞ。 私には、マクロを使う以外にはわかりません。 マクロに関して詳しくは、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

turtle-h
質問者

お礼

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

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

>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)すれば該当行の○も消える。

turtle-h
質問者

お礼

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

回答No.1

ご質問の通りのやり方ではないのですが。。。 1クラス41人として、 ・A2~A42 に出席番号を書いておき、 ・B1~AP1 の範囲に宿題を提出した学生の出席番号を入力する(Tabキーでセルを移動します) とします。 B2に、=IF(COUNTIF($B$1:$AP$1, A2)>0, "○", "")と書き、 B42までコピーすれば良いと思います。 入力し終わったら、B2~B42の範囲をコピーし、他の場所へ「形式を指定して貼り付け」(値を指定)すれば、また使えます。 本当ならAccessを使うところなのでしょうが、覚えるのが大変ですよね。

関連するQ&A