お世話になります。
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ランキング
-
チェックボックスのvalue値の取...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
char str[256]の256の意味は?
-
DataGridViewの特定列に入力さ...
-
Excel VBA メール作成について ...
-
Line Inputにて改行があっても...
-
エクセルシート名の制限を変更...
-
バイナリとBCDコード
-
COBOLのCOMP形式について
-
なんでブラウザでPHPを動かすた...
-
C#でのswitch文
-
「1TB」のHDDに日本語は何字入...
-
ポインター引数の関数でコンパ...
-
エクセルVBA:日付データの変換...
-
CreateProcessでの環境変数の設...
-
&jcode'convert(しても文字化け...
-
stable diffusionのエラー
-
printfの%eで指数部分の桁数を...
-
【HELP!!】Excelから保存したtx...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UWSCにおける変数の扱い方
-
チェックボックスのvalue値の取...
-
python 3.10で 同じlistに同じ...
-
マクロの書き換え箇所がわかり...
-
Perlで変数中のエスケープされ...
-
VB2010でラベルに文字を結合したい
-
VBScriptでカレントディレクト...
-
"use strict" を使っての定数宣言
-
多元配列の0初期化
-
エクセル2000マクロエラー...
-
pythonにCでのexternはありますか
-
配列へのポインタの代入
-
Excel操作で「コンポ-ネントが...
-
CSVから構造体へ代入
-
CGIで暗号化複合化
-
漢字交じり文字列からのlocalti...
-
条件一致の方法
-
VC6++ char配列の文字列をシリ...
-
perlのgrepでmyを付けた場合と...
-
fortranについて
おすすめ情報