![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e6f04cf)
お世話になります。
Private Type TestRecord
Col1 As String * 255
Col2 As String * 255
Col3 As String * 255
End Type
Sub ボタン1_Click()
Dim FName As String
Dim FileNo As Integer
Dim LineData As String
Dim TestRec() As TestRecord
FileNo = FreeFile
'選択したファイル名の取得
FName = Application.GetOpenFilename("CSV ファイル (*.CSV),*.CSV")
If FName = "False" Then
Exit Sub
End If
Open FName For Input As #FileNo
Do Until EOF(FileNo)
i = i + 1
Line Input #FileNo, LineData
ReDim TestRec(i)
TestRec() = Split(LineData, ",")
Debug.Print buf
Loop
Close #FileNo
End Sub
ファイルの中身
"テストID1","テスト姓1","テスト名1"
"テストID2","テスト姓2","テスト名2"
以上のコードを実行するとTestRec() =~の部分で型が一致しません
とエラーが出てしまいます。
よき解決方法があれば教えてください。宜しくお願いします。
No.2ベストアンサー
- 回答日時:
Split()はString配列を返してきます。
ですので、受け取る側がString配列でないので
”型が一致しません”と怒られるのです。
Str() as String
Col as Collection
Do Until EOF(FileNo)
i = i + 1
Line Input #FileNo, LineData
Str() = Split(LineData, ",")
Debug.Print buf
Col.Add(Str)
Loop
Close #FileNo
ReDim TestRec(i)
vnt as Variant
lCnt as Long
For Each vnt In Col
TestRec(lCnt).Col1 = vnt(0)
TestRec(lCnt).Col2 = vnt(1)
TestRec(lCnt).Col3 = vnt(2)
lCnt = lCnt + 1
next
dsuekichi様,siro7aka7様ご返答ありがとうございます。
要素はSTRINGで宣言していても、構造体自体はSTRINGではないので型エラーが発生してたのですね。
dsuekichi様が言うとおり一端配列に格納し、要素一個づつに代入していくというsiro7aka7様がかかれたコードを実行したところ、無事構造体へ格納することができました。
Dim FName As String
Dim FileNo As Integer
Dim LineData As String
Dim TestRec() As TestRecord
Dim Str() As String
Dim Col As New Collection
Dim vnt As Variant
Dim lCnt As Long
FileNo = FreeFile
'選択したファイル名の取得
FName = Application.GetOpenFilename("CSV ファイル (*.CSV),*.CSV")
If FName = "False" Then
Exit Sub
End If
Open FName For Input As #FileNo
Do Until EOF(FileNo)
i = i + 1
Line Input #FileNo, LineData
Str() = Split(LineData, ",")
Col.Add (Str)
Loop
Close #FileNo
ReDim TestRec(i)
For Each vnt In Col
TestRec(lCnt).Col1 = vnt(0)
TestRec(lCnt).Col2 = vnt(1)
TestRec(lCnt).Col3 = vnt(2)
lCnt = lCnt + 1
Next
No.1
- 回答日時:
「構造体(VBの用語では、「ユーザ定義型」)への代入」はできません。
#「ユーザ定義型同士の代入」は可能ですが、今回の用途には使えませんね。
「各要素ごと」に1つづつ代入してください。
#Splitの結果(配列)を別変数に一旦とっておいて、1つづつ代入する。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) Excel VBA でデータ転記について 1 2023/03/07 19:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonにCでのexternはありますか
-
チェックボックスのvalue値の取...
-
マクロの書き換え箇所がわかり...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
char str[256]の256の意味は?
-
COBOLのCOMP形式について
-
Excel VBA メール作成について ...
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
バイナリとBCDコード
-
Excel 1セル当りの文字数が2...
-
バイト列とバイナリ列の違いが...
-
DataGridViewの特定列に入力さ...
-
【VB2005】テキストボックス内...
-
エクセルシート名の制限を変更...
-
テキストファイルの結合について
-
printfの%eで指数部分の桁数を...
-
perlプログラミング 空白行削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
多元配列の0初期化
-
VB2010での連立方程式の計算
-
なぜかわかりませんscanf()の戻...
-
perlのgrepでmyを付けた場合と...
-
マクロの書き換え箇所がわかり...
-
c言語 グローバル変数
-
算術演算子
-
配列へのポインタの代入
-
UWSCにおける変数の扱い方
-
$template->output();の時に ...
-
@color1 = ('0000ae',・・・,'$...
-
ポインター引数の関数でコンパ...
-
10Mバイトて文字数に すると何...
-
UTF-8で5~6バイトになる文字コ...
-
エクセルシート名の制限を変更...
-
COBOLのCOMP形式について
-
stable diffusionのエラー
-
ビットスワップとバイトスワッ...
-
char str[256]の256の意味は?
おすすめ情報