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

とすれば、このエラーは回避できます。

[返信 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

> とすれば、このエラーは回避できます。


てらてらさん
返信ありがとうございます。
指摘の通りで見事に動作しました。
大変助かりました。ありがとうございます。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-04 16:48:47 )
タイトルとURLをコピーしました