excel-vba-point-view8

目次

速習 Excel VBA 8

商品マスタを合成する

事業所毎に異なる製品マスタを本社用に合成します

アルゴリズム

Excel-VBAで内容に差異のある二つの表を合成します。

ソースコード

Private Sub CommandButton1_Click()
   Set ws = Worksheets("商品マスタ合成")
    
   ' 項目のコピー
   For i = 2 To 6
     ws.Cells(24, i) = ws.Cells(11, i)
   Next i
    
    行札幌 = 12: 終札幌 = 20
    行福岡 = 12: 終福岡 = 19
    行本社 = 25:
    
    Do
       商品札幌 = Cells(行札幌, 2)
       商品福岡 = Cells(行福岡, 8)
       'Debug.Print 商品札幌, 商品福岡, StrComp(商品札幌, 商品福岡)
       'StrComp(商品札幌, 商品福岡) = -1 商品札幌,< 商品福岡
       'StrComp(商品札幌, 商品福岡) =  0 商品札幌,= 商品福岡
       'StrComp(商品札幌, 商品福岡) =  1 商品札幌,> 商品福岡
       
       If StrComp(商品札幌, 商品福岡) = 0 Then  '等しい
            Cells(行本社, 2) = 商品札幌
            For i = 2 To 6
              ws.Cells(行本社, i) = ws.Cells(行札幌, i)
            Next i
            If 行札幌 <= 終札幌 Then 行札幌 = 行札幌 + 1
            If 行福岡 <= 終福岡 Then 行福岡 = 行福岡 + 1
            行本社 = 行本社 + 1
       End If
       
       If StrComp(商品札幌, 商品福岡) = -1 Then '札幌が小さい
            Cells(行本社, 2) = 商品札幌
            For i = 2 To 6
              ws.Cells(行本社, i) = ws.Cells(行札幌, i)
            Next i
            If 行札幌 <= 終札幌 Then 行札幌 = 行札幌 + 1
            行本社 = 行本社 + 1
       End If
       
       If StrComp(商品札幌, 商品福岡) = 1 Then '福岡が小さい
            Cells(行本社, 2) = 商品福岡
            For i = 2 To 6
              ws.Cells(行本社, i) = ws.Cells(行福岡, i)
            Next i
            If 行福岡 <= 終福岡 Then 行福岡 = 行福岡 + 1
            行本社 = 行本社 + 1
       End If
       
       'If 行札幌 < 終札幌 Then 行札幌 = 行札幌 + 1
       'If 行福岡 < 終福岡 Then 行福岡 = 行福岡 + 1
       Debug.Print 行札幌, 行福岡, 行本社
       If InputBox("無限ループ:e") = "e" Then Exit Do
    Loop Until (行札幌 > 終札幌 And 行福岡 > 終福岡) '終了条件
    
End Sub

よかったらシェアしてね!
目次