はじめに
仕事の効率化のためにたまに勉強しながらvbaでマクロを作ってます。
現状はコードを調べて切り貼りする程度の知識ですが、調べても見つからないため質問しました。
前提
VBAでcsvを読み込んでline inputで配列に入れようとしている段階でエラーがおこっています。
###原因
csv作成段階でwebフォームの入力によってセル内改行がChr(13)になったため
Chr(13)を参照して行を判断するline inputが誤動作してることがわかりました。
###試したこと
そこで、line inputをする前に開いたcsv内の該当フォームの箇所に存在するChr(13)をChr(10)へ書き換えることにしましたが
それにより今度はどうすればline inputが使えるようになるかわからなくなっています。
「Chr(13)やCRコードをデータに含むcsvのline inputの取り込み方法」なども調べましたが下記サイトくらいしか見つかりませんでした。
参考にしたサイト
https://tonari-it.com/vba-csv-camma/
csvの読み込みと配列への格納
VBA
1Sub test1() 2 Dim s_buf As String 3 Dim fname As String 4 Dim buf As String 5 6 7 Call new_file_check(fname) 'ダウンロードフォルダにある当日の日付が入った最新ファイルを参照 8 Open fname For Binary As #1 9 10 ReDim b_buf(1 To LOF(1)) 11 Get #1, 1, b_buf 12 Close #1 13 14 '読み込んだデータをUnicodeに変換 15 s_buf = StrConv(b_buf, vbUnicode) 16 Debug.Print s_buf 17 18 s_buf = replaceColon(s_buf) 19 Debug.Print s_buf 20 21'以下機能しない 22Do Until EOF(1) 23 24 Line Input #1, buf 25 26 Dim aryline As Variant '文字列格納用配列変数 27 aryline = Split(Replace(buf, """", ""), ",") '読み込んだ行を,切りで配列変数に格納 28 29 r = r + 1 30Loop 31 32End Sub
###""で囲まれた範囲内のChr(13)をChr(10)に置換
フォーム入力された箇所は""で囲われているためその範囲内の改行だけ直す
VBA
1Function replaceColon(ByVal str As String) As String 2 3Dim strTemp As String 4Dim quotCount As Long 5 6Dim l As Long 7For l = 1 To Len(str) 'strの長さだけ繰り返す 8 9 strTemp = Mid(str, l, 1) 'strから現在の1文字を切り出す 10 11 If strTemp = """" Then 'strTempがダブルクォーテーションなら 12 13 quotCount = quotCount + 1 'ダブルクォーテーションのカウントを1増やす 14 15 ElseIf strTemp = Chr(13) Then 'strTempがChr(13)なら 16 17 If quotCount Mod 2 <> 0 Then 'quotCountが2の倍数じゃないなら 18 19 str = Left(str, l - 1) & Chr(10) & Right(str, Len(str) - l) '現在の1文字をChr(10)に置き換える 20 21 End If 22 23 End If 24 25Next l 26 27replaceColon = str 28 29End Function 30
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/13 01:43 編集