質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

3回答

4926閲覧

数値を入力してメッセージに入力した数値以上が表示されるようにしたい

bd_

総合スコア21

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/06/05 00:45

前提・実現したいこと

VBAでメッセージに数値を入力し、A1~A10の範囲でその入力された値以上が表示できるようにしたい

発生している問題・エラーメッセージ

IngTotalの型が一致せず、コンパイルできない状態です。

型が一致しません

該当のソースコード

VBA

1Sub 練習() 2Dim strIn As String 3 Dim lngIn As Long 4 Dim i As Long 5 Dim lngTotal(10) As Long 6 Erase IngTotal 7 8 strIn = InputBox("数値を指定して下さい。", "数値入力") 9 If strIn = "" Then 10 11 MsgBox "数値が指定されませんでした。", , "警告" 12 Else 13 lngIn = strIn 14 15 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 16 If Cells(i, 1) >= lngIn Then 17 lngTotal(10) = Cells(i, 1) 18 End If 19 Next i 20 MsgBox "数値以上" & lngTotal, , "結果" 21 End If 22 23 24 25End Sub

試したこと

配列に要素を入れて複数の値が入るようにした。

補足情報(FW/ツールのバージョンなど)

Microsoft Visual Basic

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Dim lngTotal(10) As Long Erase IngTotal

↑宣言しているのは「lngTotal」。「IngTotal」ではない。

Dim strIn As String Dim lngIn As Long '中略 lngIn = strIn

↑「lngIn」はlong型。「strIn」はString型。long型の変数にString型の値は入らない。

MsgBox "数値以上" & lngTotal, , "結果"

↑lngTotalは配列。MsgBoxで配列は表示できない。

投稿2018/06/05 01:02

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bd_

2018/06/05 01:27

IngTotalは修正しました。もし何も入力されなかった場合はlngTotalでどう表現すればよろしいでしょうか。3つ目の表示の仕方に関してはCells(1, 2) = lngTotal(10)で表示すれば良いでしょうか。
tkturbo

2018/06/05 01:47

> もし何も入力されなかった場合は ???その場合のエラーハンドリングは自分で書いてますよね?
tkturbo

2018/06/05 01:50

> 3つ目の表示の仕方 「vba」「配列」「MsgBox」あたりのキーワードで検索してみては?
guest

0

ベストアンサー

多分、指定した数値以上のものを列挙して表示させたいのだと思いますが、コンパイルエラー以外にも配列の扱いを誤っています。

スペルミスを防ぐにはOption Explicitによって変数の宣言を強制させると、コンパイル時のエラーとすることができます。

VBA

1Option Explicit 2 3Sub 練習() 4Dim strIn As String 5 Dim lngIn As Long 6 Dim i As Long, j As Long 7 Dim lngTotal(10) As String '()内は配列のサイズ 8 Erase lngTotal '←スペルミス 9 10 strIn = InputBox("数値を指定して下さい。", "数値入力") 11 If strIn = "" Then 12 13 MsgBox "数値が指定されませんでした。", , "警告" 14 Else 15 lngIn = strIn 16 j = 0 17 For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 18 If Cells(i, 1) >= lngIn Then 19 lngTotal(j) = Cells(i, 1) '()内はアクセスする配列の位置 20 j = j + 1 21 End If 22 Next i 23 MsgBox "数値以上" & Join(lngTotal, ","), , "結果" '表示用なので配列を文字型にした 24 End If 25End Sub

投稿2018/06/05 08:08

sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1次元配列は、Join([配列],",") 等とすると、文字列に変換できます。

投稿2018/06/05 02:13

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問