ByRef引数の型が一致しません

このQ&Aのポイント
  • エクセルのVBAで「ByRef引数の型が一致しません」エラーが発生しています。具体的には、Sub 繰越判定の引数の型が一致していないためにエラーが発生しています。このエラーを回避する方法を教えてください。
  • エクセルのVBAで「ByRef引数の型が一致しません」というエラーメッセージが表示されています。このエラーは、Sub 繰越判定の引数の型が一致していないことが原因です。このエラーを回避するにはどうすれば良いでしょうか?
  • エクセルのVBAで「ByRef引数の型が一致しません」というエラーが発生しています。具体的には、Sub 繰越判定の引数の型が一致しないためにエラーが表示されています。このエラーを回避する方法を教えてください。
回答を見る
  • ベストアンサー

「ByRef引数の型が一致しません」・・・orz

お世話になります。 一昨日からエクセルのVBAをやりはじめたのですが、 表題のエラーが回避できなくて困っております。 下記のコードの Sub 繰越判定(cellno1 As Long, cellno2 As Long, cellno3 As Long, kamoku As String, bunrui As String, karikatakamoku As String, kasikatakamoku As String, tekiyou As String, kurikosi As Long) の行が黄色になり、そこから17行下の Call 当期(cellno1, cellno2, cellno3, kamoku, bunrui, karikatakamoku, kasikatakamoku, tekiyou, kurikosi) のtekiyouの部分が青く変わります。 お分かりになる方がいらっしゃいましたら お助けください。 以下コードです。 Sub 総勘定元帳() '開始行の設定 Dim cellno1 As Long '総勘定元帳の開始行 Dim cellno2 As Long 'マスタの検索行 Dim cellno3 As Long 'データの検索開始行 Dim kamoku As String 'マスタの科目 Dim bunrui As String 'マスタの(科目の)分類 Dim karikatakamoku As String Dim kasikatakamoku As String Dim tekiyou As String Dim kurikosi As Long cellno1 = 5 kurikosi = 0 kamoku = Sheets("マスタ").Range("B3") bunrui = Sheets("マスタ").Range("C3") Call 繰越判定(cellno1, cellno2, cellno3, kamoku, bunrui, karikatakamoku, kasikatakamoku, tekiyou, kurikosi) End Sub Sub 繰越判定(cellno1 As Long, cellno2 As Long, cellno3 As Long, kamoku As String, bunrui As String, karikatakamoku As String, kasikatakamoku As String, tekiyou As String, kurikosi As Long) cellno2 = 3 'マスタの開始行数セット cellno3 = 5 'データの開始行数セット kamoku = Sheets("マスタ").Range("B" & cellno2) karikatakamoku = Sheets("データ").Range("F" & cellno3) tekiyou = Sheets("データ").Range("G" & cellno3) kasikatakamoku = Sheets("データ").Range("H" & cellno3) 'MsgBox kamoku 'MsgBox karikatakamoku 'MsgBox tekiyou 'MsgBox kasikatakamoku If kurikosi = 0 Then '前期繰越か当期かの判定 Call 繰越(cellno1, cellno2, cellno3, kamoku, bunrui, karikatakamoku, kasikatakamoku, tekiyou, kurikosi) Else Call 当期(cellno1, cellno2, cellno3, kamoku, bunrui, karikatakamoku, kasikatakamoku, tekiyou, kurikosi) End If End Sub Sub 繰越(cellno1 As Long, cellno2 As Long, cellno3 As Long, kamoku As String, bunrui As String, karikatakamoku As String, kasikatakamoku As String, tekiyou As String, kurikosi As Long) Range("a1") = kamoku '科目タイトル出力 Range("C" & cellno1) = "前期繰越" If bunrui = "資産" Or bunrui = "資産2" Or bunrui = "収益" Then '科目分類の判定 Set マスタ = Sheets("決算") Set 範囲 = マスタ.Range("A68:B90") Range("D" & cellno1) = Application.WorksheetFunction.VLookup(bunrui, 範囲, 2) End If Call 当期(cellno1, cellno2, cellno3, kamoku, bunrui, karikatakamoku, kasikatakamoku, tekiyou, kurikosi) End Sub Sub 当期(cellno1 As Long, cellno2 As Long, cellno3 As Long, kamoku As String, karikatakamoku As String, kasikatakamoku As String, tekiyou As String, kurikosi As Long) Do Until cellno3 = 30 If kurikosi = 0 Then Select Case kamoku Case karikatakamoku MsgBox karikatakamoku cellno3 = cellno3 + 1 karikatakamoku = Sheets("データ").Range("F" & cellno3) karikatakamoku = Sheets("データ").Range("F" & cellno3) Case kasikatakamoku MsgBox kasikatakamoku cellno3 = cellno3 + 1 kasikatakamoku = Sheets("データ").Range("H" & cellno3) karikatakamoku = Sheets("データ").Range("F" & cellno3) Case Else cellno3 = cellno3 + 1 karikatakamoku = Sheets("データ").Range("F" & cellno3) kasikatakamoku = Sheets("データ").Range("H" & cellno3) MsgBox cellno3 End Select Loop End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.1

Sub 当期(cellno1 As Long, cellno2 As Long, cellno3 As Long, kamoku As String, karikatakamoku As String, kasikatakamoku As String, tekiyou As String, kurikosi As Long) の引数が、足りていません 後、このサブのend ifが一つ足りません。

tome91sai
質問者

お礼

素早いご回答有難う御座いました。 やっと先へ進めます^^ またend ifが抜けているとのご指摘、 重ねて有難う御座いました。 大変助かりました><;

関連するQ&A

  • 「ByRef引数の型が一致しません」助けてください。

    お世話になります。 現在VBAでHTMLの書き出し用プログラムを書いています。 書き出したHTMLをUTF-8に変換するため、 ■UTF-8ファイル作成 for VBA http://www.vector.co.jp/soft/dl/winnt/prog/se320375.html のクラスモジュールを利用させていただいております。 Sub testAで定義した内容を書き出すために、 Sub createTestでtestA fNum(i)とした場合、 「ByRef引数の型が一致しません」と怒られてしまいます…。 単数の生成であれば、testA f1で生成可能なのですが、 生成ファイルが複数あり、配列に格納して処理したいのです。 どなたかお力をお貸しください。 プログラムの知識はほぼ素人レベルですorz 宜しくお願いします。 ▼コード Option Explicit Public Sub createTest() Dim fNum As Variant Dim f1 As New TextFile, f2 As New TextFile, f3 As New TextFile, f4 As New TextFile, f5 As New TextFile, f6 As New TextFile Dim f7 As New TextFile, f8 As New TextFile, f9 As New TextFile, f10 As New TextFile, f11 As New TextFile, f12 As New TextFile Dim f13 As New TextFile, f14 As New TextFile, f15 As New TextFile, f16 As New TextFile, f17 As New TextFile Dim Header As String, BodyS_T As String, BodyS_L As String, GlNavi As String, Promo As String, Contents As String, PrNavi As String, SeNavi As String, Footer As String, BodyE As String Dim ContentsM As String, ContentsS As String Dim WBK As Workbook Dim SH2 As Worksheet Dim TplBox As Variant Dim createCurPath As String Dim i As Integer Set WBK = ThisWorkbook Set SH2 = WBK.Sheets(2) createCurPath = ThisWorkbook.path & "\" & UserForm1.TextBox1.Value fNum = Array(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, f12, f13, f14, f15, f16, f17) '<HEADER> Header = "Header" '<BODY-START> BodyS_T = "BodyS_T>" BodyS_L = "BodyS_L" '<GLOBAL NAVI> GlNavi = "GlNavi" '<PROMO> Promo = "Promo" '<CONTENTS> Contents = "Contents" ContentsM = "ContentsM" ContentsS = "ContentsS" '<PRIMRY NAVi> PrNavi = "PrNavi" '<SECONDARY NAVI> SeNavi = "SeNavi" '<FOOTER> Footer = "Footer" '<BODY-END> BodyE = "BodyE" For i = 0 To 16 If i = 0 Then fNum(i).FileCreate createCurPath & "\index.html", "UTF-8" ElseIf UserForm1("TextBox" & i + 1).Value <> "" Then fNum(i).FileCreate createCurPath & "\" & UserForm1("TextBox" & i + 1).Value & "\index.html", "UTF-8" End If fNum(i).TextWriteLine Header If i = 0 Then fNum(i).TextWriteLine BodyS_T ElseIf UserForm1("TextBox" & i + 1).Value <> "" Then fNum(i).TextWriteLine BodyS_L End If TplBox = SH2.Range("C" & i + 3).Value If TplBox <> "" Or TplBox <> "選択" Then If InStr(TplBox, "-TA-") > 0 Then testA fNum(i) fNum(i).TextWriteLine Promo fNum(i).TextWriteLine PrNavi ElseIf InStr(TplBox, "-TB-") > 0 Then testA fNum(i) fNum(i).TextWriteLine "<hr />" ElseIf InStr(TplBox, "-TC-") > 0 Then fNum(i).TextWriteLine ContentsS End If End If fNum(i).FileClose Next i End Sub Public Sub testA(f As TextFile) f.TextWriteLine "テスト1" End Sub

  • 型が一致しません

    いつもお世話になっております。 シートごとに元データの値でフィルタをかけ、 フィルタした各シートのD列の文字列を照らし合わせて整合性を確認したく、 下記のようなVBAをつくりましたが、ここで↓ If name_A <> name_B <> name_C <> name_D Then 型が一致しませんとエラーになります。 どなたかアドバイスをお願いいたします。 Sub 不整合チェック()  'フィルター  Worksheets("Aリスト").Select  If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter  Range("B4").AutoFilter  Selection.AutoFilter field:=1, Criteria1:=Worksheets("元データ").Range("C3")  Worksheets("Bリスト").Select  If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter  Range("B4").AutoFilter  Selection.AutoFilter field:=1, Criteria1:=Worksheets("元データ").Range("C3")  Worksheets("Cリスト").Select  If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter  Range("B4").AutoFilter  Selection.AutoFilter field:=1, Criteria1:=Worksheets("元データ").Range("C3")  Worksheets("Dリスト").Select  If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter  Range("B4").AutoFilter  Selection.AutoFilter field:=1, Criteria1:=Worksheets("元データ").Range("C3") '整合性チェック  Dim name_A As String  Dim name_B As String  Dim name_C As String  Dim name_D As String  name_A = Worksheets("Aリスト").Cells(65536, 4).End(xlUp).Value  name_B = Worksheets("Bリスト").Cells(65536, 4).End(xlUp).Value  name_C = Worksheets("Cリスト").Cells(65536, 4).End(xlUp).Value  name_D = Worksheets("Dリスト").Cells(65536, 4).End(xlUp).Value  If name_A <> name_B <> name_C <> name_D Then   MsgBox "データ不整合を発見しました。 処理を中断します。", vbCritical   Exit Sub  ElseIf mykouiji_kouji = name_nyukin = name_kokyaku = name_uriage Then   MsgBox "問題なし。"  End If End Sub

  • String だと「 ByRef引数の型が一致しません 」というエラーが出ます。なぜ?

    ここで「Kaplan-Meyer 生存分析に便利なソフトを教えて」と質問した shuu_01 です。ここで VisualBasic のソースのありかを教えて頂き、自分に使いやすいようソースを書き換えようと奮闘中です(それまで VisualBasic の経験がなく 無謀!と実感中です)。 元々のソースはグラフが1本だけだったので、肺癌だと「腺癌」「扁平上皮癌」「小細胞癌」、、といろんな癌の種類別にグラフを数本 書くのが目標です。そこで、 Sub km_test() Dim nc As Integer, gr() As String nc = 2 ReDim gr(nc) gr(0) = "腺癌" gr(1) = "扁平上皮癌" gr(2) = "小細胞癌" km_group_test nc, gr End Sub Sub km_group_test(nc As Integer, gr As String) End Sub というソースを書くと: String の変数 gr の色が変わり、「 ByRef引数の型が一致しません 」というエラーが出ます。 Integer の変数 nc ではエラーが出ません。 きちんと型を一致させているつもりなのに、なぜ???

  • 変数の型の色の違い

    Sub test() Dim a As String Dim i As Range End Sub とすると 変数の型のが 「String」と「Range」の色が違いますがなぜでしょう?

  • 参照渡し(ByRef)

    参照渡しについてわからないのですが Option Explicit Dim buf As String Sub Sample1() buf = "aaa" Call Sample2("bbb") MsgBox buf End Sub Sub Sample2(ByRef a As String) a = "ccc" End Sub を実行すると、msgboxには、aaaが表示されますが、 途中のbbb,cccはどんな意味があるのでしょうか? また、 Sub Sample2(ByRef a As String) を Sub Sample2(a As String) にしてもコードは問題なく動きますが、 ByRefは役に立ってるのですか?

  • VBAで教えてください。

    データがないときはExitSubしたいのですが、何処に記述すれば良いでしょうか? Sub 削除() Dim i As Long If MsgBox("データを削除します。よろしいですか?", vbYesNo) = vbYes Then Sheets("リスト").Select i = 5 Do Until i = 200 If Cells(i, 5).Value = Sheets("マスタ登録").Range("D5") Then Cells(i, 1).EntireRow.Delete End If i = i + 1 Loop Else Exit Sub End If End Sub

  • VBA「型が一致しません」とエラーが出ます

    下記記事の関連質問です。 Excel 文字列抜き出しについて https://okwave.jp/qa/q9979633.html 記事を参考に複数行にマッチするように下記のようにコードを考えましたが msplit(mRng, " ", iii)で「型が一致しません」とエラーが出ます。 なぜでしょうか? テスト用のA4セル 1 01 45124422 ミント 09/01~03/01 108 98 01/05~02/01 Option Explicit Sub test() Dim msplit As Variant Dim buf As String, i As Long, ii As Long, iii As Long, cnt As Long Dim mRng As Range For ii = 4 To Cells(Rows.Count, 1).End(xlUp).Row buf = Cells(ii, "A") For i = 1 To Len(Cells(ii, "A")) If Mid(buf, i, 1) = " " Then cnt = cnt + 1 Next For iii = 1 To cnt Set mRng = Cells(ii, "A") ’Stop Cells(iii + 1, ii) = msplit(mRng, " ", iii) Next Next Set mRng = Nothing End Sub Function msplit(ByRef mRng As Range, ByVal Spstr As String, ByVal num As Long) As Variant msplit = Split(mRng, Spstr)(num - 1) End Function

  • ThisWorkbookの使い方

    お世話になります。 ThisWorkbookとActiveWorkbookの使い方で悩んでいます。 ThisWorkbookのデータをActiveworkbookにコピーしようとしています。 Sub test() Dim temp As String, lrow As Long temp = "C:\申請.xlt" Workbooks.Open temp MsgBox ThisWorkbook.Name MsgBox ActiveWorkbook.Name ThisWorkbook.Sheets("Sheet3").Range(Cells(6, 3), Cells(lrow, 3)).Copy ActiveWorkbook.Sheets(1).Cells(6, 3) End Sub メッセージボックスで確認するとThisWorkbookとActiveWorkbookを正しく選択してくれているのですが、 実際にコピーをする作業のところでは、ThisWorkbookのデータを同じファイルに書き込んでしまいます。 Dim Sendbook As String Workbooks.Open temp Sendbook = ActiveWorkbook.Name を追加して ThisWorkbook.Sheets("Sheet3").Range(Cells(6, 3), Cells(lrow, 3)).Copy Workbooks(Sendbook).Sheets(1).Cells(6, 3) とすると、アプリケーション定義またはオブジェクト定義のエラーです。となります。 どこが間違っているのか、教えてください。 よろしくお願いします。

  • 配列のメリットは?

    下記のコードは同じ動作をします。 Sub 普通() Dim moji1 As String Dim moji2 As String moji1 = Range("a1").Value moji2 = Range("a2").Value MsgBox moji1 & moji2 End Sub --------------------------------------------- Sub 配列() Dim moji(2) As String moji(1) = Range("a1").Value moji(2) = Range("a2").Value MsgBox moji(1) & moji(2) End Sub こういう場合は配列を使ったほうがいいのでしょうか? それとも配列は避けたほうがいいのでしょうか?

  • Phonetic[型が一致しません]になる理由

    Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic(Range("A1")) End Sub はうまくいくのに、 Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic("日本") End Sub ********************************************************* は、[型が一致しません]になるのはなぜでしょうか? オブジェクトブラウザを見ると、 Function Phonetic(Arg1 As Range) As String になってることから、rangeを指定しなくていけないからですか?