以前にも投稿させていただいたものと同じなのですが、締め切ったあとにまた問題が発生しまして・・・解答していただいた方には申し訳ないのですが今一度知恵をお貸しください!
Private Sub TextBox貸方_Change()
Dim 貸方 As Integer
Tx貸方 = TextBox貸方.value
Select Case Tx貸方
Case 101
TextBox貸方摘要.Text = "現金"
Case 102
TextBox貸方摘要.Text = "当座預金"
           ・
           ・
           ・
 Case Else
TextBox借方摘要.Text = "該当コード無し"
End Select
End Sub
としても一度入力してからその入力したコードを消すと
実行エラー13":型が一致しません
と表示されてしまいます。どうすればよいのでしょう???

このQ&Aに関連する最新のQ&A

A 回答 (6件)

>実行エラー13":型が一致しません


データの型が違っているからです。
「Tx貸方」はInteger型、「TextBox貸方」はおそらくテキストボックスなのでString型となります。

>Tx貸方 = TextBox貸方.value
このときVBは型の自動変換を行ってくれますがいつも変換可能というわけでは有りません。
例えば数字以外や空欄は変換できずにエラーとします。

この場合、IF文を使って振り分ければ良いでしょう。
IF TextBox貸方.Text = "" THEN
Tx貸方 = 0
ELSE
Tx貸方 = TextBox貸方.Text
END IF
    • good
    • 0

>TextBox貸方.value


書き方からするとAccessかな?

>実行エラー13":型が一致しません
おそらく
Select Case Tx貸方
の部分でひっかかるのでは?

AccessのテキストボックスはVBのテキストボックスと違って、未入力状態の時、Null値を持ちます。
ですので
1.Nullチェック
2.数値タイプチェック
3.数値によるCASE分けによる処理
といった手順が必要です。

エラーの原因は、Select Case は文字列/数値型に使用すべきなのに、
Tx貸方.Value = Null値
のために発生すると思われます。



'Null値チェック
If IsNull(TextBox貸方.value) Then
  '未入力(Null処理)
  TextBox貸方摘要.Value = Null
Else
  '数値型チェック
  If IsNumeric(TextBox貸方.value) Then
    Select Case Tx貸方
      Case 101
        TextBox貸方摘要.Value = "現金"
      Case 102
        TextBox貸方摘要.Value = "当座預金"
               ・
               ・
               ・
      Case Else
        TextBox貸方摘要.Value = Null
        Call MsgBox("該当コード無し")
      End Select
  Else
    TextBox貸方摘要.Value = Null
    Call MsgBox("該当コード無し")
  End If
End If

このコードは
http://oshiete1.goo.ne.jp/kotaeru.php3?q=225969
を参考に作成いたしました。


それと、Accessの場合はテキストボックスの値参照や値セットはValueを使用したほうが便利です。
Textだと、フォーカスを持っているとき以外は、値参照できなかったような気が・・・
遠い記憶で、しかも未検証なので、はっきりとは言えませんが・・・

(Accessでなかったらすいません。。。)

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=225969
    • good
    • 0

次ぎのようにすると上手く行きませんか。

一応テスト済みです。
質問の趣旨にずれていますか。
イベントをText1のKeyDownにする。
1文字でも入力したり、削除したりするとこのルーチンへ飛ぶから
If  KeyCode = 13で「改行」の時だけ取り出してSelect Case
で判別する。下記では科目表示のテキストボックスをText2に
(面倒くさいと思い)変えました。
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim 貸方 As Integer
Text2.Text = "" ’一度起こったエラー表示等を消す
' MsgBox KeyCode ’毎文字ごとに飛んでくることの実感のため
If KeyCode = 13 Then
Tx貸方 = Text1.Text
Select Case Tx貸方
Case 101
Text2.Text = "現金"
Case 102
Text2.Text = "当座預金"
Case Else
Text2.Text = "該当コード無し"
End Select
End If
End Sub
Tx貸方 = Text1.TextはTx貸方 = Text1.Valueではうまくいきませんでした。
 むしろ私が、テキストボックスで「エンタキーを押した時だけ飛んでくるイベント」をどなたかから教えてほしいです。
    • good
    • 0

Changeイベントを使うとせわしい感じがしますが・・・


変数宣言がよく分かりませんが、TextBox借方摘要はTextBox貸方摘要に変えてあります。

Private Sub TextBox貸方_Change()
  Dim 貸方 As Integer
  Dim Tx貸方 As Long

  With TextBox貸方摘要
    If IsNumeric(TextBox貸方.Value) Then
      Tx貸方 = TextBox貸方.Value
      Select Case Tx貸方
        Case 101: .Text = "現金"
        Case 102: .Text = "当座預金"
          :
          :
        Case Else: .Text = "該当コード無し"
      End Select
    Else
      .Text = "該当コード無し"
    End If
  End With
End Sub
    • good
    • 0

こんにちは。

itohhといいます。

前の質問も見てみましたが、今回の質問の中にあるソースを見ると
前のアドバイスを生かされていないのでしょうか?

もし、生かされているのでしたらそちらのソースを載せていただかないとアドバイスが
出来ないと思いますよ。
    • good
    • 0

えーと、まず、コントロールや変数の名前に日本語を使うと、ソース効率がめちゃくちゃ悪くなるので、日本語は控えるようお勧めします。


確かに、わかりやすいのですが。

>実行エラー13":型が一致しません
こういうエラーが出たときは、デバッグを押すと、エラーとなっている行が黄色で表示されますので、その行を補足してください。
これから、VBのエラーで質問するときは、これが基本だと思ってください。
迅速に回答できるかと思います。

>Tx貸方 = TextBox貸方.value
TextBox貸方はテキストボックスだと思うのですが、valueなどというプロパティは持っていません。

型が一致しないようなエラーは、この辺しか見あたりませんが、通常は "メンバが見つかりません" とかいうエラーになるはずです。
いずれにしろ、これだけのコードでは分かりません。

補足をおねがいします。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qc型肝炎はHしたらうつるのでしょうか?

今c型肝炎がテレビのニュースとかに出てるのですけど血液感染以外にエイズみたいにHしたら相手にうつるのでしょうか?
まったく知識がないので教えていただけませんか?
 

Aベストアンサー

C型肝炎が性行為で感染する確率は低いとされています。
しかし、血液感染するものですから、コンドームの使用をお勧めします。
性交渉の際、目には見えないような細かな傷が多数できるのです。そういった傷からの血液感染という可能性を否定することができませんから。
以上kawakawaでした

QSubとEnd Subについて

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate URL
objIE.Visible = True

Do Until objIE.Busy = False
WScript.sleep(250)
Loop

If objIE.document.URL = URL Then
BodyText = objIE.document.body.innerTEXT
AriNashi = InStr(1, BodyText, "Yahoo")
If AriNashi > 0 Then
Set objINPUT = objIE.document.getElementsByTagName("input")
objINPUT(0).value = LoginID
objINPUT(1).value = Password
objINPUT(2).Click
Else
msgbox "NO"
End If
Else
WScript.Echo " ダ メ" & Err.Description
End If
Set objIE = Nothing

VBScriptのSubとEnd Subについて教えて下さい。

Dim LogonID
Dim Password
Dim URL
Dim objIE
Dim objINPUT
Dim BodyText
Dim AriNashi

LogonID = "XXXXXXXX"
Password = "XXXXXXXXX"
URL = "https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.ya..."

下記のようなプログラムはうまくいくのですがSubで囲むと何故か動作しなくなってしまいます。
使い方が間違っているのでしょうか?


Set objIE = WScript.CreateObject("InternetExplorer.Application")
objIE.Navigate ...続きを読む

Aベストアンサー

Subで囲むとプロシージャとなります。
プロシージャは他から呼び出されない限り、勝手に動作はしません。

Sub Hoge
'実体
End Sub

と書いたなら、プロシージャの外で
Call Hoge()
のようにプロシージャを呼び出してあげてください。

QB型肝炎のキャリアです。うつる??

19歳、遺伝性のB型肝炎のキャリアです。Hするときは相手の方にうつりますか??付き合って2ヶ月の彼氏がいて、きっとバレンタインに初Hすると思います。処女なので、出血するかもなんですが、その血で感染。。。なんてことはないですか?コンドームは絶対に使うつもりですが、心配です・・・。

Aベストアンサー

同じくキャリアです
Hしましたが、
ナニも起こりませんでした
相手の体の都合にもよるのでは?
感染の可能性はありますが、抗体を持つことが出来る
体質であれば何も問題は起きないものです
でも一応相手の了解は取ったほうがいいかと・・・

Qtextbox.textやlabel.captionの型変換について

VB6.0を使用しています。
テキストボックスやラベルに値として数字を入れているのですが、これらの値に数字で加算減算する場合・・・

●宣言部でintegerを宣言する又は、

●string型で宣言してからプロシージャ内でCint(textbox.text)やCint(label.caption)のように変換するのとどう違うのでしょうか?

Aベストアンサー

宣言部でintegerを宣言した変数でも、textboxやlabelに放り込む時点で、テキスト型にキャストされてます。

また逆に、textbox.textやlabel.captionをそのまま数値計算式に放り込んで計算できたりするのは、「それらが数値だった場合、数値型にキャストする」といった処理が暗黙のうちに行われているためです。

VB6.0に限れば別に問題の無い話かもしれませんが、自身の将来的なことも見越すならば、明示的な型変換はなるべく心がけるようにしたほうがよいと思います。
textbox.textやlabel.captionの値を計算式に用いる場合は、CintやClngで型変換するようにしましょう。

QC型肝炎は尿でもうつるの?

身内にC型肝炎の患者がいるのですが、
便座についていたその患者の尿に気づかず
その上に座ってしまいました。血液で感染することは
知っているのですが、尿でも感染するのかと
気になっています。どうか、教えてください。

Aベストアンサー

気になるのなら調べましょうよ
C型は基本的に血液感染です むかーーーしは輸血とかってのが多かったですけどね こっちに関しては今は無いです
今あるのは麻薬とかの針の使いまわしですかね。
性行為感染とか母子感染とかもなくは無いですがほぼないと思ってください。

つまりその尿が血尿とかで今すぐでた物であり あなたの体内に入り直接粘膜に触れなければ感染しません。
便座についていた程度であれば感染確率は0です

QSelect Case組み合わせ条件について

例えば、「Aの値」&「Bの値」で処理をする場合には
Select Case "A"&"B"
Case "11" '(A=1&B=1の場合)

で処理できると思うのですが、「B=1~5」として組み合わせることは可能でしょうか?
現在、下記のようにSelect文の中にSelectを組み合わせていますが、
どうにか上記のようにひとつのSelect文で処理できないかな~と思っています。

Select Case "A"
Case 1
Select Case "B"
Case 1 To 5

ご存知の方がいらっしゃいましたら、ぜひご回答の程お願いいたします。

Aベストアンサー

私なら、Select Caseをまとめて簡単に書こうと思ったら、ANo.3の
nda23氏のような書き方をすると思いますが、その書き方について。
Select Case True
  Case ???
   :
   :
End Select
の書き方をするなら、???の部分とTrueの比較が行われるので、???の部分は
全体で見て「論理式である」必要があります。
ANo.3の内容を書き換えるとすると、
  Case A=1 And B>=1 And B<=5
みたいな感じになります。

QB,C型肝炎が歯科治療でうつる可能性は?

 上記の通りです。
ポイントは、歯医者での口腔処置の場合、一人一人使い捨てでない機器があると思うのですが、処置時に出血もありますのでB,C型肝炎の感染の可能性があるのではないかと思うのですがいかがでしょう?

Aベストアンサー

使い捨てでない機材であっても、リンク先のような消毒を行えば
ウイルスは除去されるようです。

しかしながら、消毒をされていない機器であれば、感染の可能性はあるということになります。
消毒していない機器を使っているような歯科があったとしたら、
ウイルスを撒き散らしているようなものです。

歯科の機器や理髪店のかみそりなど消毒が十分であると祈っています。

参考URL:http://www.mhlw.go.jp/bunya/kenkou/kekkaku-kansenshou09/02-10.html

QExcelVBA select case 値設定

ExcelVBAのSelect Caseで

Select Case 数式または文字列式
Case 値1, 値2, 値3
 処理
Case Else
 処理
End Select

のようにカンマで区切ると複数の値を指定できるはずです。

この値1, 値2, 値3のところに別のシートのA1、A2、A3に入っている値を設定したいのですが
そのようなことは可能でしょうか?(A1→値1 A2→値2 A3→値3)

5年ぶりにVBAを書いていますが、びっくりするぐらい忘れています。。。

Aベストアンサー

> A列で上から順番に値を入力されています。
> そういうパターンに対応できる形にしたいです。
> A列の空白以外のセルの数を取得したりするやり方はわかります。

なら Select Case でやらなくてもいいんじゃないでしょうか?
たとえば配列や Collection などを使うとか。
あとはそれをループさせ、ループの中で 1度でもヒットしたところでフラグを立ててループを脱出する。
その後にフラグの状態に合わせて処理を 2分割する。

Collection なら Add メソッドで簡単に要素を追加できるし For Each でループできる。

Dim cellValues As New Collection
cellValues.Add Item:="セルの値", Key:="キー情報"

Dim cellValue As Variant
For Each cellValue In cellValues
  If hoge = cellValue Then
    flag = True
    Exit For
  End If
Next

If flag Then
  処理
Else
  処理
End If

> A列で上から順番に値を入力されています。
> そういうパターンに対応できる形にしたいです。
> A列の空白以外のセルの数を取得したりするやり方はわかります。

なら Select Case でやらなくてもいいんじゃないでしょうか?
たとえば配列や Collection などを使うとか。
あとはそれをループさせ、ループの中で 1度でもヒットしたところでフラグを立ててループを脱出する。
その後にフラグの状態に合わせて処理を 2分割する。

Collection なら Add メソッドで簡単に要素を追加できるし For Each でループできる...続きを読む

Qキスでうつるものは

ある風俗嬢のブログにこう書かれていました。
¨キス感染¨
A型肝炎、B型肝炎、C型肝炎。
咽頭クラミジア、咽頭淋病。
HIVウィルス感染=エイズ。

キスでうつります。
キスで簡単にうつる。

あ、、歯周病も歯肉炎もね!!

みんなにありえる可能性。
SEXよりも身近な可能性。
キス感染。


とありましたが、この中で本当にキスで感染する可能性のあるもの

そしてそれに感染した場合に完全に直る病気なのか
完治は難しいのかを教えてください。

Aベストアンサー

咽頭クラミジア、咽頭淋病、口腔ヘルペスは移ります
歯周病は歯周病菌を持っていない人(赤ちゃんなどです。風俗に行く方で歯周病菌を持っていない、という方がいるとは思えませんが…)なら移ります

ヘルペスなど痒痛いブツブツができてかなり辛いです
確かに防ぎようがないという点でHIVより身近でキケンといえますね

QSelect Case の条件式

VBAの初心者です。
家計簿の品目に対して値段を自動で入力したいです。
以下のように、Select Case の条件式の指定方法で、
列に入力された文字列の条件に対して、
自動でとなりのセルに入力したいのですが解らなくて困っております。

Sub TEST()
' A列セルの条件(文字列)でとなりのセルに文字列を入れたい
Select Case Range("A1").Value 'A1をどうすればいいのでしょうか。

Case "a": Range("列のセルのとなりに入力したい").Value = "リンゴ"
Case "o": Range("列のセルのとなりに入力したい").Value = "オレンジ"
Case "b": Range("列のセルのとなりに入力したい").Value = "バナナ"

Case Else: Range("列のセルのとなりに入力したい").Value = "error"

End Select
End Sub

ご存じの方がおられましたら教えていただけませんでしょうか。
よろしくお願いします。

VBAの初心者です。
家計簿の品目に対して値段を自動で入力したいです。
以下のように、Select Case の条件式の指定方法で、
列に入力された文字列の条件に対して、
自動でとなりのセルに入力したいのですが解らなくて困っております。

Sub TEST()
' A列セルの条件(文字列)でとなりのセルに文字列を入れたい
Select Case Range("A1").Value 'A1をどうすればいいのでしょうか。

Case "a": Range("列のセルのとなりに入力したい").Value = "リンゴ"
Case "o": ...続きを読む

Aベストアンサー

A1では1列目の1行目の値しか取得できないのですがいいのですか?

下記内容は、A列の1行~10行の入力値を評価し
となりの列(B列)の同一行に自動編集するVBA処理例です。

Dim rowidx, colidx As Integer
Dim inputval, As Stirng

For rowidx = 1 To 10
inputval = ThisWorkbook.ActiveSheet.Cells(rowidx,1).Value
Select Case inputval
Case "a"
ThisWorkbook.ActiveSheet.Cells(rowidx,2).Value = "リンゴ"
Case "o"
ThisWorkbook.ActiveSheet.Cells(rowidx,2).Value = "オレンジ"
Case "b"
ThisWorkbook.ActiveSheet.Cells(rowidx,2).Value = "バナナ"
Case Else
ThisWorkbook.ActiveSheet.Cells(rowidx,2).Value = "error"
End Select

Next

A1では1列目の1行目の値しか取得できないのですがいいのですか?

下記内容は、A列の1行~10行の入力値を評価し
となりの列(B列)の同一行に自動編集するVBA処理例です。

Dim rowidx, colidx As Integer
Dim inputval, As Stirng

For rowidx = 1 To 10
inputval = ThisWorkbook.ActiveSheet.Cells(rowidx,1).Value
Select Case inputval
Case "a"
ThisWorkbook.ActiveSheet.Cells(rowidx,2).Value = "リンゴ"
Case "o"
...続きを読む


人気Q&Aランキング

おすすめ情報