エクセルVBAの型が一致しません

このQ&Aのポイント
  • 明日から使用するVBAコードで、エクセルVBAの型が一致しないエラーが発生しています。
  • コード内の「LabelCompany」に値が入力されていなければ、メッセージボックスを表示するようにしたいです。
  • 具体的なエラーメッセージやスクリーンショットなどを教えていただけると、より詳しいサポートが可能です。
回答を見る
  • ベストアンサー

エクセルVBA「型が一致しません」

エクセルVBA「型が一致しません」 これまで作成してきたVBAを明日から使用します。 最後に一つ、ご回答頂きたいのですが、 Dim a As Long a = Me.LabelCompany.Caption If a = 0 Then MsgBox "このベルマークは失効しています。失効していない場合は「ベルマーク番号シート」を編集してください。なお、失効後半年以内のベルマークは有効です。" End If このようなコードを書いたのですが、タイトルのエラーを吐いてしまいます。 「LabelCompany」に何も入力されていなければメッセージボックスを表示するという動作に持って行きたいです。御指南お願いします。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.2

変数 a は、Longで宣言されてますので、数値 LabelのCaptionは、文字列 数値と文字列、"型”が違いますよね? で、簡単には、Val関数でCaptionを数値に変換すればいいでしょう。   a = Val( Me.LabelCompany.Caption ) 以上です。

takoi424
質問者

お礼

ご回答ありがとうございました。 御指南の通り行いますと動作致しました。 明日からばんばん使っていきたいです。

その他の回答 (2)

  • Tip3000
  • ベストアンサー率9% (5/55)
回答No.3

回答が既に出ているので・・ http://officetanaka.net/ ここで少し基本を勉強されたらいいかと思います 非常にわかりやすく 確実にステップアップできます!

takoi424
質問者

お礼

ご紹介いただきありがとうございます。 今回は突貫工事だったのであまり勉強せずに入ってしまったのですが、一段落つきましたのでゆっくり勉強するのもアリですね。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.1

私はあまり詳しくはないのですが 違っていたら無視してください。 Dim a As String ではないかと。

関連するQ&A

  • 型が一致しません

    下記はセルが0の時、行全体を表示しないにするようにするVBAですが、型が一致しませんとエラーになります、どこを直せばいいのですか。 Dim I As Integer Sub Macro4() For I = 4 To 76 If Cells(I, 8) = 0 Then Rows("I:I").Select Selection.EntireRow.Hidden = True End If Next I End Sub

  • VBA 型が一致しません

    初めまして マクロを習い始めた初心者なのですが、ユーザーフォームを用いて印刷設定を行おうとしています。 (最後のSelectは最終的にPrintoutにします) 今まではループ処理で一枚ずつ印刷するような設定にしていましたが、他の人もプリンターを使用しているのでスプールをまとめようと考えました。 ユーザーフォームに使用しているのはトグルボタンとコマンドボタンのみです。 必要なシートの名前を付けたトグルボタンで印刷するシートを選べるようにしています。 下記のように記述しましたが、途中型が一致しませんと出て困っています。 ご教授願います。 Private Sub CommandButton1_Click() Dim TgLB_val(4) As Boolean Dim TgLB_cap(4) As Variant TgLB_cap(1) = TB1.Caption: TgLB_cap(2) = TB2.Caption TgLB_cap(3) = TB3.Caption: TgLB_cap(4) = TB4.Caption Dim sEnt_sh As Variant Dim i As Long For i = 1 To 4 If TgLB_val(i) Then sEnt_sh(UBound(sEnt_sh)) = TgLB_cap(i) →ここでいつも型が一致しませんとでます。TgLB_cap の方をstring型からvariant型に変更しても出ています。 ReDim Preserve sEnt_sh(UBound(sEnt_sh) + 1)  End If Next i Stop Sheets(sEnt_sh).Select End Sub

  • VBAの「型が一致しません」の原因がわかりません

    Excel2013でVBAを動かすと「型が一致しません」と表示され、 動作が中断されます。 解決方法がわからないので、教えてください。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Dim i As Long, k As Long, MaxRow As Long MaxRow = Range("H" & Rows. Count).End(xlUp).Row k = 2 For i = 2 To MaxRow If Month(Range("H" & i)) <> Month(Range("H" & i + 1)) Then  ← ここで中断する Range(Cells(i, 8), Cells(i, 10)).Copy Cells(k, 1).PasteSpecial Paste:=xlPasteValues Else Range(Cells(i, 8), Cells(i, 10)).Copy Cells(k, 1).PasteSpecial Paste:=xlPasteValues k + 1 End if ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 「on Error Resume Next 」をエラー箇所の前に追加すると 最後まで動き、正しい結果になります。 しかし、こんな解決方法でいいのか不安なので、 別の解決方法がわかれば、教えてください。 よろしくお願いします。

  • 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

  • VBA Evaluate関数 型が一致しません

    Excel2003 VBAのEvaluateで以下の数式を実行すると エラー「型が一致しません」となってしまいます。 類似の質問を検索していろいろ参考にしてみたのですが 解決できなかったので質問させてください。 Sub test() Dim aa, bb, cc As String Dim y As Byte y = 1 With Sheets("Sheet1") aa = ".Cells(y, 1) > 0" bb = Left(aa, InStr(aa, "y") - 1) cc = Mid(aa, InStr(aa, "y") + 1) If Evaluate(bb & y & cc) Then ←ここでエラーになります。 y = 2 End If End With End Sub .Cells(1, 1)には10が入力されています。 宜しくお願い致します。

  • 型が一致しません

    いつもお世話になっております。 シートごとに元データの値でフィルタをかけ、 フィルタした各シートの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

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • Excel2000のVBAでわからないことがあります。

    こんなものを作ってみました。 Sub 理想体重() Dim Sin As Long Dim Tai As Long Sin = InputBox("あなたの体重は?", "体重") Tai = InputBox("あなたの身長は?", "身長") If Tai >= Sin * Sin * 21 / 10000 + 3 Then MsgBox "太りすぎです" ElseIf Tai <= Sin * Sin * 21 / 10000 - 3 Then MsgBox ("痩せすぎです") Else MsgBox ("標準です") End If End Sub 結果はきちんと出てくるのですが、最初の変数宣言のところがわかりません。 最初は、Longではなく、Integerにしたのですが、オーバーフローのエラーが出たので、Longに変更したところ、きちんと出てくるようになりました。 しかし、なぜ、Integerではだめなのかがわかりません。私としては、Integerは32,767までの数字が入るのだから、身長や体重を入れたぐらいだと、オーバーフローにはならないのではないかと考えています。 きっと、根本的なものがわかっていないんだとは思うのですが、違いを教えていただければうれしいです。 よろしくお願いいたします。 (VBAを勉強したばかりです。)

  • 型が一致しません

    特定のセルでダブルクリックすると「〇」が入り,再度ダブルクリックすると「〇」が消えるコードを調べ,以下のものです。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const rng As String = "A1:B3" '処理対象のセル範囲 If Not Application.Intersect(Target, Range(rng)) Is Nothing Then If Target.Value = "" Then Target.Value = "○" Else Target.ClearContents End If End If End Sub 試してみましたが,「実行時エラー13 型が一致しません」というものが出て,デバックというところをクリックすると,If Target.Value = "" Thenのところが黄色くなり矢印が出ていたのでここが問題かなと思うのですが,どのように修正すればいいのか分かりません。教えていただけると助かります。

  • [VBA]型が一致しません

    EXCELWORKSHEET上で下記の処理をすると「型が一致しません」との エラーがでます。どうにも原因と対応策がわからず悩んでいます。 デバッグの良い方法ありませんでしょうか? <現象> *列2上のセルを選択して、DELETEキーを押す。⇒エラーなし。 *しかし、列2上のセルとその他のセルを同時選択した上で、DELETEキーを押すと「型が一致しません。」のエラー。 頭の「If Target.Column Like 2 And Len(Target.Value) > 0 Then 」が悪さしているのはわかるのですが・・・。 Private Sub WORKSHEET_CHANGE(ByVal Target As Range) If Target.Column Like 2 And Len(Target.Value) > 0 Then Range("c" & Target.Row).Value = Now If Target.Column Like 2 And Len(Target.Value) > 0 Then 'B列の場合だけ確認 Dim rng As Range Set rng = ActiveSheet.Range("B:B").Find(What:=Target, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, MatchByte:=True) If Not rng Is Nothing Then '発見した。 If rng.Address <> Target.Address Then '入力中セル以外で発見 Select Case MsgBox("過去に受け入れたLOTです。再度受入れますか?", vbYesNo) Case vbYes Range("B2").Activate Selection.End(xlDown).Select ActiveCell.Offset(0, 1).Activate ActiveCell.Value = Now ActiveCell.Offset(0, 1).Activate ActiveCell.Value = UserForm2.TextBox2.Value UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus Range("B2").Activate Selection.End(xlDown).Select Selection.Offset(1, 0).Select Case vbNo Range("B2").Activate Selection.End(xlDown).Select ActiveCell.ClearContents ActiveCell.Offset(0, 1).Activate ActiveCell.ClearContents UserForm2.TextBox1.Value = "" UserForm2.TextBox2.Value = "" UserForm2.TextBox1.SetFocus End Select End If End If End If End If End Sub

専門家に質問してみよう