陸上競技会のデータをエクセルでデータベース型式で使用しています。
構造は簡略化しますが
A B C D E F G H
性 種目 ゼッケン 名前 チーム名 記録 風力 競技日 ・・・
男 100m 101 AB XXXX 10”06 +1.6 5/1
女 砲丸投 51 CC YYYY 15m58 4/25
男 100m 101 AB XXXX 10”02 +2.6 5/1
のように記録されています。競技日以外は文字データとして、現在データ数は約1万件(シーズンが始まったばかりでこれから増加します)
このようなデータからある選手(A)の各種目毎のベスト記録を抽出したいのです。トラック競技とフィールド競技(最小と最大がベスト記録になります)
100mと200mなどは、追い風2mを超えると参考記録となりベスト記録にはなりません。
(男、100m ゼッケンなどで)検索抽出し、その中からベスト記録(競技日や名前チーム名なども同時に)を書き出すことになるのだと思いますが、どうすればいいのか分からないのです。
どのようにVBAで考えたらいいのか、教えて下さい。よろしくお願いします
No.3ベストアンサー
- 回答日時:
Findでの複数条件絞り込みも面倒臭そうなので、ADOを使う例です。
参考URLにも記述がありますが、ここまでやるならAccessを使うと思うので、自分も多量のデータで試した事は無いです。(当方XL2000です)皆さん書かれていますが、文字列で、時間と長さが混在した様なデータでは抽出は大変だと思います。
抽出してワークシートに貼り付けた中から人力でベスト記録を見つけるのが現実的かもしれませんね。
ご関心を持たれたら、参考URLで勉強なさってください。解説はいたしかねます。
下記コードは、データ用のブックとは別のブックに記述します。(同じブック内で抽出すると不安定との事)
データは、陸上競技会データ.xlsのSheet1にあるとします。
'Microsoft AcitiveX Data Object 2.x に参照設定
Sub test()
Dim CN As ADODB.Connection
Dim RS As ADODB.Recordset
Dim mySQL As String
On Error GoTo errorHandle
Set CN = New ADODB.Connection
CN.Provider = "Microsoft.Jet.OLEDB.4.0"
CN.Properties("Extended Properties") = "Excel 8.0"
CN.Open "C:\Documents and Settings\????\My Documents\陸上競技会データ.xls"
mySQL = "SELECT * FROM [Sheet1$] WHERE 名前 = " & "'AB'" & ";"
Set RS = New ADODB.Recordset
RS.CursorLocation = adUseClient
RS.Open mySQL, CN, adOpenStatic, adLockReadOnly
If Not RS.BOF Then
MsgBox "該当する記録は" & RS.RecordCount & "件です"
Else
MsgBox "入力された選手は存在しません", vbCritical
GoTo errorHandle '手抜き
End If
'+1.6,+2.6が数字で入っている場合
RS.Filter = "風力 < 2"
MsgBox "該当する記録は" & RS.RecordCount & "件です"
'検索結果をワークシートに貼り付ける
ThisWorkbook.Sheets(1).Range("a1").CopyFromRecordset RS
'フィルターを重ねてかける事で更に絞り込める
'RS.Filter = "hogehoge"
errorHandle:
If RS.State = 1 Then RS.Close
Set RS = Nothing
If CN.State = 1 Then CN.Close
Set CN = Nothing
End Sub
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
http://www.accessclub.jp/ado/index.html
ありがとうございます。
>ここまでやるならAccessを使うと思うので
やはりそうなのですね!
あげていただいたコードで調べてみます。
参考URLも参考にします。
ありがとうございます」
No.2
- 回答日時:
98%ぐらい#1さんの意見に賛成です。
「VBAなら何でも出来る」とは僕も思っていますが 現状、このシートに対して あなたの お望みの事をやらせようと
考えたら かなり効率が悪いと思います。
そもそも 何で シートを競技毎に分けないのでしょうか。
競技毎にシートを分ければ「H列 記録」は 数値を入力して後は「表示形式」で解決出来ます。
そもそも 現状 あなたのやりたい事は フィルタを設定して 別の作業シートに移してRANK関数でも付ければOKではないですかねぇ?
(風速云々は「IF」や「条件つき書式」で解決しそうだし)
VBAに頼る前にExcelを使いこなす努力をされた方が良いのではないでしょうか?
集計の仕方にセンスが感じられませんもの。。。
回答ありがとうございます。
数人の選手だけの処理なら手作業で十分ですが、登録選手のすべてのベスト記録を手作業では到底できません。
全選手とは思いませんが、自分のチーム(40~50人)のベスト記録を抽出するのは、手作業では気が遠くなります。何が何でもVBAに頼るつもりはありませんが、一人の選手が複数の種目の記録を持っています。
また競技別にとは思いますが、競技種目は約30種目もあり管理が大変だと思いますので。
でも作業的には同じことを、人数分・種目数分繰り返すのですから、VBAなどマクロに頼るべきだと思うのですがいかがなものでしょうか?
何か良い知恵がおありならご教授くださいませ。
No.1
- 回答日時:
何が何でも「VBA」で行わなければならないのですか?
何か理由でもあるのですか?
Excel標準の抽出条件しだいでうまくやれそうな気がしますが
http://allabout.co.jp/computer/msexcel/closeup/C …
それからデータの書き方ですが
>競技日以外は文字データ
というのは抽出などが前提であれば少し問題があると思います。
できれば数値データとして持たせる方がよいと思います。
(単位の[m]や["]、[+]などはセルの表示形式(ユーザー定義)で何とかできるので)
http://support.microsoft.com/kb/883199/ja
あと可能ならば最低でも競技別に分けた方がよいかなと思います
なぜ違う競技をまとめいているのか理解できません。
ご質問に真正面から答えてなくてごめんなさい。
この回答への補足
回答ありがとうございます。
数人の選手だけの処理なら手作業で十分ですが、登録選手のすべてのベスト記録を手作業では到底できません。
また競技別にとは思いますが、競技種目は約30種目もあり別ファイルにすると相当な混乱が生じたり、更新しtファイルや紛失したファイルなど、ファイル管理が大変だと思いますので。
>競技日以外は文字データ
というのは他のソフトとの関係を考えてのことです。
何か良い知恵がおありならご教授くださいませ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(悩み相談・人生相談) トレーニングジムのスタッフ(正社員)に就職を考えてます。 自分は体育界の大学卒です。 学生時代は陸上 7 2023/08/15 09:42
- 陸上 大学生ですが、陸上の試合はどうしたら出られますか? 関西インカレに出たいです。ただ、選手登録がよく分 2 2023/02/26 23:53
- その他(スポーツ) 陸上競技トラックやスピードスケートは右回りですが、左右で記録がよくなるのはどちらでしょうか? 2 2022/09/24 07:12
- 陸上 西宮神社の福男選びに全盛期のウサイン・ボルトが参加したら1番で福男ですか? 5 2022/12/25 08:36
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- サッカー・フットサル 北海道コンサドーレ札幌の話 1 2022/07/17 11:44
- Excel(エクセル) VBAで、シート間の転記するコードを教えてください。 4 2023/03/26 10:43
- Excel(エクセル) マクロを簡潔にしたい 6 2022/09/16 10:37
- 陸上 今回の世界陸上 男子100m決勝。なぜサニブラウン選手は第一レーンで走ったのか? 1 2022/07/18 13:59
- 陸上 今回の世界陸上を観ていて 特にトラック競技に於いて やはり日本人は世界では通用しないのかな?と感じま 4 2023/08/28 18:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数シートからデータを拾って...
-
エクセルファイルのシート毎の容量
-
Excelでシートの違うデータでグ...
-
EXCELで2つのファイルから重複...
-
シート削除して同名シート追加...
-
EXCEL の表を一行ずつシートに...
-
ファンモータが作動しない。
-
エクセルVBAで、特定文字から始...
-
Excelマクロ 差分抽出の方法が...
-
EXCEL 複数行のデータを1行にま...
-
excelの不要な行の削除ができな...
-
エクセルで複数の条件を抽出し...
-
エクセルで名簿を50音で切り分ける
-
エクセル マクロ "特定の日付...
-
【マクロ】同じフォルダ内にあ...
-
実行時エラー’438 の解消
-
Excelクエリで日付がうまく抽出...
-
excel vlookup 新担当者への実...
-
エクセルで一覧表から担当別シ...
-
エクセルのカメラ機能について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
excelの不要な行の削除ができな...
-
Excelで日付変更ごとに、自動的...
-
VBAで CTRL+HOMEの位置へ移動...
-
トランジスタの選び方
-
EXCELで2つのファイルから重複...
-
EXCEL 複数行のデータを1行にま...
-
他のシートの一番下の行データ...
-
オートフィルタで抽出したデー...
-
エクセルのカメラ機能について
-
(VBAにて)日付でデータを抽出す...
-
エクセルで名簿を50音で切り分ける
-
別々のシートの表をピボットテ...
-
Excel 売上管理シートに入力し...
-
Excelマクロ 差分抽出の方法が...
-
EXCEL の表を一行ずつシートに...
-
エクセルVBAで、特定文字から始...
おすすめ情報