# VBAでCSVデータを自動で読み込ませたい

**URL:** <https://community.cybozu.dev/t/topic/1533>\
**Category:** kintone 開発相談\
**Created:** [2023 年 4 月 18 日午前 3:43 UTC](https://community.cybozu.dev/t/topic/1533 "2023-04-18T03:43:54Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account311](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account311](https://community.cybozu.dev/u/Legacy_Account311)\
**Post date:** [2023 年 4 月 18 日午前 3:43 UTC](https://community.cybozu.dev/t/topic/1533/1 "2023-04-18T03:43:54Z")

</div>

Option Explicit

Const ForReading = 1  
Const TristateTrue = -1

Sub ImportCSVToKintone()

&nbsp; &nbsp; Dim FilePath As String  
&nbsp; &nbsp; Dim CSVData As String  
&nbsp; &nbsp; Dim CSVRows() As String  
&nbsp; &nbsp; Dim CSVRow() As String  
&nbsp; &nbsp; Dim i As Long  
&nbsp; &nbsp; Dim Records As String  
&nbsp; &nbsp; Dim KintoneURL As String  
&nbsp; &nbsp; Dim KintoneAppID As String  
&nbsp; &nbsp; Dim KintoneAPIToken As String  
&nbsp; &nbsp; Dim objHTTP As Object  
&nbsp; &nbsp; Dim FSO As Object, TS As Object

&nbsp; &nbsp; ’ CSVファイルのパスを指定してください  
&nbsp; &nbsp; FilePath = “C:\Users\yotar\_irz3cuj\OneDrive\デスクトップ\津田 のコピー.csv”

&nbsp; &nbsp; ’ KintoneのURL、アプリID、APIトークンを指定してください  
&nbsp; &nbsp; KintoneURL = “[https://eco-logistics.cybozu.com/k/v1/records.json](https://eco-logistics.cybozu.com/k/v1/records.json)”  
&nbsp; &nbsp; KintoneAppID = “813”  
&nbsp; &nbsp; KintoneAPIToken = “aaabubububububububu”

&nbsp; &nbsp; ’ CSVファイルを読み込む (UTF-8 エンコーディング対応)  
&nbsp; &nbsp; Set FSO = CreateObject(“Scripting.FileSystemObject”)  
&nbsp; &nbsp; Set TS = FSO.OpenTextFile(FilePath, ForReading, False, TristateTrue) ’ TristateTrue for UTF-8 encoding  
&nbsp; &nbsp; CSVData = TS.ReadAll  
&nbsp; &nbsp; TS.Close

&nbsp; &nbsp; ’ CSVデータを行ごとに分割  
&nbsp; &nbsp; CSVRows = Split(CSVData, vbCrLf)

&nbsp; &nbsp; ’ ヘッダー行をスキップし、データ行をKintoneにインポート  
&nbsp; &nbsp; For i = 1 To UBound(CSVRows) - 1  
&nbsp; &nbsp; &nbsp; &nbsp; If Len(CSVRows(i)) \> 0 Then  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CSVRow = Split(CSVRows(i), “,”)

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ’ Kintoneのフィールドコードに合わせてデータを整形  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Records = Records & “{”“納品日”“: {”“value”“: “”” & CSVRow(0) & “”“}, ““配送先番号””: {”“value”“: “”” & CSVRow(1) & “”“}, ““重量””: {”“value”“: “”” & CSVRow(2) & “”“}}”  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If i \< UBound(CSVRows) - 1 Then  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Records = Records & “,”  
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If  
&nbsp; &nbsp; &nbsp; &nbsp; End If  
&nbsp; &nbsp; Next i

&nbsp; &nbsp; ’ Kintone REST APIを使ってデータをインポート  
&nbsp; &nbsp; Set objHTTP = CreateObject(“MSXML2.ServerXMLHTTP”)  
&nbsp; &nbsp; With objHTTP  
&nbsp; &nbsp; &nbsp; &nbsp; .Open “POST”, KintoneURL, False  
&nbsp; &nbsp; &nbsp; &nbsp; .setRequestHeader “Content-Type”, “application/json”  
&nbsp; &nbsp; &nbsp; &nbsp; .setRequestHeader “X-Cybozu-API-Token”, KintoneAPIToken  
&nbsp; &nbsp; &nbsp; &nbsp; .send “{”“app”“: “”” & KintoneAppID & “”“, ““records””: [” & Records & “]}”  
&nbsp; &nbsp; End With

&nbsp; &nbsp; &nbsp; &nbsp; If objHTTP.Status = 200 Then  
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox “CSVデータのインポートが成功しました。”  
&nbsp; &nbsp; Else  
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox “エラーが発生しました。” & vbCrLf & "ステータス: " & objHTTP.Status & vbCrLf & "レスポンス: " & objHTTP.responseText  
&nbsp; &nbsp; End If

End Sub

このコードを実行したら、インポートが成功しました。と返ってくるのですが、  
アプリにレコードが入ってません。  
なぜだかわかる方教えていただけるとありがたいです。

&nbsp;

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account871](https://avatars.discourse-cdn.com/v4/letter/l/50afbb/32.png) [@Legacy\_Account871](https://community.cybozu.dev/u/Legacy_Account871)\
**Post date:** [2023 年 4 月 18 日午前 6:18 UTC](https://community.cybozu.dev/t/topic/1533/2 "2023-04-18T06:18:16Z")

</div>

KintoneAPITokenの値 が公開されています。本物でもなくても何かサンプルっぽい値にしませんか？

---

<div class="post-metadata">

**Author:** ![Legacy\_Account311](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account311](https://community.cybozu.dev/u/Legacy_Account311)\
**Post date:** [2023 年 4 月 18 日午前 6:31 UTC](https://community.cybozu.dev/t/topic/1533/3 "2023-04-18T06:31:45Z")

</div>

ありがとうございます。  
変更しました。

&nbsp;

---

<div class="post-metadata">

**Author:** ![Legacy\_Account871](https://avatars.discourse-cdn.com/v4/letter/l/50afbb/32.png) [@Legacy\_Account871](https://community.cybozu.dev/u/Legacy_Account871)\
**Post date:** [2023 年 4 月 18 日午前 8:39 UTC](https://community.cybozu.dev/t/topic/1533/4 "2023-04-18T08:39:23Z")

</div>

1. 

&nbsp; &nbsp; &nbsp; &nbsp; If objHTTP.Status = 200 Then  
&nbsp; &nbsp; &nbsp; &nbsp; MsgBox “CSVデータのインポートが成功しました。”

のあたりに、objHTTP.responseTextとか入力するとどうなりますか？

1. 

VBAから cli-kintone.exeを呼び出した方が楽ではありませんか？batファイルでも何でもいいかもしれません。

1. 

どうしてもVBAからということであれば、JSONの部分を  
GitHub - VBA-tools/VBA-JSON: JSON conversion and parsing for VBA  
[https://github.com/VBA-tools/VBA-JSON](https://github.com/VBA-tools/VBA-JSON)  
をつかいませんか？

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2023 年 9 月 22 日午前 6:42 UTC](https://community.cybozu.dev/t/topic/1533/5 "2023-09-22T06:42:28Z")

</div>

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。
