• ベストアンサー

Excelの参照の仕方について(絶対参照?)

質問させてください。 シートを2枚用意して野球の個人成績表を作りたいと思っています。 今日の成績と通算成績です。 例えば通算10打数5安打の人がいたとして 今日の成績が5打数3安打だったら 今日の成績シートに5、3を入力すると 通算成績シートに自動的に5と3が足されて 15、8となるようにしたいのです。 ところが「絶対参照」になってしまい 上手く計算式が作れません。 同じシート上の数字を参照して同じ場所に 新しい数字を出すには どのようにすればよいのでしょうか? 御存知の方いましたら 教えてください。

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

  • ベストアンサー
  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.9

ピボットテーブルの「氏名」をダブルクリックし「詳細」ボタンを押します。  自動並べ替えオプション=降順  使用するフィールド=合計:打率  自動表示オプション=自動  表示=上位+10  使用するフィールド=合計:打率 ただし、「数式」がなくて別の方法になさったそうですから、「合計:打率」の部分はないかもしれませんね(>_<) また、これですとSheet2のピボットテーブル自体がベスト10になってしまいますから、11位以下は含まれなくなってしまいますので注意! ちなみに、RANKという関数があります。全体の中で何番目かを返す関数です。これなんかも使えるかも。 頑張ってくださいヽ(^。^)ノ

nutamed
質問者

お礼

すみません。遅くなりました。 大変参考になりました。 この度は度々付き合っていただき誠ににありがとうございました。

その他の回答 (8)

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.8

#7です。 Sheet2のピボットテーブル内のどこか(例えばB4)を右クリックすると出てくるメニューは次のとおりです。  セルの書式設定  レポートの書式設定  ピボットグラフ  ---------  表示しない  ---------  ウィザード  データの更新  ---------  選択  グループとアウトラインの設定  数式  順序  ---------  フィールドの設定  オプション  ページの表示 僕はEXCEL2000ですが、2002は違うのかもしれませんね。。。 それか、標準インストールでは利用できない機能なのかも。僕は初めからフルインストールだったので。 それから、ユーザー定義の「.000」というのは、最初はないんです。ユーザー(あなた!)が定義するのです!  分類=ユーザー定義  種類=.000 と入力します。 3割だったら「.300」、10割だったら「1.000」と表示されます。 頑張ってくださいヽ(^。^)ノ

nutamed
質問者

お礼

御回答ありがとうございます。 右クリックの数式はどうやら私のエクセルには ないようです。 別の形で打率など作ってみました。 「.000」は作ること出来ました。 ありがとうございます。 ご親切にありがとうございました。 不躾ですが 最後に、もう一つだけ 質問させてください。 シート2に作った 日々更新される通算成績を シート3にスポーツ新聞の 打撃成績トップ10のような形で 作りたいと思っております。 頭の中にはイメージがあるのですが まとまりません。 何か上手い方法があれば 教えてください。 よろしくお願いします。

  • snoopy64
  • ベストアンサー率42% (337/793)
回答No.7

ピボットテーブル好きの僕としては、こんな方法をお勧めします。 まず、Sheet1に以下のデータが入っているとします。 日付 氏名 打数 安打数 3月1日 仁志 4 3 3月1日 清水 4 1 3月1日 二岡 4 0 3月1日 高橋 4 2 3月1日 清原 4 1 3月1日 ローズ 3 2 3月1日 江藤 3 1 3月1日 阿部 3 1 3月1日 上原 3 0 3月2日 仁志 4 1 3月2日 斉藤 4 1 3月2日 二岡 4 4 3月2日 高橋 3 1 3月2日 ペタ 3 3 3月2日 ローズ 3 0 3月2日 元木 3 0 3月2日 阿部 3 0 3月2日 桑田 3 0 列A~列Dを選択し、「データ→ピボットテーブル・・・」 次へ→次へ→レイアウト 氏名を行に、打数と安打数をデータにドロップ 打数をダブルクリックすると「データの個数」になっていますからこれを「合計」に変更します。安打数も同様です。 OK→完了とすると、新しい(Sheet2とします)にピボットテーブルができます。 このままでは希望の形ではないので、多少手を加えます。 Sheet2のB3セル「データ」を、C3「計」と書いてあるところにドラッグしてください。ここまでやると データ 氏名 合計 : 打数 合計 : 安打数 ペタ 3 3 ローズ 6 2 阿部 6 1 桑田 3 0 元木 3 0 江藤 3 1 高橋 7 3 上原 3 0 仁志 8 4 清原 4 1 清水 4 1 斉藤 4 1 二岡 8 4 (空白) 総計 62 21 このような形になったと思います。さてあと一歩です。 表内のどこかを右クリックし、「数式→集計フィールド」とします。名前に「打率」、数式に「=安打数/ 打数」と入力し、追加→OK 表内のどこかを右クリックし、ウィザード→レイアウト、「合計:打率」をダブルクリックし、表示形式でユーザー定義を選び、「.000」とし「OK」「OK」「OK」「完了」 どうでしょうか、全員の打数、安打数、打率が一覧表示されましたね。最後に「名前」の▼から「(空白)」のチェックをはずすと、きれいな表になります。 Sheet1に毎日のデータを入れたら、Sheet2の表のどこかで右クリックして「データの更新」を押すと通算成績が更新されます。 頑張ってくださいヽ(^。^)ノ

nutamed
質問者

お礼

御回答ありがとうございます。 とても役立ちました。 お願いついでに、 表内のどこかを右クリックし、「数式→集計フィールド」・・・ とありますが、 右クリックメニューに「数式」がありません・・・ それとユーザー定義に「.000」もないのですよね・・・ 2002を使っているのですが 古いからでしょうか? よろしくお願いします。

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

#3です。 使っている(今問題にしている)シートの 表示-ツールバー-コントロールツールボックスをクリック。 単純な四角であるものの上にマウスをしばらく置くと 「コマンド ボタン」とコメントが出るのがコマンドボタンです。 それをクリックして、ワークシート上にマウスを移すと +型になりますので、数センチほど右下方向へドラッグしてください。 コマンドボタンが現れます。 その四角の中でダブルクリックすると、VBE画面に飛んで、 Private Sub CommandButton1_Click() End Sub がでます。 その中間に、回答のVBAの中間の3行をコピペして 、回答のVBAになったことを確認してください。 ツールバーの三角定規と鉛筆アイコンをクリックして、デザインモードを抜けます。 その後シート(Sheet1)のB1に数を入れ、ボタンを1度クリックし、Sheet2のB1を見てください。 Sheet1のB1の値が加えられていくのが確かめられるはずです。 まあ出きると言うことを言いたかっただけで、普通は同一 セルに順次データを入れて何かしようとするのは、エクセルでは設計からして考えなおす必要があると言うことでしょうか。

nutamed
質問者

お礼

ありがとうございます。 挑戦してみました。 私には難しかったです。 これからもよろしくお願いします。

noname#9284
noname#9284
回答No.5

一番無難な方法で解決されるのはどうでしょう。 下記は打数と安打数の履歴を残して、人ごとの最新の打率を表示します。 一度この通りに作られて、お気に召されましたらお使い下さい。 Sheet1のA1から右に日付 名前  打数  安打 下にデータを入力します。 Sheet2のA1から右に名前  打数  安打 A2から下に名前を入力します。 B2に =SUMIF(Sheet1!B:B,Sheet2!$A2,Sheet1!C:C) C2に =SUMIF(Sheet1!B:B,Sheet2!$A2,Sheet1!D:D)/B2 循環参照を利用してある計算をするという技もたしかにありますが、 今回のケースでは循環参照を避けられるのが後々いい結果になるような気がしますけれど。

nutamed
質問者

お礼

ありがとうございました。 参考になりました。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

No.2です。 今日の成績 は今日の成績だけでは無く、日々成績をデータとして付けていってください。 そうすると、通算成績を勝手に計算してくれます。

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

#2でおっしゃっているように、絶対参照の問題ではなく、循環参照となるため、うまく行かない問題です。 VBAでやっても、ぐるぐる回り計算になります。 表計算は、こんなありふれたニーズにも対応できないウイークポイントがあります。関数はデータを変えると即時的(オンライン的といいましょうか)に結果を変えてくれる良さがある反面、こう言う場合に困るのだと思います。 そこで、オフライン的に処理させれば出来ます。 オフライン的とは、エクセルを使っている人が、「操作」と言うキッカケをつくってやるのです。 sheet1にコマンドボタンを1つはりつけて、ダブルクリックすると Private Sub CommandButton1_Click() End Sub が出てくるから、その中間に下記中間の3行をコピペして Private Sub CommandButton1_Click() x = Worksheets("sheet2").Cells(1, "B") y = Worksheets("sheet1").Cells(1, "B") Worksheets("sheet2").Cells(1, "B") = x + y End Sub とします。 これでボタンを押すと、Sheet1のB1に入れた値が、Sheet2のB1の値に加算されます。累積的になります。一度ボタンを押したこと忘れて、もう一度ボタンを押すと、もう一度加算されてしまう厄介さはあります。 残念ながら、本質問はエクセルでは「厄介なニーズ」にぶちあたったということでしょうか。

nutamed
質問者

補足

御回答ありがとうございます。 教えてくれました 「コマンドボタン」 とはどのように使うのでしょうか・・・? ヘルプにも登場しないのですけれど・・・ よろしくお願いします。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.2

絶対参照ではなくて循環参照と出ているんじゃないですか? 例えば、 今日の成績 A1 日付 B1 選手名 C1 打数 D1 安打数 E1 率 で、2行以降にデータを作っていったとして、 通算成績 A1 選手名 B1 打数 C1 安打数 D1 率 とかにして、 B2 =SUMIF(今日の成績!B:B,A2,今日の成績!C:C) C2 =SUMIF(今日の成績!B:B,A2,今日の成績!D:D) で2行をコピーして、下方向に必要なだけペーストすれば良いですね。 今日の成績にデータを入れて、 通算成績には選手名だけ入れれば勝手に計算します。 とりあえずこんな感じでいかがですか?

nutamed
質問者

補足

確かに循環参照でした。 御教授頂いたのがよく分かりません。 例えば シート1今日の成績 A名前 B打数 C安打 1山田  5  3 を入力すると シート2通算成績 A名前 B打数 C安打 1山田  10  5 がシート2通算成績で自動的に同じセル内で A名前 B打数     C安打 1山田 15(=5+10) 8(=3+5) ()内は私の目指している数式です。 となるようにしたいのです。 いかがでしょうか・・・?

  • miumiumiu
  • ベストアンサー率21% (715/3385)
回答No.1

絶対参照が付くのが嫌なら、絶対参照を取ればいいのですよ。 計算結果が出るセルの数式バーを見てください。 おそらく、$A&1とか、なってませんか? この$マークが絶対参照にしているって記号です。 $マークを消せば、絶対参照にはなりませんよ!

関連するQ&A