Excel VBA 質問スレッド №2114 (解決済)
ByRef引数の型が一致しません。とコンパイルエラーになってしまいます。どう修正したら良いでしょうか。
投稿者 : 青 投稿日時 : 2025/05/15(Thu) 19:15:03 OS : Windows 11 EXCEL : Excel 2019
Sub CSVから売上集計表へ転記()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1)
Dim csvFiles As Variant
Dim i As Long: i = 3
csvFiles = Application.GetOpenFilename("CSVファイル (*.csv), *.csv", MultiSelect:=True)
If Not IsArray(csvFiles) Then Exit Sub
Dim filePath As Variant
Dim lines As Variant
For Each filePath In csvFiles
lines = ReadCSVLines(filePath)
Dim parts As Variant
parts = Split(lines(1), ",")
If UBound(parts) >= 7 Then
ws.Cells(i, "A").value = Replace(parts(7), """", "") ' H2(日付)
End If
ws.Cells(i, "H").value = GetCSVValue(lines, 5) ' E6
ws.Cells(i, "I").value = GetCSVValue(lines, 32) ' E33
ws.Cells(i, "O").value = GetCSVValue(lines, 18) ' E19
ws.Cells(i, "N").value = GetCSVValue(lines, 22) ' E23
ws.Cells(i, "M").value = GetCSVValue(lines, 33) ' E34
Dim totalK As Double
Dim j As Long
For j = 19 To 21: totalK = totalK + GetCSVValue(lines, j): Next j
For j = 23 To 31: totalK = totalK + GetCSVValue(lines, j): Next j
totalK = totalK + GetCSVValue(lines, 34)
ws.Cells(i, "K").value = totalK
Dim totalS As Double
For j = 43 To 48: totalS = totalS + GetCSVValue(lines, j): Next j
ws.Cells(i, "S").value = totalS
Dim totalW As Double
For j = 50 To 54: totalW = totalW + GetCSVValue(lines, j): Next j
ws.Cells(i, "W").value = totalW
i = i + 1
Next filePath
MsgBox "すべてのCSVからの転記が完了しました!", vbInformation
End Sub
Function ReadCSVLines(filePath As String) As Variant
Dim lines() As String
Dim line As String
Dim i As Long
Dim f As Integer: f = FreeFile()
Open filePath For Input As #f
Do Until EOF(f)
Line Input #f, line
ReDim Preserve lines(i)
lines(i) = line
i = i + 1
Loop
Close #f
ReadCSVLines = lines
End Function
Function GetCSVValue(ByVal lines As Variant, rowIndex As Long) As Double
On Error GoTo ErrHandler
If rowIndex > UBound(lines) Then Exit Function
Dim parts() As String
parts = Split(lines(rowIndex), ",")
If UBound(parts) >= 4 Then
GetCSVValue = val(Replace(parts(4), """", ""))
End If
Exit Function
ErrHandler:
GetCSVValue = 0
End Function
スポンサーリンク
[返信 1] Re : ByRef引数の型が一致しません。とコンパイルエラーになってしまいます。どう修正したら良いでしょうか。
投稿者 : てらてら 投稿日時 : 2025/05/16(Fri) 05:46:05
こんにちは。
CSVから売上集計表へ転記()の filePath が Variant なのに対して、
呼び出し側の ReadCSVLines の引数の filePath が String になっているのが原因です。
Function ReadCSVLines(filePath As String) As Variant
を
Function ReadCSVLines(filePath As Variant) As Variant
とすれば、このエラーは回避できます。
こんにちは。
CSVから売上集計表へ転記()の filePath が Variant なのに対して、
呼び出し側の ReadCSVLines の引数の filePath が String になっているのが原因です。
Function ReadCSVLines(filePath As String) As Variant
を
Function ReadCSVLines(filePath As Variant) As Variant
とすれば、このエラーは回避できます。
[返信 2] Re : ByRef引数の型が一致しません。とコンパイルエラーになってしまいます。どう修正したら良いでしょうか。
投稿者 : 青 投稿日時 : 2025/05/16(Fri) 19:24:22
■[返信 1] てらてらさん(2025-05-16 05:46:05)の記事
> こんにちは。
>
> CSVから売上集計表へ転記()の filePath が Variant なのに対して、
> 呼び出し側の ReadCSVLines の引数の filePath が String になっているのが原因です。
>
>
> Function ReadCSVLines(filePath As String) As Variant
> を
> Function ReadCSVLines(filePath As Variant) As Variant
>
> とすれば、このエラーは回避できます。
>
てらてらさん
返信ありがとうございます。
指摘の通りで見事に動作しました。
大変助かりました。ありがとうございます。
■[返信 1] てらてらさん(2025-05-16 05:46:05)の記事
> こんにちは。
>
> CSVから売上集計表へ転記()の filePath が Variant なのに対して、
> 呼び出し側の ReadCSVLines の引数の filePath が String になっているのが原因です。
>
>
> Function ReadCSVLines(filePath As String) As Variant
> を
> Function ReadCSVLines(filePath As Variant) As Variant
>
> とすれば、このエラーは回避できます。
>
てらてらさん
返信ありがとうございます。
指摘の通りで見事に動作しました。
大変助かりました。ありがとうございます。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2025-11-08 07:04:31 )