OSは、XP
Excelは、2003 を使用しています。
ユーザーフォームで、ListBoxの行数取得のところが上手く行かずに困っています。
**************
Private Sub btnSalesDelete_Click()
'lstinfoにおいて、どの行も選択されていなければ、終了
If lstInfo.ListIndex = -1 Then Exit Sub
Dim res As Integer
Dim Msg As String, Title As String
Msg = "伝票番号:" & lstInfo.Value & " を削除します。よろしいですか?"
Title = "確認"
res = MsgBox(Msg, vbYesNo + vbExclamation + vbDefaultButton2, Title)
If res = vbNo Then Exit Sub
'シート「売上基本情報」の該当行の「削除」列に1を代入
Dim TargetRow As Integer
TargetRow = lstInfo.Value + 1
Worksheets("売上基本情報").Cells(TargetRow, 5).Value = 1
'シート「売上明細」の該当行の「削除」列に1を代入
Dim c As Integer
c = lstInfoMeisai.ListCount '明細行の行数をcに代入
Dim i As Integer
Dim r As Integer
For i = 0 To c - 1
r = lstInfoMeisai.List(i, 0) '←←←ここで実行エラー13 型が一致しません になります。
Worksheets("売上明細").Cells(r + 1, 15).Value = 1
Next
'lstinfoから、行を削除
lstInfo.RemoveItem lstInfo.ListIndex
'lstinfomeisaiのリストをクリア
lstInfoMeisai.Clear
End Sub
*****************
上記で実行すると、lstInfoのListCountと同じ数字を、lstInfoMeisaiの方にも代入されます。
実際、lstInfoMeisaiのListCountが 12、lstInfoのListCountが 3 の場合、
rが4になった時、実際にはそのListCountにがデータがないので、””を返してしまい、
実行エラー13 型が一致しません とデバックになってしまいます。
説明が上手くなくて申し訳ありませんが、どなたか修正の仕方を教えていただけないでしょうか?
よろしくお願い致します。
No.3
- 回答日時:
2つのListBox に何が出ているのか、かなり不安な部分があります。
片方のlstInfoには、行数が出るのでしょうか?lstInfoMeisaiの役割が見えていないから、今のところ分かる範囲での処理です。Imageがあると分かりやすかったです。手っ取り早く直すなら、
×Dim r As Integer → Dim r As Variant
For i = 0 To c - 1
r = lstInfoMeisai.List(i, 0)
r = Val(r) '←
If r > 0 Then
Worksheets("売上明細").Cells(r + 1, 15).Value = 1
End If
Next
古い人ですと、Val では邪道だと思う人がいるかと思いますが、当面の処置です。しかし、cLngではできません。
WindFaller様
ご回答頂きましてありがとうございます。
元データの方が虚実入り交じってまして、
表に出しても問題ないデータにしなければならず、
イメージを載せられなくて申し訳ありません。
書いて下さったステートメントを実行してみたのですが、
>'シート「売上基本情報」の該当行の「削除」列に1を代入
は出来ていますが、
>'シート「売上明細」の該当行の「削除」列に1を代入
が出来ていない結果になってしまいました。
Valは文字列の数字を、数字の数字として見なすものですよね?
(ちょっと説明が下手すぎてすみません。)
やはり元のデータをしっかり整備する事が大事かなと感じてます。
合間に作業しているのでなかなかすぐには出来ないのですが、
もう少し元データの整理も考えます。
ご回答頂いた事、感謝致します。
ありがとうございました。
No.2ベストアンサー
- 回答日時:
#1です。
失礼、間違えました。訂正をお願いします。簡単な対処法として
For i = 0 To c - 1
If IsNumeric(lstInfoMeisai.List(i, 0)) Then
r = lstInfoMeisai.List(i, 0)
Worksheets("売上明細").Cells(r + 1, 15).Value = 1
Else
MsgBox "要確認 " & lstMeisai.List(i, 0)
' その他に必要な処理があれば、、、
End If
Next
ANo1へのお礼の文で間違いがありました。
教えて下さったステートメントにすると、
私がしたかったこと=該当のデータの指定のセルに"1"を入れる
が、ちゃんと処理されていました。
>lstInfoMeisaiの方にデータが乗って来ない様になり
ではなく、
'lstinfoから、行を削除
lstInfo.RemoveItem lstInfo.ListIndex
'lstinfomeisaiのリストをクリア
lstInfoMeisai.Clear
が実行されて、ListBoxのデータがクリアされた、という事でした。
と、言うことは
実行エラーも出ていないですし、
MsgBox "要確認 " を表示しない様にすれば、
私のしかった事が完了すると言うことですね。
色々とややこしい書き方になってしまいましたが、
教えて下さってありがとうございました。
No.1
- 回答日時:
こんにちは
> 実行エラー13 型が一致しません
ということだと、エラーの意味としては
Dim r As Integer
r = "OO1" ' オーオーイチ
r = "ll2" ' エルエルニ
r = " " ' 空白に見えるけど実はスペースが!
r = "" ' 空白に見えるけど実は長さ0の文字列(空文字)が!
などのように
Integer型の変数に、文字列を代入しようとすれば普通にエラーになる
ってことだと思います。
簡単な対処法として
If IsNumeric(lstMeisai.List(i, 0)) Then
r = lstMeisai.List(i, 0)
' For...従来の処理
Else
MsgBox "要確認 " & lstMeisai.List(i, 0)
' その他に必要な処理があれば、、、
End If
のように分岐するなどの方法があります。
#これ↑で十分かどうか、の判断は必要な情報を唯一知る質問者さんにしかできませんけれども。
他に検討したほうがよいこととして
・元データの不正を直す。
数値であるべき列に文字列がないかジャンプ機能で確かめて、、、とか
・不正なデータ入力を防ぐ対策を施す。
入力規則を活用するとか
・コードの中でデータの不正をきちんとチェックする。
一旦Variant型で受けて、
数値であるかどうか、または、データ型が何であるか、規定外の数値でないか、
チェックした上で条件分岐して、Long型に変換するとか。
本来はListBoxのListを設定する段階でチェックする方がベターです。
///
とりあえずの所見としては、行数取得の際のトラブルである可能性は低く、
単に元になるデータの不正が原因である可能性が高いようです。
確かめてみてください。
cj_mover様
ご回答頂き、ありがとうございます。
早速 ANo2に書いて頂いたステートメントに変えて実行してみたところ、
要確認 のメッセージボックスが表示され、
lstInfoMeisaiの方にデータが乗って来ない様になり、
実行エラーも出ませんでした。
ご指摘の通り、数字に見えて数字ではないことが原因ですね。
何日も考えて分からなかったので、原因が判明してすごく嬉しいです。
本当にありがとうございました。
元のデータの方をきちんと数字になるように修正します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
恒等的に正しいとはどういう意...
-
数学の質問です。 3で割ると2余...
-
SPIの問題
-
7で割ると2余り、11で割ると3余...
-
計算問題
-
楕円と円の共有点について
-
FX:指定した時間の高値・安値を...
-
数Bの数列の問題です。 正の奇...
-
1/x+1/y+1/z=1/2
-
これなんで、3のN−1乗なんで...
-
至急!数学の基本問題、助けて...
-
解く過程が分かりません
-
高2数学 軌跡
-
3つが有理数。
-
4元連立方程式の解き方を教えて...
-
x+y/5=y+z/6=z+x/7 x+y+z=27 xy...
-
πの式
-
整数の問題です。(10^n)+1は素...
-
数Ⅰ 2X-3>a+8Xについて次の問い...
-
整数問題9 激難だそうです
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SPIの問題
-
恒等的に正しいとはどういう意...
-
数学の質問です。 3で割ると2余...
-
高2数学 軌跡
-
3で割ると2余り,5で割ると3余...
-
w=1/z−iのときz平面上の図形は...
-
「Access」のフォームで、同じ...
-
計算問題
-
7で割ると2余り、11で割ると3余...
-
平衡定数の求め方について、ΔG=...
-
至急!数学の基本問題、助けて...
-
高校数1についての質問です。 ...
-
エクセル 2/3乗
-
TextBox1とTextBox2の数値の大...
-
4元連立方程式の解き方を教えて...
-
次の関数の組が線形独立である...
-
e^ixを1次の項までテイラー展開...
-
整数の問題です。(10^n)+1は素...
-
高校数学:整数
-
連想配列の初期化
おすすめ情報