名称未設

【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

バックナンバー


この記事が気に入ったらサポートをしてみませんか?