【ExcelVBA公開模試】2次元の表をリストにする
文法を無視して、とりあえず動けばいいという邪道ExcelVBA講座こと「速読VBA単語」に準拠した問題を出題します。
問題
図1のように、1枚目のシートのA列にチーム名、1行目に略称、B2:K11に数値がランダムに入力されている。この表を用いて、図2のように、2枚目のシートのA2以降にリストとして出力しなさい。ただし、縦横の項目名が同じセル(B2,C3,D4,・・・,K11)を除く。
<図1>※ホーム・アンド・アウェー方式で2度ずつ対戦していることに注意してください。
<図2:完成イメージ>
わえなび式 正解例
(このページの下にあります)
目標回答時間
プロ3分以内、アマチュア10分以内に処理ができたら合格
この問題の出題範囲
「速読VBA単語」Program3-7まで
ご案内
ExcelVBAをなんとなく理解できればいいという初心者のための「速読VBA単語」を受講希望の方はカリキュラムをご覧ください。
正解例
Sub moshi()
team = Sheets(1).Range("B1:K1")
team_max = UBound(team, 2)
pt = Sheets(1).Range("B2:K11")
rowcnt = 2
For i = 1 To team_max
For j = 1 To team_max
If i <> j Then
Sheets(2).Cells(rowcnt, 1) = team(1, i)
Sheets(2).Cells(rowcnt, 2) = team(1, j)
Sheets(2).Cells(rowcnt, 3) = pt(i, j)
rowcnt = rowcnt + 1
End If
Next
Next
End Sub
(別解)
Sub moshi()
team = Sheets(1).Range("B1:K1")
team_max = UBound(team, 2)
pt = Sheets(1).Range("B2:K11")
ReDim listdata(1 To team_max * team_max, 1 To 3)
rowcnt = 0
For i = 1 To team_max
For j = 1 To team_max
If i <> j Then
rowcnt = rowcnt + 1
listdata(rowcnt, 1) = team(1, i)
listdata(rowcnt, 2) = team(1, j)
listdata(rowcnt, 3) = pt(i, j)
End If
Next
Next
Sheets(2).Range("A2").Resize(rowcnt, 3) = listdata
End Sub
バックナンバー
この記事が気に入ったらサポートをしてみませんか?