エクセル関数で各種目のベストタイムを表示させる方法

このQ&Aのポイント
  • エクセルの関数を使用して、過去および現段階の各種目のベストタイムを表示させる方法について質問があります。
  • 質問には添付ファイルがあり、その中から各種目のベストタイムを抽出し、空白の表に表示させたいと考えています。
  • エクセルの関数を使用することで、指定した条件に基づいてデータを抽出し、表に表示させることができるかどうか知りたいです。
回答を見る
  • ベストアンサー

エクセル関数で対応できますでしょうか?

コメント頂いた皆様、申し訳ありませんでした。 初回の質問は次の通りです。 hyhttps://okwave.jp/qa/q9530568.html 添付ファイルを二つアップできるかと思いましたが、それが出来ずに悩んでいました。 chayamati様のコメントを読み二つ目の添付ファイルをアップします。 質問に補足します。 常にベストタイムを表示させる表は個人としてではありません。 団体として、過去も含めて今後参加した各種大会の各種目で、現段階のベストタイムは(いつ参加した)(なんという大会)で(どこの所属)の(誰)が(何秒)だったかという項目を表示させたいです。 初回の質問に添付したファイルに入力していき、その中から各種目のベストタイムが常に、今回の質問に添付した表(空白の部分)に表示されれば一目瞭然かな?と思っていました。 エクセル関数で対応できますでしょうか?

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.6

>Sheet1とSheet2に修正しています 正しくは、Sheet1とSheet2です。 つまり、数字も半角です。 >HohoPapa様から頂いた添付画像に合わせてから、 >標準モジュールにコピーペストをしSheet2に計算式を入れましたが結果は#VALUE!でした。 ん..わかりませんね。 再度、添付画像の青囲部分、 セル位置、埋まっている列名が同じかどうかを再確認してみてください。 >種別・性別・距離をプルダウンで選択する様に設定しています オートフィルターが設定されているという意味ですか? それとも入力規則を設定しているということ? どちらも影響を受けていないとは思いますが 切り分けのため、きっちり、サンプルに合わせてみてください。 これらが確認出来たら、 課題ブックを保存して閉じ、開きなおしてみてください。 それでも解決できないなら 再質問し、 Sheet1、Sheet2の画像を 私が提示したサンプル画像をまねて ポストしてみてください。

sarubaba
質問者

お礼

ありがとうございます。 1つ1つ潰していってみます。

sarubaba
質問者

補足

数字を半角に直してみましたが原因がわからず。 画像を添付するため再度質問致します。

その他の回答 (6)

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.7

>>種別・性別・距離をプルダウンで選択する様に設定しています とは、列名の話ではなく、2行目以下の話ですね。 ならば、それはエラーの原因にはなりません。 >私のエクセル画面の左下に「準備完了」と表示があり、 このクダリも問題ありません。

sarubaba
質問者

お礼

ありがとうございます。 謎解きみたいになってきました。 再度チャレンジしてみます

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.5

>>#VALUE!と表示されてしまいました エラーになってしまいますか。    ( ^)o(^ ) まず、 hyhttps://okwave.jp/qa/q9530568.html の画像では、 列名の行が1行目ではなさそうです。 他方、 >>Q:入力シートのデータがどの列、何行目から開始しているのか >>が読み取れません。 >>・入力シートのシート名を明らかにしてください。 >A:見難く申し訳ありません。 >題名の『種別』はA1のセルに入力して始めます。 >データーはA2のセルからになります。 列名が1行目で、データが2行目から始まるんですヨネ? シート名はSheet1ですね? 続いて、 >wkSQL = wkSQL & " ([クラス(2)] = '" & class & "')" & vbCrLf >となっていますが > ただしくは、(2)の部分は、〇に2の埋まった丸数字です。 >つまり、 > 質問者さんが使っているクラス名列の列名です。 この補足が期待通り伝わっているかどうか怪しいので、 手を加えた画像と手直ししたコードを再掲示しますので 再挑戦してみてください。 Option Explicit '//--------------------一位レコードのフィールド値取得関数 Function GetTopRec(TBRange As Range, _  GetFieldName As String, _  Syubetsu As String, _  Seibetsu As String, _  Kyori As String, _  class As String) As Variant     Dim wkSQL As String  Dim cn As Object  Dim rs As Object  Dim Kiroku1 As Date  Dim Kiroku2 As Date    Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"  cn.Open ThisWorkbook.FullName    wkSQL = "SELECT Top 2 * " & vbCrLf  wkSQL = wkSQL & "FROM [Sheet1$A1:L10000]" & vbCrLf  wkSQL = wkSQL & "WHERE (" & vbCrLf  wkSQL = wkSQL & " ([種別] = '" & Syubetsu & "') and" & vbCrLf  wkSQL = wkSQL & " ([性別] = '" & Seibetsu & "') and" & vbCrLf  wkSQL = wkSQL & " ([距離] = '" & Kyori & "') and" & vbCrLf  wkSQL = wkSQL & " ([クラス] = '" & class & "')" & vbCrLf  wkSQL = wkSQL & " ) " & vbCrLf  wkSQL = wkSQL & "Order By [記録] " & vbCrLf  rs.Open wkSQL, cn     GetTopRec = ""  If rs.EOF = True Then   If GetFieldName = "会場" Then    GetTopRec = "記録なし"   End If  Else   GetTopRec = rs(GetFieldName) '1レコード目を取得   Kiroku1 = rs("記録")   rs.MoveNext   If rs.EOF = False Then    'ヒットレコード複数    Kiroku2 = rs("記録")    If Kiroku1 = Kiroku2 Then  '記録値が2レコードで同じ     If GetFieldName = "会場" Then      GetTopRec = "記録複数"     ElseIf GetFieldName = "記録" Then      GetFieldName = rs("記録")     Else      GetTopRec = ""     End If    End If   End If  End If  rs.Close  Set rs = Nothing  cn.Close  Set cn = Nothing End Function

sarubaba
質問者

補足

回答が遅くなり、申し訳ありません。 列名が1行目になる様に、空欄の部分を削除しています。 データ入力は2行目から始まります。 シート名は当初、個人名にしていましたが、Sheet1とSheet2に修正しています。 以上、HohoPapa様から頂いた添付画像に合わせてから、標準モジュールにコピーペストをしSheet2に計算式を入れましたが結果は#VALUE!でした。 再度、トライしてみましたが#VALUE!が表示されてしまいました… 気になった事が2つ。 HohoPapa様の添付画像に表示されていませんが、私のエクセル画面の左下に「準備完了」と表示があり、その右側にアイコン(表現が正しいか分かりませんが)があります。 そこにカーソルを合わせますと「マクロの記録は現在実行されていません。クリックすると、新しいマクロの記録を開始します」 クリックするとモジュール内にmodule2が作成されてしまいます。 この部分は、気にしなくても良い部分でしょうか? また、種別・性別・距離をプルダウンで選択する様に設定していますが、ここも関係のない部分でしょうか? なんども申し訳ありません。

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.4

追記です。 wkSQL = wkSQL & " ([クラス(2)] = '" & class & "')" & vbCrLf となっていますが ただしくは、(2)の部分は、〇に2の埋まった丸数字です。 つまり、 質問者さんが使っているクラス名列の列名です。

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.3

>Q:VBAは扱えますか? >A:初めて聞きました。ググってみましたがピンときません。 ちょっと「ガンバレ」が必要かもしれません。 ■まずは、 https://excel-ubara.com/excelvba1/ の >第1回.マクロって何?VBAって何? から >第4回.マクロはどこに書くの(VBEの起動) までを行ってください。 ■続いて 標準モジュールに 次行以下から ================ Option Explicit '//--------------------一位レコードのフィールド値取得関数 Function GetTopRec(TBRange As Range, _  GetFieldName As String, _  Syubetsu As String, _  Seibetsu As String, _  Kyori As String, _  class As String) As Variant     Dim wkSQL As String  Dim cn As Object  Dim rs As Object  Dim Kiroku1 As Date  Dim Kiroku2 As Date    Set cn = CreateObject("ADODB.Connection")  Set rs = CreateObject("ADODB.Recordset")  cn.Provider = "Microsoft.ACE.OLEDB.12.0"  cn.Properties("Extended Properties") = "Excel 12.0;HDR=YES;IMEX=1"  cn.Open ThisWorkbook.FullName    wkSQL = "SELECT Top 2 * " & vbCrLf  wkSQL = wkSQL & "FROM [Sheet1$A1:L10000]" & vbCrLf  wkSQL = wkSQL & "WHERE (" & vbCrLf  wkSQL = wkSQL & " ([種別] = '" & Syubetsu & "') and" & vbCrLf  wkSQL = wkSQL & " ([性別] = '" & Seibetsu & "') and" & vbCrLf  wkSQL = wkSQL & " ([距離] = '" & Kyori & "') and" & vbCrLf  wkSQL = wkSQL & " ([クラス(2)] = '" & class & "')" & vbCrLf  wkSQL = wkSQL & " ) " & vbCrLf  wkSQL = wkSQL & "Order By [記録] " & vbCrLf  rs.Open wkSQL, cn     GetTopRec = ""  If rs.EOF = True Then   If GetFieldName = "会場" Then    GetTopRec = "記録なし"   End If  Else   GetTopRec = rs(GetFieldName) '1レコード目を取得   Kiroku1 = rs("記録")   rs.MoveNext   If rs.EOF = False Then    'ヒットレコード複数    Kiroku2 = rs("記録")    If Kiroku1 = Kiroku2 Then  '記録値が2レコードで同じ     If GetFieldName = "会場" Then      GetTopRec = "記録複数"     ElseIf GetFieldName = "記録" Then      GetFieldName = rs("記録")     Else      GetTopRec = ""     End If    End If   End If  End If  rs.Close  Set rs = Nothing  cn.Close  Set cn = Nothing End Function 前行までを貼り付けてください。======== ■シートの列名を添付画像に合わせてください。 提示された画像では 入力シート側 会場、開催日 集計側    会場名、開催年月日 となっていましたので、前者に合わせました。 またデータシートの県名列に列名がありません。 ■計算式を埋めてください。 例えば、E5なら、 =GetTopRec(Sheet1!$A$1:$L$10000,E$3,$A$5,$C5,$B5,$D5) Sheet1!$A$1:$L$3000 は、データの範囲 E$3 は、集計したい項目名 $A$5 は、種別 $C5  は、性別 $B5 は、距離 $D5 は、クラス(2) です。 返答にシート名の記載がなかったので sheet1 を前提に作成してあります。 データ量は最大10000行としました。

sarubaba
質問者

お礼

ありがとうございます また、大変親切な回答申し訳ありません。 参考にして頑張ってみます。

sarubaba
質問者

補足

親切な回答を頂いた手前、再度質問するのは失礼と思い色々とやってみていました。 しかし、どうにもこうにも行き詰まってしまった為に補足コメントに入力させて頂きます。 VBAに関して第1回から第4回までをみて標準モジュールにコピーペーストを行いました。 添付画像にシート列名を合わせてsheet2のE5のセルに=GetTopRec(Sheet1!$A$1:$L$10000,E$3,$A$5,$C5,$B5,$D5)を入力して見ましたが#VALUE!と表示されてしまいました。 これは、第3回マクロの記録。の作業に関係がありますか? 再度、画像を添付出来ればいいのですが、文章での説明となり恐縮です。

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.2

>エクセル関数で対応できますでしょうか? スプレッドシート上で使える出来合いの関数(標準の関数)では、 極度に厳しいと思います。 100以上あるクラウスごとにシートを分けることで 関数式が比較的簡易になるとは思いますが クラス横断の集計が求められたときに苦戦を強いられましょう。 入力シートの各レコードを、クラス順、記録順に並べ、 フィルターを使って確認する。 あるいは、いくつかの関数を組み合わせて クラス別1位の行に色を染めるといったところが 妥当な解だろうと思います。 期待の集計表作成は、 VBAを使いユーザ定義関数を作成すればできるだろうと思います。 VBAは扱えますか? 以下、入力シートを見たうえでの疑問点などを列挙しますので VBAに挑戦するのであれば、説明してみてください。 ・ベストタイムが複数あり、1位が複数行になる可能性はありませんか?  見たところ、集計先シートではそれが考慮されていないように見えます。  それとも、開催日時のより大きい側を1位と判断すればいいですか?  それとも、会場名などに複数ある旨の表示をしますか? ・入力シートのデータがどの列、何行目から開始しているのかが読み取れません。 ・入力シートのシート名を明らかにしてください。 ・クラス(1)の列は無視していいですね? ・会場に都道府県の列がありますが無視していいんですね? ・距離の列は、数値タイプで、書式設定を使い"m"を付加していますか?  それとも文字列ですか? ・記録列は時刻形式(日付シリアル値)ですね? ・開催年月日は日付シリアル値ですね? ・開催年月日には、時刻も含まれていますか? ・数年将来を見据えたときに、  入力シートの最大行数は、ざっくり何行程度を見積もりますか?  数十万?、数万?、数千?  数十万を超えるようならエクセルでは厳しいと思います。

sarubaba
質問者

お礼

お礼が遅くなりました。 回答有難う御座います。 挑戦してみたいと思います。 説明は次の通りです。 Q:VBAは扱えますか? A:初めて聞きました。ググってみましたがピンときません。 Q:ベストタイムが複数あり、1位が複数行になる可能性はありませんか?  見たところ、集計先シートではそれが考慮されていないように見えます。  それとも、開催日時のより大きい側を1位と判断すればいいですか?  それとも、会場名などに複数ある旨の表示をしますか? A:会場名に複数ある旨の表示をしたいです。 Q:入力シートのデータがどの列、何行目から開始しているのかが読み取れません。 ・入力シートのシート名を明らかにしてください。 A:見難く申し訳ありません。題名の『種別』はA1のセルに入力して始めます。データーはA2のセルからになります。 Q:クラス(1)の列は無視していいですね? A:無視でいいです。 Q:会場に都道府県の列がありますが無視していいんですね? A:無視でいいです。 Q:距離の列は、数値タイプで、書式設定を使い"m"を付加していますか?  それとも文字列ですか? A:文字列です Q:記録列は時刻形式(日付シリアル値)ですね? Q:開催年月日は日付シリアル値ですね? A:シリアル値ではありません。(記録列は)セルの書式設定でユーザー定義でmm:ss.000と設定していました。開催年月日もセルの書式設定で日付を指定しています。 Q:開催年月日には、時刻も含まれていますか? A:含ませれいません。 Q:数年将来を見据えたときに、  入力シートの最大行数は、ざっくり何行程度を見積もりますか?  数十万?、数万?、数千? A:行数は千行を設けていました。千行以上になったら、千行まででの新記録だけを別のシートに写して再び入力を続けようかと思っていました。 こんな感じで、分かりますか?

  • kozo_k
  • ベストアンサー率29% (55/188)
回答No.1

少し複雑な式にはなると思いますが関数で可能と思います。 手順としては (1)入力用のシートからIF関数で「種別」「距離」「性別」「クラス(2)」ごとの最小値のセルを特定する(ケースが多いのでこれが一番大変かと)。 (2)特定されたセルを参照元としてVLOOKUP関数で氏名以下を検索表示する。 でいけるかと思います。 (1)の手間を少なくするためには入力用シートを「種別」「距離」「性別」「クラス(2)」ごとのシート(または表)にしておくと特定(最小値)のセルを探すIFの関数式が簡単になるので楽かと、あるいは並べ替えとフィルターで並べ変えておくとかの方法も考えられます。(1)の作業をいかに楽にするかが肝だと思います。 実データでの検証はしておりませんのであしからず。

sarubaba
質問者

お礼

ありがとうございます if関数も含めるやり方ですね。

関連するQ&A

  • 関数に関する質問。

    コメント頂いた皆様、申し訳ありませんでした。 初回の質問は次の通りです。 hyhttps://okwave.jp/qa/q9530568.html 添付ファイルを二つアップできるかと思いましたが、それが出来ずに悩んでいました。 chayamati様のコメントを読み二つ目の添付ファイルをアップします。 質問に補足します。 常にベストタイムを表示させる表は個人としてではありません。 団体として参加した各種大会の各種目で、現段階のベストタイムは(いつ参加した)(なんという大会)で(どこの所属)の(誰)が(何秒)だったかといった表です。

  • 種目別タイムでの判定をエクセル関数で表現するには?

    頭がこんがらがってきましたので助けてください。 (1)距離別で数種目があり、(2)各々の種目内でのタイムがデーター内のタイムを上回れば(3)各バッジ級が決まります。 VLOOKUP関数でいけるかな?と思ったのですが、ん?検索条件が二つ必要ではないか?その際の関数は?と分からなくなってしまいました。 画像を添付します。 「種目」と「タイム」を手入力した時に、緑のセルに該当の「級」が表示される様に作ろうと思っていましたが行き詰まりました。

  • Excel ランキング表へ一括してリンク貼付けしたい!

    スイミングスクールでコーチをしています。 【生徒ごとの種目別タイムシート】にある各種目の自己ベストタイムを、同一ブック内の【生徒間の種目別ランキング表シート】にある 特定の各セルへリンク貼付けしたいのですが、一括してリンク貼付けする方法はないものでしょうか? 手入力でひとつひとつリンク貼付けすると非常に煩雑な作業になってしまうので、困っています。 関数を使うことで問題が解決できれば最善なのですが、他にも解決できる方法があれば教えていただきたいのです。 どうか宜しくお願い致します。 各シートのおおまかな入力例は下記のとおりです。 【生徒ごとの種目別タイムシート】 生徒の氏名をシート名にして作成してあります。     A        B        C        D   ... 1 氏名:徳川家康 2 テスト実施日  自由形25m  自由形50m  背泳ぎ25m 3 2008/12/27   0:19.45 4 2009/02/25            0:35.40 5 2009/04/22   0:20.20 ・ ・ ・ 30 自己ベストタイム 0:19.45    0.35.40 (1)テスト実施日に行った種目のタイムを入力します。 ※各列30行目の自己ベストタイムは、列ごとにMIN関数を使用して自動表示しています。 【生徒間の種目別ランキング表シート】 自由形・背泳ぎ・平泳ぎなどの泳法別にシートを作成しています。    A     B     C     D     E     F     G     H 1 自由形 2 順位   25m                      50m 3  1   タイム   氏名    学年        タイム    氏名    学年 4  2   0:19.45  徳川家康  小6        0:31.00  大隈重信  小3 5  3   0:21.20  豊臣秀吉  中2        0:35.40  徳川家康  小6 ・ ・ ・ (1)【タイムシート】の自己ベストタイムを【ランキング表シート】の各々の氏名に該当するB列、F列・・・へリンク貼付けしていきます。 (2)各々の種目で データ→並べ替え の方法でタイム列を最優先にして昇順で順位を並べ替えします。

  • Excelの関数についてです。

    Excelの関数についてです。 色々と説明しなければならない事があるとは思うのですが、急ぎなので簡潔に質問させて頂くことをお許し下さい。 関数を入力した後で、添付した写真のような表示が出ました。 表?みたいな表示が出たのは始めてで、何を示しているのかわかりません。 ヘルプも、何なのかがわからない為に検索出来ずにいます。 この表みたいな表示は何を指し示しているのでしょうか?どういう時に出る表示なのでしょうか? 画像が悪くて見ずらいかもしれませんが、わかられる方がいらっしゃいましたら、回答よろしくお願いします。

  • エクセル関数について

    エクセルの関数について質問です。 (見づらいですが添付ファイル参照) シート1のAさんの4月度の点数が98だった場合に シート3の対応表に沿った点数をシート2のAさんの 4月度に表示させたいのですが・・・ シート2のB-3に入る関数がわかりません。 おそらくIF、VLOOKUPを使うと思うのですが・・・ シート1は入力シートとして使い、シート2は結果を 表示するシートとして、年間を通して使用します。 回答をお願いします。

  • エクセル VLOOKUP関数について

    エクセルについて初心者なのですが、質問させて下さい。 【表1】   あ  1   ☆ い  2   ★ う  3   ★ え  1 お  2   ☆ か  3   ☆ き  1   ★ く  1 け  2 こ  3 【表2】   ☆  ★ 1  あ  き  2   お  い 3  か  う 【表1】のデータを基に【表2】のように常に表示するにはどんな関数が必要でしょうか?同じシート内で構いません。 色々検索してみましたが、VLOOKUPが目的に合っているように思うのですが、分かりませんでした。 詳しい方なら簡単なのかもしれませんが教えて頂けませんでしょうか? 申し訳ありませんが宜しくお願い致します。

  • 水泳部最後の大会にどうしても出たい

    こんばんは。 僕は今高3で水泳部に所属しています。 あと約2ヶ月後に最後の大会があるのですが、僕はまだその大会に出れるタイムを切れていません。 種目は100m自由形で、自己ベストが1分7秒79で、あと3秒ほど縮めなければなりません。 僕はいつも後半になるとスタミナが切れますし、前半のタイム自体も31秒とかなり遅いです。 大会に出れずに部活を引退というのは絶対に嫌なんですが、なかなかタイムがのびません… そこで質問というか相談なんですが、タイムを伸ばすためにはどうすればいいのでしょうか?まずは前半を30秒切りたいと思っています。 練習の方法や体のケアやいいサイトなどなんでもいいので教えてください。やれと言われれば歯を食いしばってでもやります!!!なので、ご回答よろしくお願いします!!!

  • エクセルの関数について

    エクセルについて質問です。 「ある数値を入力したら常に一定の文字列を表示する」にはどの関数がいちばん便利でしょうか? 例:セルA1に101を入力→B1に「りんご」を表示 セルA2に201を入力→B2に「みかん」を表示 のように全部で50程度の数値&文字列の組み合わせ(コード表)を 判別したいと思っています。 よろしくお願いします。

  • excelの関数について

    excelの関数について質問です。 添付画像のような体重シートを作っています。 当日の体重が前日の体重を20%以上だったら青字で表示、30%以上だったら赤字で表示させたいです。 また毎日体重を計るわけではないので前日が空白セルの場合は直近の体重データを参照してほしいです。 こういった場合の数式はどういった形がベストなのでしょうか? 教えていただけると幸いです。 よろしくお願い致します。

  • 水泳を5ヶ月で13秒縮めたい・・・

    こんにちわ。高校2年生の男です。 僕は今水泳部に所属しているんですが、気がつけばもう6月の最後の大会を残すのみとなってしまいました。去年の夏の大会では標準タイムをきり、県大会に進出できたのですが、6月の大会では標準タイムが厳しくなり、あと13秒縮めなければいけません。種目は200ブレで、今のベストタイムが3’00”01で、県大会への標準タイムが2’47”00です。今は特にスイミングに行っていませんが、市民プールになら週3、4回くらいで通う事はできます。 実力はないですが、どうしても県大会に行きたいです。 もう2月になろうとしていますが、6月中旬の大会までに13秒も縮める事は可能なんでしょうか????

専門家に質問してみよう