質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

4771閲覧

CSVファイルの読込みを行ったら、型が一致しなかったり、オブジェクトが必要だったりして動かない

zigutabi

総合スコア57

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

1クリップ

投稿2020/03/16 01:36

編集2020/03/16 02:18

現在、ExcelのマクロでCSVファイルからデータを読込む処理を実装しようとしております。
読込んだ行を一旦配列に格納しようとしたのですが、型が一致しないとエラーが生じております。

VBA

1Sub CSV読込み() 2 Const path As String = "C:\Users\マイネーム\desctop\csv***.csv" 3 Dim values As Variant 'values()にすると、bufで「オブジェクトが必要です」と表示 4 Dim buf As String 5 Dim i As Integer 6 i = 1 7 8 Open path For Input As #1 9 Do Until EOF(1) 10 Line Input #1, buf 11 ReDim Preserve values(i) 'ここで、「型が一致しません」と表示 12 Set values(i) = buf 13 i = i + 1 14 Loop 15 Close #1 16End Sub

CSVの行を動的に取得するため、Preserveしております。
調べてみたのですが、該当する記事がなくわかりませんでした。

ご助言頂ければ幸いです。

追記、setを外したら動きました。
逆になんでsetがいらないのかがわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanami12

2020/03/16 02:02

実際、格納するデータがどのようなものか サンプルを記載されると、回答が得られやすいと おもいます。 つまり、csvの中身のデータ
zigutabi

2020/03/16 02:17

全部記載するのは冗長になりますので、先頭行のみ記載します。 ""年月","所属コード","電話番号","ユーザーコード","内訳項目名","金額","課税区分","記事欄","内訳項目識別区分","内訳項目コード","課税区分コード"" 読込まれるデータはダブルコーテーションで囲まれた1行の文字列になります。
guest

回答2

0

ベストアンサー

Set ステートメント

オブジェクト参照を変数またはプロパティに割り当てます。

bufString型なのでSetは使用できません。普通に代入します。

ReDim ステートメント

ReDimステートメントは、 Private、 Public、またはDim ステートメント (次元の添字なし) を使用して、既に正式に宣言されている動的配列のサイズを変更したり、サイズを変更したりするために使用します。

なので、valuesは配列にする必要があります。

VBA

1Dim values() As Variant` 2・・・略・・・ 3 ReDim Preserve values(i) 4 values(i) = buf 5・・・略・・・

投稿2020/03/16 02:16

編集2020/03/16 02:24
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zigutabi

2020/03/16 02:22

参考にした記事だとsetが必要とありました。 https://www.sejuku.net/blog/69046 でも、何で今回のはsetがいらなかったのでしょうか? バージョンを追記し忘れました。 バージョンはOffice365になります。
Y.H.

2020/03/16 02:29

代入する対象がオブジェクトの場合はSetが必要です。 質問記載のコードはオブジェクトではなくString型を代入しようとしているのでSetは使用できません。
zigutabi

2020/03/16 02:30

つまり、Setを使うのは代入する値、式でいうところの右側で決めるとのことですね。 〇 str(i) = 文字列 〇 Set str(i) = [文字列, 文字列, 文字列] × Set str(i) = 文字列
Y.H.

2020/03/16 02:55

〇 dim val As String : val = "value" × dim val As String : Set val = "value" 〇 dim va As Range : Set val = [A1, A2, A3] × dim val As String : Set val = [A1, A2, A3]
guest

0

エラーを訂正する回答ではありませんが、違う視点からの解決方法です。

CSVファイルをエクセルに読み込む

投稿2020/03/16 02:10

freemann

総合スコア264

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

zigutabi

2020/03/16 02:19

ブックマークしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問