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

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

ただいまの
回答率

90.76%

  • VBA

    1644questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 128

bd_

score 15

 前提・実現したいこと

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

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

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

型が一致しません

 該当のソースコード

Sub 練習()
Dim strIn As String                                                
    Dim lngIn As Long                                                   
    Dim i As Long                                                        
    Dim lngTotal(10) As Long 
    Erase IngTotal

    strIn = InputBox("数値を指定して下さい。", "数値入力")   
    If strIn = "" Then

        MsgBox "数値が指定されませんでした。", , "警告"      
    Else
        lngIn = strIn                                                    

        For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row         
            If Cells(i, 1) >= lngIn Then                              
                lngTotal(10) = Cells(i, 1)     
            End If
        Next i
        MsgBox "数値以上" & lngTotal, , "結果"                                  
    End If



End Sub

 試したこと

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

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

Microsoft Visual Basic

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

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 10:27

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

    キャンセル

  • 2018/06/05 10:47

    > もし何も入力されなかった場合は

    ???その場合のエラーハンドリングは自分で書いてますよね?

    キャンセル

  • 2018/06/05 10:50

    > 3つ目の表示の仕方

    「vba」「配列」「MsgBox」あたりのキーワードで検索してみては?

    キャンセル

checkベストアンサー

0

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

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

Option Explicit

Sub 練習()
Dim strIn As String
    Dim lngIn As Long
    Dim i As Long, j As Long
    Dim lngTotal(10) As String '()内は配列のサイズ
    Erase lngTotal '←スペルミス

    strIn = InputBox("数値を指定して下さい。", "数値入力")
    If strIn = "" Then

        MsgBox "数値が指定されませんでした。", , "警告"
    Else
        lngIn = strIn
        j = 0
        For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
            If Cells(i, 1) >= lngIn Then
                lngTotal(j) = Cells(i, 1)  '()内はアクセスする配列の位置
                j = j + 1
            End If
        Next i
        MsgBox "数値以上" & Join(lngTotal, ","), , "結果" '表示用なので配列を文字型にした
    End If
End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    VBA タイマー機能をつける

    文字の意味とフォントの色が一致しないようなテスト(ストループカラーワードテスト;例 あかという文字が緑色で書かれている)を作りたいです. 現在,問題は画像で表示して,その回答が下

  • 解決済

    VBA 文字検索 セルに入力した文字を含むセル行だけを表示したい(オートフィルタのように)

    実現したいこと セルに入力した文字を含むセルがあった場合 ①該当するセルの背景色を変えたい ②当てはまるセルがあった場合 →その検索文字を含む行だけを表示したい(オートフィ

  • 解決済

    VBAの配列の質問

    VBAの配列で教えてほしい事があります。 同一ブック内に2つのsheetがあります。 ”集計結果”と”一時保管”です。 ”一時保管”はA~D列にデータが入っています。

  • 解決済

    VBA高速化について

    20個のエクセルファイルを読み込み、特定のシートにあるテーブルから特定の値を探し出し、その右横にあるセルの値を取り出します。 集計用のエクセルのテーブルでも、同じ特定の値をテーブル

  • 解決済

    For ~ Next 繰返し処理の最後で意図しない値を得てしまいます。

    Dim p As Integer Dim yearF As Integer p = 3 Worksheets("list").Select For

  • 解決済

    指定範囲内のセルから数字を含まないセルを削除したい

    VBAを使ってエクセルの指定範囲内のセルから数字を含まないセルを削除したいと考えています。 具体的にはシート名”抽出”のJ列2行目から最終行までで、セル内に0~9の数字が入って

  • 解決済

    vbaにおける可視セルの選択(複数行の場合)

    質問させていただきます。 Excelでデータベースを作成中です。(来店記録のようなものです) 現在、A列に名前、B列に住所が入っており、C列には日付、D列には○か☓が必ず入る予定の

  • 解決済

    VBA 条件分岐 while文?

     VBAで背景色をつけたい。エクセルの範囲を指定せずに、複数の条件分岐を実現したい ここに質問の内容を詳しく書いてください。 かなり長文になると思いますが、色々試した結果、手詰まり

同じタグがついた質問を見る

  • VBA

    1644questions

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