![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
お世話になります。
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バイトて文字数に すると何...
-
エクセルシート名の制限を変更...
-
ピクセル,dpiから容量(バイト...
-
Excel VBA メール作成について ...
-
UTF-8で5~6バイトになる文字コ...
-
COBOLのCOMP形式について
-
char str[256]の256の意味は?
-
Line Inputにて改行があっても...
-
SQLで1バイト、2バイト混在...
-
バイナリとBCDコード
-
DataGridViewの特定列に入力さ...
-
[VBScript][wsh]byte単位でのデ...
-
cookieにカンマ区切りでつめこ...
-
バイト列とバイナリ列の違いが...
-
3バイト文字(UTF-8)をprintfで...
-
ビットスワップとバイトスワッ...
-
int型(2バイト)データの分割
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
pythonにCでのexternはありますか
-
@color1 = ('0000ae',・・・,'$...
-
マクロの書き換え箇所がわかり...
-
チェックボックスのvalue値の取...
-
配列へのポインタの代入
-
VB2010での連立方程式の計算
-
高校数学のベーシック
-
なぜかわかりませんscanf()の戻...
-
Perlで変数中のエスケープされ...
-
格子運動の連立同次方程式
-
代入方法
-
変数内の文字の数
-
多元配列の0初期化
-
perlのプログラミングについて
-
なぜ?
-
算術演算子
-
CSVから構造体へ代入
-
漢字交じり文字列からのlocalti...
-
$template->output();の時に ...
-
VC6++ char配列の文字列をシリ...
おすすめ情報