- ベストアンサー
Excelでのデータ入力について
Windows98でExcel2000を使用しています。 現在「番号」(A列)「氏名」(B列)を100件ほど既に入力しています。 番号を呼び出して点数を入力すると、呼び出した番号の(C列)(D列)(E列)に自動的に値が入るようなフォームを作成したいのです。 「データ」→「フォーム」を利用すると、1回毎に「検索」を押さないと新規入力になってしまうので不便です。 「検索」を押さなくても入力できるようなフォーム、又は他の便利な機能をご存知ないでしょうか。 つたない説明ですが、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エクセルのVBAに成ってしまいますが、よろしかったら下記をどうぞ。 まず、セルA1を検索する生徒番号の入力用セルとします。 A2からA100まで生徒番号が入っているとします。 (1)セルA1に入れた生徒番号が入っているセルをアクティブにするVBAコードを、ツール-マクロ-新しいマクロの記録-OKで記録します。 (2)マクロの記録をする操作は、編集-検索-1つ実在する生徒番号を入力する-次ぎを検索-OKと操作する。 (3)マクロ記録を終了するため、ツール-マクロ-記録終了を操作する。 (4)できたVBAコードを調べるため、ツール-マクロ-VBEでVBAProjectのフレームの標準モジュールをダブルクリックし「Module1」を出し、「Module1」をクリックすると、Macro1のVBAコードが現れる。 (5)次ぎにSheet1に、コマンドボタンを貼りつける。 表示-ツールバー-VisualBasic-コントロール(金槌の絵)-コマンド-ボタン(四角の絵)-Sheet1上で左下にドラッグし適度の大きさのボタンにする。 (6)Sheet1上のコマンドボタンをダブルクリックする。 VBEの画面になり、 Private Sub CommandButton1_Click() End Sub が現れる。 (7)このSubとEnd Subの間に、(4)のVBAコードを貼りつける。 (8)その結果を下記のように修正する。 Private Sub CommandButton1_Click() Range("A2:A100").Select ’検索範囲指定 Selection.Find(What:=Range("a1").Value, After:=ActiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False).Activate ’検索して見つかればそのセルをアクティブに ActiveCell.Offset(0, 2) = "aa" 'この行を加える。A列から2列右の列に ActiveCell.Offset(0, 3) = "bb" ’この行を加える End Sub aaとbbは貴殿の良いように変えてください。 (9)A1セルに生徒番号を入れて、コマンドボタンをクリックすると その生徒番号の行のC列がaa,D列がbbと成る。 生徒番号入力->ボタンクリックを繰り返してください。
その他の回答 (2)
- nishi6
- ベストアンサー率67% (869/1280)
>番号を呼び出して点数を入力すると、呼び出した番号の(C列)(D列)(E列)に自動的に値が入るような 『番号を指定して、点数を3つ入力して、呼び出した番号の横に書き込む』と解釈して回答します。 Sheet1のA1に「番号」、B1に「氏名」、C1に「点数1」、D1に「点数2」、E1に「点数3」の表題。 2行目から「番号」、「氏名」が入力されているとします。 ユーザーフォームを作ることもできますが、シートに入力欄を作ってみます。 (ユーザーフォームは説明が難しいので) I1に「番号」、J1に「氏名」、K1に「点数1」、L1に「点数2」、M1に「点数3」の表題。 この2行目に入力します。マクロで間違いを起こさないように、番号を入力する『セルI2』に『選択番号』の名前を付けます。 >番号を呼び出して これを実現するために、『セルI2』に入力規則を設定します。 データ→入力規則で入力値の種類を『リスト』、元の値を番号が入力されている範囲、例えば『$A$2:$A$100』をセット。 セルJ2には算式: =VLOOKUP(I2,A2:B100,2,FALSE) をセットします。 これで、番号はリストボックスから選択できます。番号を選択したら名前が出ます。 >呼び出した番号の(C列)(D列)(E列)に自動的に値が入るような・・・ これを実現するために、ボタンを使います。コントロールツールボックスのボタンを1つ、入力する『点数3』の横に配置します。 ツール→マクロ→Visual Basic Editor でVBE画面に移動し、Sheet1のコードウインドウに下記マクロを貼り付けます。 (デザインモードでボタンをダブルクリックすることで移動できます) ワークシートに戻り、番号はリストから選択、点数1、2、3を入力してボタンを押すことで登録できるはずです。 ユーザーフォームも同じように作れるはずです。番号を呼び出すならコンボボックスがいいでしょう。 Private Sub CommandButton1_Click() Dim BangoCell As Range '表の中で、入力しようとする番号のあるセル Set BangoCell = Range("A2:A" & Range("A2").End(xlDown).Row). _ Find(Range("選択番号").Value, LookIn:=xlValues) '番号を探す BangoCell.Offset(0, 2) = Range("選択番号").Offset(0, 2) '点数1 BangoCell.Offset(0, 3) = Range("選択番号").Offset(0, 3) '点数2 BangoCell.Offset(0, 4) = Range("選択番号").Offset(0, 4) '点数3 End Sub
お礼
まだ最後の動作確認をしていませんがうまくいきそうです。 あんなに悩んでいた事が、すっきりと解決できそうでうれしいです。 本当に有り難うございました。
- inshi
- ベストアンサー率0% (0/2)
うまく説明できるかわかりませんが、以下の内容で可能かと思います。 1.番号を呼び出すことについては、行のトップにカーソルを置き、データ/フィルタ/オートフィルタで 番号を抽出する。 2.点数を入力すると・・・については、他の列に自動で値を入れたい時、 IF関数などで示すか、別のシートにHLOOKUP関数を使って対比させる。 など有りますがどうでしょう。
お礼
早速回答いただきありがとうございました。 短時間で点数の入力をしなければならないため、オートフィルタ以外の方法が望ましいのですが…。
お礼
VBAはまだ勉強していませんが以前から興味があり、この機会にぜひ挑戦してみようと思います。 丁寧なご説明有り難うございました。