本日の練習課題です。わちょんさんのゆっくりITyoutubeをみながら、エクセルの真髄さんのVBA100本ノックの課題を解いてます。
本日は25本目です。
#VBA100本ノック 25本目
画像1のように「売上」シートに横に日付と金額が入力されています。
行数・列数(日数)は増減します。
A列はセル結合されています。
画像2のようにデータベース形式に変換して「売上DB」シートに出力してください。
※「売上DB」は既存で見出しも入っています。
VBA100本ノック 25本目:マトリックス表をDB形式に変換|VBA練習問題
縦横のマトリックス表をデータベース形式の縦に展開する問題です。ツイッター連動企画です。ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。VBAテスト用のサンプルデータは、VBA100本ノックの目次ページからもダウンロ...
Option Explicit
Sub VBA100_25()
Dim ws1, ws2 As Worksheet
Set ws1 = Sheets("売上")
Set ws2 = Sheets("売上DB")
Dim lastRow, lastColumn
lastRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row
' Debug.Print lastrow
lastColumn = ws1.Cells(1, Columns.Count).End(xlToLeft).Column
' Debug.Print lastcolumn
''
' ws2.Cells(2, 1).Value = ws1.Cells(2, 1).Value
' ws2.Cells(2, 2).Value = ws1.Cells(2, 2).Value
' ws2.Cells(2, 3).Value = ws1.Cells(1, 3).Value
' ws2.Cells(2, 4).Value = ws1.Cells(2, 3).Value
'
' ws2.Cells(3, 1).Value = ws1.Cells(2, 1).Value
' ws2.Cells(3, 2).Value = ws1.Cells(2, 2).Value
' ws2.Cells(3, 3).Value = ws1.Cells(1, 4).Value
' ws2.Cells(3, 4).Value = ws1.Cells(2, 4).Value
'
' ws2.Cells(4, 1).Value = ws1.Cells(2, 1).Value
' ws2.Cells(4, 2).Value = ws1.Cells(2, 2).Value
' ws2.Cells(4, 3).Value = ws1.Cells(1, 5).Value
' ws2.Cells(4, 4).Value = ws1.Cells(2, 5).Value
Dim i, k, j As Long
k = 2
For i = 2 To lastRow
For j = 3 To lastColumn
ws2.Cells(k, 1).Value = ws1.Cells(i, 1).MergeArea(1).Value
ws2.Cells(k, 2).Value = ws1.Cells(i, 2).Value
ws2.Cells(k, 3).Value = ws1.Cells(1, j).Value
ws2.Cells(k, 4).Value = ws1.Cells(i, j).Value
k = k + 1
Next j
Next i
End Sub
最終行の取得
lastRow = ws1.Cells(Rows.Count, 1).End(xlUp).Row
最終列の取得
lastColumn = ws1.Cells(1, Columns.Count).End(xlToLeft).Column
結合セルの指定方法
ws1.Cells(i, 1).MergeArea(1).Value
コメント