- 締切済み
スコアー票に入力した得点が名簿一覧に反映されるには
教えてください。sheet1にスコアー票を作成しています。チームNo.を入力すればチーム名と名前が出てくるようになってます。そのそれぞれに得点を入力するとsheet2の名簿一覧の得点の欄に反映されるようにしたいのですが、どうしたらいいですか? Sheet1 スコアー票 Sheet2 名簿一覧 A B A B C D 1 5 1 チーム名 氏名 得点 2 なかよし 2 きらり こと 3 名前 得点 3 きらり まなと 4 なな 13 4 きらり しょう 5 らら 24 5 なかよし なな 13 6 まな 31 6 なかよし らら 24 7 なかよし まな 31 このようにSheet1のA1にチームNo. 5を入力すると A2にはチーム名と、名前が出てくるようにしてるんですが、得点を入力すると、Sheet2の得点に反映されるようにしたいのと、一回反映されたのはそのまま消えずに、使いまわして違うチームを入力したら得点に反映されるようにしたいのですが どうしたらいいでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- tom04
- ベストアンサー率49% (2537/5117)
No.2です。 たびたびごめんなさい。 投稿後気づいたのですが、Sheet2は↓のような配置になっているのでしょうか? もしそうであれば前回のコードではエラーになりますので、 前回のコードはすべて消去して↓のコードに変更してください。 コード内に変更箇所を書いています。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim c As Range, lastRow As Long If Intersect(Target, Range("A1,B:B")) Is Nothing Or Target.Count > 1 Then Exit Sub If Target.Column = 1 Then lastRow = Cells(Rows.Count, "B").End(xlUp).Row Range(Cells(4, "B"), Cells(lastRow, "B")).Formula = "=IF(A4="""","""",VLOOKUP(A4,Sheet2!C:D,2,FALSE))" '★数式を変更 Else With Worksheets("Sheet2") '★「Sheet2」は実際のSheet名に! Set c = .Range("C:C").Find(what:=Target.Offset(, -1), LookIn:=xlValues, lookat:=xlWhole) '★この行変更 c.Offset(, 1) = Target End With End If End Sub 'この行まで ※ コード内の「Sheet2」の部分は実際のSheet名にしてください。 どうも失礼しました。m(_ _)m
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! >チームNo.を入力すればチーム名と名前が出てくるようになってます。 というコトは↓の画像の左側SheetのA・B列(A1セル・項目セル以外)は数式がすでに入っている訳ですよね? >得点を入力すると、Sheet2の得点に反映されるようにしたいのと・・・ すなわちB列に得点を入力する=数式が消えてしまう! というコトになりますので、チーム名表示が変わった時点でもう一度数式を入れてやる必要があると思います。 VBAになりますが一例です。 画面左下の「Sheet1」のSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → VBE画面を閉じてSheet1のセルを色々操作してみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim c As Range, lastRow As Long If Intersect(Target, Range("A1,B:B")) Is Nothing Or Target.Count > 1 Then Exit Sub If Target.Column = 1 Then lastRow = Cells(Rows.Count, "B").End(xlUp).Row Range(Cells(4, "B"), Cells(lastRow, "B")).Formula = "=IF(A4="""","""",VLOOKUP(A4,Sheet2!B:C,2,FALSE))" Else With Worksheets("Sheet2") Set c = .Range("B:B").Find(what:=Target.Offset(, -1), LookIn:=xlValues, lookat:=xlWhole) c.Offset(, 1) = Target End With End If End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m
- MackyNo1
- ベストアンサー率53% (1521/2850)
ご希望のことは関数ではできません(マクロを使用する必要があります)。 このようなケースでは、Sheet2のデータベースのほうに得点を入力して、Sheet2のA1にチーム番号を入力するとすべてのデータが反映するように運用するのが、一般的で合理的な対応策です。 実際の運用では、Sheet2でオートフィルタを掛けておき、チーム名で絞り込んだシートにデータを入力します。 このようにすれば、Sheet1のB5セルに以下のような数式を入力して下方向にオートフィルコピーしておけばよいことになります。 =IF(A5="","",VLOOKUP(A5,Sheet2!B:D,2,0))
お礼
ありがとうございます。やはりマクロでね!
お礼
お礼を言うのが遅くなりすみません。VBAが初心者ですので、すごく頭を 悩ましたところでした。 ありがとうございました。