ExcelのVLOOKUP地獄と参照データの陳腐化や紛失

## **Excelをデータベースとして活用する際の課題と解決策**

僕自身、業務の中でExcelをデータ管理ツールとして利用しています。しかし、**関数の煩雑さ**、**データの陳腐化**、**アクセス権限の管理の難しさ** などの課題を日々実感しています。そこで、**基幹システム（ERP）であるOdooを導入し、段階的に移行を進めています**。  

https://www.odoo.com/ja_JP

### **1. Excel活用の限界**  
Excelは手軽なツールですが、業務が拡大するにつれて、以下の問題が顕著になっています。  
✅ **関数が複雑化し、管理が困難になっています**  
✅ **データ更新に手間がかかっています**  
✅ **セキュリティ管理が難しく、誤操作のリスクが高まっています**  

このままでは業務の効率が悪くなるため、根本的な改善策を検討し、Odooの活用を進めています。  

---

### **2. VLOOKUP関数の課題と解決策**  
➡ **基幹システム（Odoo）を活用し、データの一元管理を進めています**  
ExcelのVLOOKUP関数は列の追加・変更に弱く、関数の再設定が頻繁に発生しています。そこで、Odooのデータベースを利用し、検索機能を強化することで、Excel側の関数依存を減らし、管理の負担を軽減しています。  

---

### **3. 参照データの陳腐化と解決策**  
➡ **Odooのリアルタイム更新機能を活用し、最新データを保持しています**  
Excelでは、複数のファイルを手動更新していたため、古いデータが残りやすく、誤った情報を参照するリスクが発生していました。Odooを導入することで、リアルタイムでデータを管理でき、常に最新情報を利用できるようになっています。  

---

### **4. セキュリティ管理の課題と解決策**  
➡ **Odooのアクセス管理機能を利用し、権限設定を強化しています**  
Excelでは、誰でもデータにアクセスできるため、誤操作や不正な編集が発生しやすい問題がありました。Odooでは、ユーザーごとに閲覧・編集の権限を設定できるため、業務データの安全性を向上させています。  

---

### **5. Odoo導入の決断**  
Excelの限界を感じ、すぐに完全移行するのではなく、**段階的なOdoo導入** を進めています。  

✅ **まずはマスターデータ（顧客・商品）をOdooに統合しています**  
✅ **ExcelのVBAを活用し、必要なデータをOdooから取得しています**  
✅ **業務の負担を減らしながら、Odooの機能を拡張しています**  

例えば、顧客データをOdooで管理することで、Excel側では手動更新の手間が省かれ、データの正確性が向上しています。  

:::note warn
**ERPって難しい**
ERPは、営業支援、販売管理、在庫管理、会計システムと多くの業務フローに対応しています。そのため、マスターモデル（リソースモデル）も高度に抽象化されています。

Odooを例にすると、**顧客管理を行う`res.partner`モデル**は、人だけではなく、会社も管理し、顧客だけでなく、取引先やその関係者、自社の関係者までもが、**１つのモデルで抽象化されて管理されています。**
また、**商品（製品）の場合**は、１つのモデルではなく、`product.template`(抽象的)と`product.product`(具現的)の２つのモデルで商品（製品）を管理しており、**商品（製品）のバリエーションを表現できます。**

このように、ERPには、**標準化されたノウハウが詰め込まれており**、とっても**難しく感じます。**
:::


---

### **6. Odooの実際の活用方法**  
Odooを業務に組み込んだことで、僕が感じているメリットは大きく３つあります。  

**① 顧客管理の効率化**  
以前はExcelで顧客リストを更新していましたが、Odooのコンタクト管理(連絡先)を活用することで、変更履歴が記録され、「誰がいつ更新したか」がすぐに分かるようになっています。  

**② 実績管理の改善**  
Excelでは、手動で実績データを集計していましたが、Odooでは業務実績が自動で記録され、リアルタイムで確認できるため、集計作業が不要になっています。  

**③ 商品管理における上代・下代の管理強化**  
Odooを活用することで、上代（販売価格）と下代（仕入価格）を明確に管理し、価格設定や利益率の分析が容易になっています。特に、**価格変更の履歴を残すことで、過去の値動きを把握しやすくなり、適切な価格戦略を立てる** ことができるようになっています。  

:::note info
**Odooを試す**

Odooには、有償版と無償版とがあり、**無償版**は、**コミュニティ・エディション**として、その**ソースコードが公開**されています。


次の開発ツールを使えば、**手元のパソコンでもOdooを試すことができます。**

https://github.com/jp-rad/odoo-addons-dev
:::

---

### **7. OdooのAPIを利用したExcelのVBA連携**  
VBAを用いてOdooのAPI経由で顧客データを取得し、Excelに反映することで、顧客の最新データを活用しながら業務を進めることができます。  

**次のVBA関数**は、Odooの`res.partner`テーブルから、`name`項目をキーに指定した任意の項目の値を取得する関数であり、**セルの数式として利用できます。**  

- セルの数式：`=FetchPartnerField(B2, "email")`

```vb
Option Explicit

Function FetchPartnerField(sName As String, sFieldName As String, Optional oBooleanField As Boolean = False) As Variant
    Dim rs As OdResult
    Dim oc As OdClient
    Dim col As Collection
    Dim dic As Dictionary
    
    ' Odooへ接続
    Set oc = GetAuthConn()
    
    ' 顧客データの検索
    Set col = OdRpc.NewList
    With OdRpc.NewDomain
        .AddArity OdRpc.NewField("name").Eq(sName)  ' nameを検索
        .BuildAndAppend col
    End With
    Set dic = OdRpc.NewDict
    With OdRpc.SetList(dic, "fields")               ' 指定した項目のみ取得
        .Add sFieldName
    End With
    dic.Add "limit", 1                              ' 取得レコードは、1件まで
    Set rs = oc.Model("res.partner").Method("search_read").ExecuteKw(col, dic)
    
    ' データの有無
    If rs.Result.Count = 0 Then
        ' データなし
        GetResPartner = CVErr(Excel.XlCVError.xlErrNA)
    Else
        ' 1件目の項目値を返す
        GetResPartner = rs.Result(1)(sFieldName)
        ' Boolean型の項目ではなく、その項目値が偽の場合、Null値に置き換える
        If Not oBooleanField And VarType(GetResPartner) = vbBoolean Then
            If Not GetResPartner Then
                GetResPartner = CVErr(Excel.XlCVError.xlErrNull)
            End If
        End If
    End If
End Function
```

このような手法を活用することで、Excelの利便性を保ちつつ、Odooを活用したデータ管理を進めています。  

:::note info
**VBA連携**
Odooには、**External API**が提供されており、**XML-RPC**や**JSON-RPC**による**リモートアクセスが可能です。**

次のツールを使うことで、**Excel等のVBAを用い、JSON-RPC経由でOdooのデータにアクセス**できます。

https://github.com/jp-rad/odoo-json-rpc-vba

:::


---

### **8. まとめ**  
基幹システムのOdooを導入することで、業務の効率化とデータ管理の最適化を進めています。  

✅ **Odooでデータを一元管理し、Excel作業の負担を軽減しています**  
✅ **Odooのリアルタイム更新により、最新データを常に活用しています**  
✅ **ERPを活用し、権限管理を強化し、セキュリティを向上させています**  
✅ **スモールスタートで導入し、業務の移行をスムーズに進めています**  

Odooを基幹システムとして活用し、**Excelとの適切なバランスを保ちながら、よりスマートな業務管理を実現しています**！