[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『他ブックを開き、値を並びかえたデータを取り込みたい』(マネージャー)
皆様のお力をお貸しください。
選手の能力を見える化しようとしています。
選手のデータを計測するPC(仕組み)が2つあり、それぞれ結果をCSVで出力できます
計測する仕組みが2つあるため、1つの計測会で2つのCSVファイルができます。
2つのCSVのデータを1つのブックに取り込み、まとめて点数化し独自の点数をつけたいと考えています。
各CSVには多くのパラメータが保存されており、まとめるブックに取り込む際に
各パラメータで順位を並び替えた結果を取り込みたいと考えていますが、ブックから各CSV上で並び替える
マクロがわかりませんので質問させていただきました。
条件は以下のように考えております。
1)1つの計測会に参加する選手は最大10人
2)1日の計測会は最大20
3)管理表フォルダーがあり、その中に管理するBOOKを作り(BOOK名はPP)保存します。
1つ目のPCからCSVとして作成されるファイル名は01.csv〜20.csv
2つ目のPCからCSVとして作成されるファイル名は01a.csv〜20a.csv
したっがて、1回目の計測会で出力されるファイルは
01.csv 01a.csv この2つとなり、計測会の回次が20回目となれば 20.csv 20a.csv のファイルが出力されます イメージとして 管理表フォルダーがあり、まとめるブック名=PPが入っています。 管理表フォルダーに 20220223のような日付(YYYYMMD)の付いたフォルダーがあり、 その配下に 01 (←01.csvから20.csvのファイルが入る) 02 (←01a.csvから20a.csvのファイルが入る) の2つのフォルダーがある構成です。
データは毎日作成されるために管理するBOOKで日付でフォルダーを指定して抽出するようにしたいと考えています。。
以下は01.csvの内容になります。
|[A] |[B] |[D] |[E] |[AH] |[AI] |[AJ] |[AK] [1] |計測会No |タイム |前半タイム|名前ゼッケン|平均速度 |Last20m |最高速度 |前回最高速度 [2] | 1| 1:00| 00:28| 6| 8.0| 7.5| 7.6| 7.5 [3] | 2| 1:01| 00:28| 5| 8.2| 7.6| 7.6| 7.4 [4] | 3| 1:02| 00:27| 1| 8.3| 7.7| 7.8| 7.5 [5] | 4| 1:03| 00:29| 2| 8.4| 7.9| 7.7| 7.5 [6] | 5| 1:04| 00:27| 3| 8.5| 7.8| 7.6| 7.6 [7] | 6| 1:05| 00:28| 4| 8.5| 7.8| 7.8| 7.5 [8] | 7| 1:06| 00:29| 7| 8.9| 7.9| 7.9| 7.8 [9] | 8| 1:07| 00:30| 8| 8.8| 7.9| 8.1| 7.6 [10]| 9| 1:08| 00:31| 9| 8.7| 7.9| 8.1| 7.5 [11]| 10| 1:08| 00:31| 10| 8.9| 7.9| 8.1| 7.7
このCSVは保存される際にはB列(タイム)を昇順にした状態で保存されています。
その時のタイム順にならんだ「名前ゼッケン」を管理するBOOK(PP)転記するところまではできています。
以降
D列 前半タイム 昇順
AH 平均速度 昇順
AI Last20m 昇順
AJ 最高速度 降順
AK 前回最高速度 降順 で並べれ替えをした際のゼッケンを転記したいと考えていますが、そこのマクロが書けずに悩んでいます。
A列はA1セルを除き順位ですが、A1セルには計測会区分の番号が入ります(例えば01など)
◎考え方としては
1)各CSVをまとめるブックPPに取り込んでから並び替える
2)各CSVを操作して並び替えたデータ「名前ゼッケン」だけをブックPPに取り込む、CSVは保存せずに閉じる
この2通りは思いつくのですが、後者の方法ができないかと悩んでおります
以下は01a.csvの内容になります。
|[A] |[D] |[R] |[Z] |[AA] |[AB] |[AG] [1] |計測会No |名前ゼッケン|差 |X値 |z値 |ZZ値 |T値 |M値 [2] | 1| 6| -2| 1| 8.0| 8.3| 2 [3] | 2| 1| -2| 2| 8.1| 8.2| 3 [4] | 3| 5| -1| 3| 8.1| 8.6| 1 [5] | 4| 4| 0| 4| 8.2| 8.5| 4 [6] | 5| 3| 0| 5| 8.2| 8.5| 6 [7] | 6| 2| 0| 6| 8.2| 8.7| 5 [8] | 7| 7| 0| 7| 8.3| 9.5| 7 [9] | 8| 8| 2| 8| 8.3| 8.5| 10 [10]| 9| 10| 3| 9| 8.4| 8.3| 9 [11]| 10| 9| 4| 10| 8.5| 8.2| 8
このCSVは保存される際にはZ列(X値)を昇順にした状態で保存されています。
D列 01.csvのE列と同じ位置づけ
R X値 昇順
Z z値 昇順
AA ZZ値 降順
AB T値 降順
AG M値 昇順
で並べれ替えをした際のゼッケンを転記したいと考えています。
A列は順位ですが、A1セルには計測会区分の番号が入ります(例えば01aなど)
管理するBOOKのPP シート名は 能力一覧 (抽出したデータを表示させるシート) ファイル名一覧 (フォルダーに収まっているファイル名を書き出すシート) この2シートになります。
能力一覧 (抽出したデータを表示させるシート)への出力イメージは次の通りです
|[A] |[B] |[C]|[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]|[L] [3] |フォルダID| 20220223 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 ←順位 [4] 計測データ [5] | 01|タイム |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 [6] | 01|前半タイム|2 |1 |3 |4 |5 |6 |7 |8 |9 |10 [7] | 01|平均速度 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 [8] | 01|Last20 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 [9] | 01|最高速度 |1 |2 |3 |5 |4 |6 |7 |8 |9 |10 [10]| 01|前回最高 |2 |2 |3 |4 |5 |6 |7 |8 |9 |10 [11]| 01a|A_data |1 |4 |3 |2 |5 |6 |7 |8 |9 |10 [12]| 01a|B_data |2 |3 |5 |4 |1 |6 |7 |8 |9 |10 [13]| 01a|C_data |1 |2 |3 |4 |5 |10 |9 |8 |7 |6 [14]| 01a|D_data |3 |2 |4 |1 |5 |6 |7 |8 |9 |10 [15]| 01a|E_data |3 |2 |1 |4 |5 |6 |7 |8 |9 |10 [16]| 02|タイム | | | | | | | | | | [17]| 02|前半タイム| | | | | | | | | | [18]| 02|平均速度 | | | | | | | | | | [19]| 02|Last20 | | | | | | | | | | [20]| 02|最高速度 | | | | | | | | | | [21]| 02|前回最高 | | | | | | | | | | [22]| 02a|A_data | | | | | | | | | | [23]| 02a|B_data | | | | | | | | | | [24]| 02a|C_data | | | | | | | | | | [25]| 02a|D_data | | | | | | | | | | [26]| 02a|E_data | | | | | | | | | |
A16行名以降は2回目の計測データが続けて入る予定です(20計測会まで)
能力一覧のB3セルにYYYYMMDDで日付指定を行います。
フォルダーの階層は
¥管理表¥20220223_管理表¥01
ここに01〜20の名前の付いたCSVが入ります。
¥管理表¥20220223_管理表¥02
ここに01a〜20aの名前の付いたCSVが入ります。
PPのブックの能力一覧シートにマクロボタンをおき1クリックで展開できるマクロを目指しています。
ますは01フォルダーの分だけでもできでれば02が応用できると思います。
現在のマクロはここまでは書いています。
Option Explicit
Sub ファイル名一覧表作成()
Application.ScreenUpdating = False Dim i As Long, bookname As String With Sheets("ファイル名一覧表") .Columns(1).ClearContents bookname = Dir(ThisWorkbook.Path & "\" & _ Sheets("能力一覧").Range("B3") & "_管理表\01\*") Do While bookname <> "" i = i + 1 .Cells(i, 1) = bookname bookname = Dir() Loop End With End Sub
Sub ファイル名一覧表作成2()
Application.ScreenUpdating = False Dim i As Long, bookname As String With Sheets("ファイル名一覧表") .Columns(1).ClearContents bookname = Dir(ThisWorkbook.Path & "\" & _ Sheets("能力一覧").Range("B3") & "_管理表\02\*") Do While bookname <> "" i = i + 1 .Cells(i, 1) = bookname bookname = Dir() Loop End With End Sub
Sub R別能力一覧()
Application.ScreenUpdating = False Dim i As Long, r As Long Dim f As Worksheet Set f = Sheets("ファイル名一覧表") With Sheets("能力一覧") .Range("A5").CurrentRegion.Offset(1, 0).ClearContents For i = 1 To f.Cells(Rows.Count, 1).End(xlUp).Row r = .Cells(Rows.Count, 1).End(xlUp).Row + 1 Workbooks.Open ThisWorkbook.Path & "\" & _ .Range("B3") & "_管理表\01\" & f.Cells(i, 1) .Cells(r, 1) = Range("A1") 'ネタ元ファイルのA1セルをA6セルから順番に書き込む .Cells(r, 2) = Range("D1") 'ネタ元ファイルのG38セルをB6セルから順番に書き込む .Cells(r, 3) = Range("E2") 'ネタ元ファイルのC38セルをC6セルから順番に書き込む .Cells(r, 4) = Range("E3") 'ネタ元ファイルのE38セルをD6セルから順番に書き込む .Cells(r, 5) = Range("E4") 'ネタ元ファイルのA1セルをA6セルから順番に書き込む .Cells(r, 6) = Range("E5") 'ネタ元ファイルのG38セルをB6セルから順番に書き込む .Cells(r, 7) = Range("E6") 'ネタ元ファイルのC38セルをC6セルから順番に書き込む .Cells(r, 8) = Range("E7") 'ネタ元ファイルのE38セルをD6セルから順番に書き込む .Cells(r, 9) = Range("E8") 'ネタ元ファイルのA1セルをA6セルから順番に書き込む .Cells(r, 10) = Range("E9") 'ネタ元ファイルのG38セルをB6セルから順番に書き込む .Cells(r, 11) = Range("E10") 'ネタ元ファイルのC38セルをC6セルから順番に書き込む ActiveWorkbook.Close savechanges:=False Next End With End Sub
Sub R別能力一覧2()
Application.ScreenUpdating = False Dim i As Long, r As Long Dim f As Worksheet Set f = Sheets("ファイル名一覧表") With Sheets("能力一覧") ' .Range("A6").CurrentRegion.Offset(1, 0).ClearContents For i = 1 To f.Cells(Rows.Count, 1).End(xlUp).Row r = .Cells(Rows.Count, 1).End(xlUp).Row + 1 Workbooks.Open ThisWorkbook.Path & "\" & _ .Range("B3") & "_管理表\02\" & f.Cells(i, 1) .Cells(r, 1) = Range("A1") 'ネタ元ファイルのA1セルをA6セルから順番に書き込む .Cells(r, 2) = Range("Z1") 'ネタ元ファイルのG38セルをB6セルから順番に書き込む .Cells(r, 3) = Range("D2") 'ネタ元ファイルのC38セルをC6セルから順番に書き込む .Cells(r, 4) = Range("D3") 'ネタ元ファイルのE38セルをD6セルから順番に書き込む .Cells(r, 5) = Range("D4") 'ネタ元ファイルのA1セルをA6セルから順番に書き込む .Cells(r, 6) = Range("D5") 'ネタ元ファイルのG38セルをB6セルから順番に書き込む .Cells(r, 7) = Range("D6") 'ネタ元ファイルのC38セルをC6セルから順番に書き込む .Cells(r, 8) = Range("D7") 'ネタ元ファイルのE38セルをD6セルから順番に書き込む .Cells(r, 9) = Range("D8") 'ネタ元ファイルのA1セルをA6セルから順番に書き込む .Cells(r, 10) = Range("D9") 'ネタ元ファイルのG38セルをB6セルから順番に書き込む .Cells(r, 11) = Range("D10") 'ネタ元ファイルのC38セルをC6セルから順番に書き込む ActiveWorkbook.Close savechanges:=False Next End With End Sub
Sub TOTAL()
Call ファイル名一覧表作成 Call R別能力一覧 Call ファイル名一覧表作成2 Call R別能力一覧2 MsgBox "完了しました" End Sub
現在は、
01のフォルダーに01.csv
02のフォルダーに01a.csvを保存して上記マクロを実行するとになるところまで確認ができております
|[A] |[B] |[C]|[D]|[E]|[F]|[G]|[H]|[I]|[J]|[K]|[L] [3] |フォルダID| 20220223 |1 |2 |3 |4 |5 |6 |7 |8 |9 |10 ←順位 [4] 計測データ [5] | 01|タイム |6 |5 |1 |2 |3 |4 |7 |8 |9 |10 [6] | 01a|x値 |6 |1 |5 |4 |3 |2 |7 |8 |10 | 9
アドバイスいただけたら嬉しいです。
よろしくお願いいたします。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
Sub R別能力一覧() Application.ScreenUpdating = False Dim i As Long, r As Long Dim f As Worksheet Set f = Sheets("ファイル名一覧表") With Sheets("能力一覧") .Range("A5").CurrentRegion.Offset(1, 0).ClearContents For i = 1 To f.Cells(Rows.Count, 1).End(xlUp).Row r = .Cells(Rows.Count, 1).End(xlUp).Row + 1 Workbooks.Open ThisWorkbook.Path & "\" & _ .Range("B3") & "_管理表\01\" & f.Cells(i, 1) ' ここから c = Array("B", "D", "AH", "AI", "AJ", "AK") For j = 0 To UBound(c) Range("A1:AK10").Sort Key1:=Range(c(j) & "1"), Order1:=xlAscending, Header:=xlYes .Cells(r + j, 1) = Range("A1") .Cells(r + j, 2) = Range(c(j) & "1") .Cells(r + j, 3) = Range("E2") .Cells(r + j, 4) = Range("E3") .Cells(r + j, 5) = Range("E4") .Cells(r + j, 6) = Range("E5") .Cells(r + j, 7) = Range("E6") .Cells(r + j, 8) = Range("E7") .Cells(r + j, 9) = Range("E8") .Cells(r + j, 10) = Range("E9") .Cells(r + j, 11) = Range("E10") .Cells(r + j, 12) = Range("E11") Next ' ここまで変更 ActiveWorkbook.Close savechanges:=False Next End With End Sub
(わからん) 2022/02/24(木) 16:52
ありがとうございます。
実行すると、「コンパイル エラー
変数が定義されていません」
デバッグ画面で C= のところが表示される結果となりました。
(マネージャー) 2022/02/25(金) 08:58
変数を定義してください。
https://www.google.com/search?q=VBA+%E5%A4%89%E6%95%B0+%E5%AE%9A%E7%BE%A9
(わからん) 2022/02/25(金) 09:12
Dim c
Dim j As Long を追記でよいと思ったのですが
実行するとCSVファイルを探せなくなり
デバッグ画面で
Workbooks.Open ThisWorkbook.Path & "\" & _ .Range("B3") & "_管理表\01\" & f.Cells(i, 1) のところが黄色くなってしまいます。
Dim j As Longを消すとファイルにはたどり着いている感じでした。
jの定義が違うのでしょうか?
(マネージャー) 2022/02/25(金) 10:11
>実行するとCSVファイルを探せなくなり
変数を定義したことが影響するとは思えません。
>のところが黄色くなってしまいます。
そのときの「i」と「f.Cells(i, 1) 」の値はどうなっていますか?
(わからん) 2022/02/25(金) 10:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.