続いて、どの年代の選手が多いかを出してみた。
静岡県は、ゆるやかに、下がってきている感じ。
鹿児島県は、1980年~1994年のあたりの選手が多い。
熊本県は、1995年~2000年代のあたりが多く、勢いがある感じ。
山梨県は、二極化、1975年~1979年の選手、1995年~1999年の選手が多い。逆にそれ以外の選手は極端に少ない。
徳島県は、熊本県と同じ状況で、1995年~2000年代のあたりの選手が多い。こちらは徳島ヴォルティス効果もあるかもしれない。
と、一つ一つ見ていくと面白いかもしれない。

これは、Excelファイルで作ったモノですが、Excelファイルはこちら。
あとは、、、選手データ_都道府県名.xlsx を作ってるんですが、ここからデータを取得するようにしている。
以下みたいな感じ。割と力業で。
# 全体の処理時間の計測開始
$swTotal = [System.Diagnostics.Stopwatch]::StartNew()
try {
# JustCalc COMオブジェクトの作成
$app = New-Object -ComObject "JustCalc.Application"
$app.Visible = $false
# メインのブックを開く
$mainBookPath = "J出場割合.xlsx"
$book = $app.Workbooks.Open($mainBookPath)
$sheet = $book.Worksheets.Item("J出場割合(20260322)")
$folderPath = "C:\dev\tools\output\"
# 行 4 から 50 までループ
for ($i = 4; $i -le 50; $i++) {
$swStep = [System.Diagnostics.Stopwatch]::StartNew()
$targetValue = $sheet.Cells.Item($i, 2).Value()
if (-not $targetValue) { continue } # 値が空ならスキップ
$fileName = "選手データ_$targetValue.xlsx"
$targetFilePath = Join-Path $folderPath $fileName
if (Test-Path $targetFilePath) {
# ターゲットのブックを読み取り専用(True)で開く
$targetWorkbook = $app.Workbooks.Open($targetFilePath, 0, $true)
$targetSheet = $targetWorkbook.Sheets.Item("Sheet1")
# CountIf の実行 (K列: 11番目, AI列: 35番目)
$rangeK = $targetSheet.Range("K:K")
$countResult1 = $app.WorksheetFunction.CountIf($rangeK, $targetValue)
$sheet.Cells.Item($i, 5).Value = $countResult1
$rangeAI = $targetSheet.Range("AI:AI")
$countResult2 = $app.WorksheetFunction.CountIf($rangeAI, ">0")
$sheet.Cells.Item($i, 9).Value = $countResult2
# AI, AK, AM 列の値をチェックするループ
$rowCount = 0
$counts = @{
1955=0; 1960=0; 1965=0; 1970=0; 1975=0; 1980=0; 1985=0; 1990=0; 1995=0; 2000=0; 2005=0; 2010=0
}
# ループ範囲: 4 から countResult1 + 4 まで
$maxRow = [int]$countResult1 + 4
for ($row = 4; $row -le $maxRow; $row++) {
$valAI = $targetSheet.Cells.Item($row, 35).Value()
$valAK = $targetSheet.Cells.Item($row, 37).Value()
$valAM = $targetSheet.Cells.Item($row, 39).Value()
# すべて空ならループを抜ける
if ($null -eq $valAI -and $null -eq $valAK -and $null -eq $valAM) { break }
# 数値として加算
$sumValue = [double]$valAI + [double]$valAK + [double]$valAM
if ($sumValue -gt 0) {
$rowCount++
# --- 年代別集計の追加 ---
$valN = $targetSheet.Cells.Item($row, 14).Value()
if ($valN -is [System.DateTime]) {
$year = $valN.Year
# 5年刻みの開始年を算出 (例: 1958 -> 1955, 1962 -> 1960)
$startYear = $year - ($year % 5)
# 対象の年代が連想配列(hashtable)に存在すればカウントアップ
if ($counts.ContainsKey($startYear)) {
$counts[$startYear]++
}
}
}
}
# 13列目:合計カウント
$sheet.Cells.Item($i, 13).Value = [int]$rowCount
# 16列目以降:年代別の値を設定
$sheet.Cells.Item($i, 16).Value = [int]$counts[1955]
$sheet.Cells.Item($i, 17).Value = [int]$counts[1960]
$sheet.Cells.Item($i, 18).Value = [int]$counts[1965]
$sheet.Cells.Item($i, 19).Value = [int]$counts[1970]
$sheet.Cells.Item($i, 20).Value = [int]$counts[1975]
$sheet.Cells.Item($i, 21).Value = [int]$counts[1980]
$sheet.Cells.Item($i, 22).Value = [int]$counts[1985]
$sheet.Cells.Item($i, 23).Value = [int]$counts[1990]
$sheet.Cells.Item($i, 24).Value = [int]$counts[1995]
$sheet.Cells.Item($i, 25).Value = [int]$counts[2000]
$sheet.Cells.Item($i, 26).Value = [int]$counts[2005]
$sheet.Cells.Item($i, 27).Value = [int]$counts[2010]
# ターゲットブックを閉じる(保存しない)
$targetWorkbook.Close($false)
$swStep.Stop()
$stepTime = [Math]::Round($swStep.Elapsed.TotalSeconds, 3)
Write-Host "$targetValue : $stepTime 秒"
}
else {
Write-Warning "ファイルが見つかりません: $fileName"
}
}
# メインブックを保存して終了
$book.Save()
$book.Close()
$app.Quit()
}
catch {
Write-Error "エラーが発生しました: $_"
# エラーが発生した場合の詳細表示
Write-Host "--- エラー詳細 ---" -ForegroundColor Red
Write-Host "行番号: $row"
Write-Host "取得した値: $valN"
Write-Host "エラーメッセージ: $($_.Exception.Message)"
# さらに詳しい原因(スタックトレース)が必要な場合
Write-Host "詳細トレース: $($_.ScriptStackTrace)"
}
finally {
# メモリ解放
if ($null -ne $app) {
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($app) | Out-Null
}
Remove-Variable app -ErrorAction SilentlyContinue
$swTotal.Stop()
$totalTime = [Math]::Round($swTotal.Elapsed.TotalSeconds, 3)
Write-Host "---"
Write-Host "総処理時間: $totalTime 秒"
}

コメント