コスト削減において、もっとも大きいな削減は人件費となりますが、通常の業務を少しDXすることでコスト削減を図ることが可能です。
■社内DXの依頼内容
お客様に送る郵送物を、封入物の重さによって印刷会社1・2・3に分類しコスト削減を図りたい。
■社内DXの条件
・封入物はA~Eの5種類
封入物A:2g
封入物B:3g
封入物C:5g
封入物D:10g
封入物E:15g
・郵送物の重さによって印刷会社を変える
15g未満:印刷会社1
35g未満:印刷会社2
35g以上:印刷会社3
・リストは横方向に順不同で封入物が記載されている
■諸元
・封入物のリストから重さを検索する
・検索には連想配列(Dictionaryオブジェクト)を使用して検索を高速化する
・封入物の総重量によって印刷会社を1~3で設定
■作成方法
1.シート「リスト」に顧客情報と封入物のリストを用意(今回は項番1~100でセット)
2.シート「封入物リスト」に封入物名と重さのリストを用意
3.実際にマクロを書いていく
Sub Insatsu_List() Dim y As Long '/--行周回用のカウンタ--/' Dim x As Integer '/--列周回用のカウンタ--/' Dim dicFunyu As Object '/--封入物の連想配列用オブジェクト--/' Dim strKey As String '/--検索用キー格納--/' Dim lngOmosa As Long '/--重さを格納--/' Dim strKaisha As String '/--印刷会社名--/' '/--オブジェクトを連想配列(Dictionary)としてセット--/' Set dicFunyu = CreateObject("Scripting.Dictionary") '/--連想配列作成--/' For y = 2 To 6 strKey = Sheets("封入物リスト").Cells(y, 1).Value lngOmosa = Sheets("封入物リスト").Cells(y, 2).Value '/--連想配列に検索キー(strKey)と値(lngOmosa)を格納--/' dicFunyu.Add strKey, lngOmosa Next y '/--リスト内のデータに重さ、印刷会社を記入--/' For y = 2 To 101 lngOmosa = 0 For x = 3 To 7 strKey = Sheets("リスト").Cells(y, x).Value lngOmosa = lngOmosa + dicFunyu.Item(strKey) Next x Sheets("リスト").Cells(y, 8) = lngOmosa Select Case lngOmosa Case Is < 15 strKaisha = "1" Case Is < 35 strKaisha = "2" Case Is >= 35 strKaisha = "3" End Select Sheets("リスト").Cells(y, 9) = strKaisha Next y Set dicOmosa = Nothing End Sub
■マクロ解説
1.連想配列の作成
'/--オブジェクトを連想配列(Dictionary)としてセット--/' Set dicFunyu = CreateObject("Scripting.Dictionary") '/--連想配列作成--/' For y = 2 To 6 strKey = Sheets("封入物リスト").Cells(y, 1).Value lngOmosa = Sheets("封入物リスト").Cells(y, 2).Value '/--連想配列に検索キー(strKey)と値(lngOmosa)を格納--/' dicFunyu.Add strKey, lngOmosa Next y
・Set dicFunyu = CreateObject("Scripting.Dictionary")
dicFunyuというオブジェクトをDictionaryとしてセットします。
※Officeの365とか、なぜか旧Verと参照設定が異なる場合があるので、基本参照設定を使わないで作成しています
・dicFunyu.Add strKey, lngOmosa
連想配列に検索キー(strKey)と値(lngOmosa)を代入します。
ルールとしては必ず検索キー1に対して値1となること。
Excel関数のVlookupとかみたいに検索キー1つに対して複数の値をとることはできません。
※アイデア次第でやる方法はいくつかありますが別の機会に。
2.重さの取得
strKey = Sheets("リスト").Cells(y, x).Value lngOmosa = lngOmosa + dicFunyu.Item(strKey)
・strKey = Sheets("リスト").Cells(y, x).Value
strKey に封入物名を代入します。
・lngOmosa = lngOmosa + dicFunyu.Item(strKey)
検索キー(strKey)からItem(値)を取り出します。
いかがでしょうか。
このように、少しのアイデアで十分に社内DXが実現できるようになります。
■社内DX案件紹介
【社内DX案件紹介】データの期間によってレコードを分割しファイル出力する
0 件のコメント:
コメントを投稿