74本目 複数の表をDB形式に変換

VBA100本ノック

VBA100本ノック 74本目を動画で解説しています。Excelの神髄さんの模範解答はコチラ


問題

#VBA100本ノック74本目
「売上」シートには、A列B列に取引先コードと名称があり、
その下に見出し行から始まるデータがあります。
「DB」シートにデータベース形式で出力してください。
見出し行は文字列も含め統一されています。
取引先ごとの行数は不定です。
※「DB」は既存で見出しも書式も設定済。

解答

Sub ノック74本目()

    Dim ws売上 As Worksheet: Set ws売上 = Sheets("売上")
    Dim wsDB As Worksheet: Set wsDB = Sheets("DB")
    Dim i As Long, j As Long, lastrow As Long
    lastrow = ws売上.Cells(Rows.Count, 1).End(xlUp).Row
    
    Dim 取引先CD, 取引先名, 商品CD, 商品名, 年月, 金額, n
    n = 2
    For i = 1 To lastrow
        If ws売上.Cells(i, 2) Like "取引先*" Then 'B列が取引先~だったら
            取引先CD = ws売上.Cells(i, 1)
            取引先名 = ws売上.Cells(i, 2)
        ElseIf ws売上.Cells(i, 2) = "商品名" Or ws売上.Cells(i, 2) = "" Then
            '何もしません
        Else
            For j = 3 To 14
                '4つの値を探して入れていく…
                商品CD = ws売上.Cells(i, 1)
                商品名 = ws売上.Cells(i, 2)
                年月 = ws売上.Cells(2, j)
                金額 = ws売上.Cells(i, j)
                
                wsDB.Cells(n, 1) = 取引先CD '配列のほうがいいかも
                wsDB.Cells(n, 2) = 取引先名
                wsDB.Cells(n, 3) = 商品CD
                wsDB.Cells(n, 4) = 商品名
                wsDB.Cells(n, 5) = 年月
                wsDB.Cells(n, 6) = 金額
                n = n + 1
            Next j
        End If
    Next i

End Sub

■考え方・流れ
0:00 冒頭・問題確認
2:04 やりたいことを整理する
4:15 シートの定義とループの組み立て
5:36 出力したいデータを変数にする
7:26 それぞれの変数に値をぶち込む

新人君
新人君

DB形式にする技術は
とっても大事ですよね!

ブチョ
ブチョ

そうかな?
そんなことも無いと思うぞ!

新人君
新人君

逆張りの部長…

やりたいことを整理する

さて!じゃあまずは…
やっていきたいことの整理をしよう!!
これはマジで大事だぞww
って言うまでもないか…ww

行…列…
最終行、最終列までループが必要!
行を回すときには分岐が必要!
そんなとこかな?
軽くイメージだけしとこう!

イメージとしてはこんな感じ!!!!!
最終行、最終列は余裕があったら求める感じでいいかな!

シートの定義とループの組み立て

よし!そしたらお次!
シートの定義と、ループを組み立てていこう!
まずはシートから!!

この辺は…ノック一桁の時の復習かな??w

出力したいデータを変数にする

お次!!
出力していきたいデータをそれぞれ変数に格納しよう!

ほんで、格納した後のデータをこんな感じで出す!(例として2列目に出してる)

あ、行数をプラスする用のn = n + 1も追加で!

それぞれの変数に値をぶち込む

最後!!
あとは変数に値をぶち込んでいくだけなんだけど…

若干条件分岐しないといけないとこがあるね!

このへんは…色んな考え方があると思うから…
あくまで参考程度に見てくれると嬉しいかな!!!

これと全くおんなじことをすることはないだろうしね!!

もしB列のi行目が”取引先~”だったら!!
の時の分岐!

もし…i行目が空白、もしくは年月が入ってた場合の分岐も!!

こうしてあげれば~Misscntって変数がぁ~
まわりまわって~!
カウントできるのさぁ~!

こう見ると…
こんな感じ!!!
って言葉…何回使ってるんやろ…(まあ動画だからいいか…)

終わりです!!お疲れさまでした!

ブチョ
ブチョ

ま、これは問題ないかな!

新人君
新人君

お疲れさまでした!

あとがたり

おはこんばんちは。uぷ主です。
74本目、複数の表をDB形式に変換する問題でした!!

いやいや、こういうのって地味に、めっちゃありますよね。

いい加減にしてほしいっす…

ま、実務やってると…色んな所で色んなデータを作ってるのを
まとめたり集計したり分析したりしないといけないことも多いから…
仕方ないんだろうけどなぁ…

特に…総務省が出してる…
e-smart的なデータと…自社で出してるデータを分析しようとしたりしたときとか…
良く起こります…こういうこと…

ぜーんぶ一つのDBで全てを管理出来たらいいんですけどね~
流石にそういうわけにもいかんか…

コメント

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