VBA_100_25

本日の練習課題です。わちょんさんのゆっくり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

コメント

タイトルとURLをコピーしました