• 締切済み

visual basicについて

visual basic6.0を使ってプログラミングの練習をしています。 入力した4つの整数を 以下の構文だと「定数式が必要です」とエラーがでてしまいます。 Option Explicit Dim a As Variant Dim b As Variant Dim c As Variant Dim d As Variant Private Sub Command1_Click() 'テキストに記入されたデータを代入 text1.Text = a text2.Text = b text3.Text = c text4.Text = d '4つの整数を1つの配列とする Dim F(a, b, c, d) As Variant If IsvbInteger(F) Then 'もしa,b,c,dいずれも有効な整数だったとき Call cbs.BubbleSort(F, UBound(F) + 1, True) '配列Fをバブルソート string1 = "" For j = 0 To UBound(F) stringx = stringx & F(j) & "," Next j Label1.Caption = stringx 'ラベルテキストにカスケード ElseIf vbArray(a, b, c, d) Then 'もし数字が重複していたとき msg = "整数が重複しています" btn = vbOKOnly Title = "警告" ElseIf F(a, b, c, d) = 0 Then '配列のうちどれかひとつでも0があったら msg = "0は無効です" btn = vbOKOnly Title = "警告" ElseIf isvbnull(a, b, c, d) Then '4つのうちどれかが空欄だったとき msg = "無効の値です" btn = vbOKOnly Title = "警告" Else '整数じゃなかったとき msg = "整数を入力してください" btn = vbOKOnly Title = "警告" End If '以上 End Sub なにかつっこむところがあったら教えて下さい。

みんなの回答

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.4

4つのテキストボックスに入力された数値を並べ替えようと しているのであれば、配列の使用方法が間違えています。 Dim F(4) As Variant F(1) = text1.Text F(2) = text2.Text F(3) = text3.Text F(4) = text4.Text ...の様にする必要が有ります。

回答No.3

Visual Basic の文法が判らないようなので、そこから学習する必要があります。 ・a,b,c,d はどこで入力されているのでしょうか? >'テキストに記入されたデータを代入 >text1.Text = a >text2.Text = b >text3.Text = c >text4.Text = d もし、この部分なら逆にする必要が有ります。 a = text1.Text b = text2.Text c = text3.Text d = text4.Text ただし、テキストボックスのTextプロパティは文字列型なので a,b,c,d のそれぞれのデータ型をVarType関数で求めても全て文字列形になります。 もし、a,b,c,d に入力された文字列が整数と認識できるかをチェックするには (1) IsNumeric関数で数字かどうか判定して (2) 数値が整数の範囲になっているか判定して (3) 実数でなく整数であることを確認する という手順が必要です。 つまり If IsNumeric(a) Then __If (-32768<=Val(a)) And (Val(a)<=32767) Then ____If Val(a)=Int(Val(a)) Then ______Print "整数文字列です" ____Else ______Print "実数文字列です" ____End If __Else ____Print "範囲外の実数文字列です" __End If Else __Print "数字以外の文字列です" End If インデントを__で表現してます。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

> 入力したテキストを整数型かどうか判別させたかったのですが、うまくいかないようです IsvbInteger のこと?そんな名前の関数は無いですよ? もともと配列の各要素を判別するような関数は無いので 自分で作ることになります。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

>'4つの整数を1つの配列とする >Dim F(a, b, c, d) As Variant ただの文法エラーですね。 このような書き方はできません。 1つ1つ配列の各要素に入れるように してください。 Variant は特殊で使い方が難しいです。 思わぬところでエラーにならないよう、 初心者は「使わない」のが懸命です。 文字列なら String 整数型なら Integer 数値と文字の間の変換は意図的にキャスト することをお勧めします。

asu_nan
質問者

お礼

as variantは初心者は使わない、承知しました もうちょっと例題をやってから挑もうと思います

asu_nan
質問者

補足

入力したテキストを整数型かどうか判別させたかったのですが、うまくいかないようです

関連するQ&A

  • VB 繰り返し(ループ)について教えてください

    私は最近プログラムを書く仕事に就いたのですがまったくの初心者でなかなか課題が先に進めずに困っています。もしわかる方いましたら是非教えていただけるとうれしいです。 今わからないのが、繰り返し(ループ)です。 何とか一桁目は完成しましたがこの先がどうやってもうまくいきません。左にTextBox、真ん中にCommand、左にLabelがあり左に整数を入れて真ん中を押すと左に漢数字で表示されるという形で5桁まで出来るようにしたいのです。 今出来ているものをとりあえずはりますので是非教えてください。 Option Explicit Private Sub Command1_Click() Dim a As Integer Dim b As String a = Val(Text1.Text) If a = 0 Then b = "0" ElseIf a = 1 Then b = "一" ElseIf a = 2 Then b = "二" ElseIf a = 3 Then b = "三" ElseIf a = 4 Then b = "四" ElseIf a = 5 Then b = "五" ElseIf a = 6 Then b = "六" ElseIf a = 7 Then b = "七" ElseIf a = 8 Then b = "八" Else b = "九" Label1.Caption = b End Sub

  • VBのデータグリッドビューで分析

    はじめまして。 学生でVBを使用しているのですが、どうしても分からない所があるので教えてください。 言葉足らずな部分があると思いますが、よろしくお願いします。 VisualBasic2010を使用しています。 私が作成したい機能は、 1、テキストボックスとコンボボックスで必要な情報を記入・選択 2、登録ボタンを押して登録 3、登録した内容がデータグリッドビューに表示される(削除・変更も可能) 4、分析ボタンを押すとコンボボックスの内容の数をかぞえる 私がつまずいている部分は4の「分析機能」です。 分析を押すと、数は表示されるようになりましたが 全て「0」が表示されてしまいます。 データグリッドビューの内容を検索して数をかぞえる方法が分からなくて 困っています・・。 つまずいている部分のコードを載せておきます。 どうぞお力を貸してください。 ---------------------------------------------------------- Private Sub bunnseki_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bunnseki_Button.Click '数の宣言 Dim ACount As Double = 0 Dim BCount As Double = 0 Dim CCount As Double = 0 Dim DCount As Double = 0 Dim FCount As Double = 0 '個数をカウント For i As Integer = 0 To listTask.Count - 1 'オブジェクトを取り出す Dim selectedTask As Task = listTask(DataGridViewTask.Rows(i).Index) 'タスクデータを取り出す selectedTask.GetData(TextBox.Text, A_ComboBox.Text, B_ComboBox.Text) If A_ComboBox.Text = "A" Then ACount += 1 ElseIf A_ComboBox.Text = "B" Then BCount += 1 ElseIf A_ComboBox.Text = "C" Then CCount += 1 ElseIf A_ComboBox.Text = "D" Then DCount += 1 ElseIf A_ComboBox.Text = "F" Then FCount += 1 End If Next '項目の数を表示 A_Label.Text = ACount.ToString B_Label.Text = BCount.ToString C_Label.Text = CCount.ToString D_Label.Text = DCount.ToString F_Label.Text = FCount.ToString End Sub

  • マクロ 記述が悪くエラーがかかります。

    いつも回答ありがとうございます。 最後らへんの記述で実行時エラー【型が一致しません】がかかります。 Worksheets("集計用").Range(b1, b2).Copy _ Destination:=Worksheets(b3).Range("B2") ← ここでエラーがかかる。 ワークシート名に変数を使用しているせいだと思います。 解決する方法を御指導して頂けないでしょうか?宜しくお願い致します。 Sub グラフの作成() Dim Date1 As Date Dim Date2 As Date Dim SName As String Dim b1 As Variant Dim b2 As Variant Dim b3 As Variant Dim d1 As Variant Dim d2 As Variant Dim d3 As Variant With Worksheets("集計用") s1: Date1 = Application.InputBox("最初の日付を2012/12/1のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b1 = .Columns("B").Find(Date1, , xlValues, 1) If b1 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s1 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d1 = b1.Row s2: Date2 = Application.InputBox("最初の日付を2012/12/31のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b2 = .Columns("B").Find(Date2, , xlValues, 1) If b2 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s2 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d2 = b2.Row s3: SName = Application.InputBox("商品名を入力して下さい。") If SName = "False" Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b3 = .Rows("3").Find(SName, , xlValues, 1) If b3 Is Nothing Then If MsgBox("入力した商品名が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s3 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d3 = b3.Column End With Worksheets.Add After:=Worksheets("集計用") ActiveSheet.Name = b3 Worksheets("集計用").Range(b1, b2).Copy _ Destination:=Worksheets(b3).Range("B2") Worksheets("集計用").Range(Cells(d1, d3), Cells(d2, d3)).Copy _ Destination:=Worksheets(b3).Range("C2") End Sub

  • VBAのcountif

    ここで質問させていただき、配列に必要なデータを入力する所までは出来ました。 次に各行ごとの"OK"の数をカウントしたいのですが、どのように記述すればよいのでしょうか? Sub count0(a, b, c, d, e)  Dim i1 As Long  Dim i2 As Long  Dim A1 As String  Dim bb As Variant  Dim cc As Variant  Dim dd As Variant  Dim ee As Variant  Dim myLastRow As Long  Sheets(a).Select  myLastRow = Cells(Rows.Count, 1).End(xlUp).Row + 1  bb = Range(b).Resize(myLastRow, 6)  cc = Range(c).Resize(myLastRow, 6)  dd = Range(d).Resize(myLastRow, 6)  ee = Range(e).Resize(myLastRow)  For i1 = 1 To myLastRow   For i2 = 1 To 6    If bb(i1, i2) = "" Then      A1 = "NG"     ElseIf bb(i1, i2) = "A1" Or cc(i1, i2) = "A1" Then      A1 = "-"     ElseIf bb(i1, i2) = cc(i1, i2) Then      A1 = "OK"     Else      A1 = "NG"    End If    dd(i1, i2) = A1   Next i2 '配列をカウントするこの行以降の記述が良く分かりません。   ee(i1) = Application.WorksheetFunction.CountIf(dd(), "OK")  Next i1  Range(e).Resize(myLastRow) = ee End Sub

  • VBAで行列を作る方法

    次のようなプログラミングで1,0,-1の要素で作られる3×3行列を全通り調べています。 この場合3の9乗通り調べることができます。 これを4×4や5×5行列など数を大きくして調べたいのですが、このプログラムを配列を使うなどして 簡単にできる方法を教えてください。 よろしくおねがいします。 Sub test() Dim a As Integer '行 Dim b As Integer '列 Dim c As Integer, i As Integer, j As Integer, d As Integer, e As Integer Dim 内積 As Integer, step As Integer Dim f As Integer, g As Integer, h As Integer, l As Integer, m As Integer, n As Integer, k As Integer, x As Integer Dim sum As Integer, total As Integer Dim aa As Integer, aaa As Integer, aaaa As Integer, bb As Integer, bbb As Integer, bbbb As Integer a = 3 '行 b = 3 '列 c = 0 内積 = 0 con = 0 sum = 0 tatal = 0 aa = 0 aaa = 0 aaaa = 0 bb = 0 bbb = 0 bbbb = 0 x = 0 For n = 0 To 2 For m = 0 To 2 For l = 0 To 2 For k = 0 To 2 For h = 0 To 2 For g = 0 To 2 For f = 0 To 2 For e = 0 To 2 For d = 0 To 2 '要素がすべて1 For i = 1 To a For j = 1 To b Cells(i, j) = 1 Next j Next i If bbbb = 1 Then Cells(a - 2, b - 2) = 0 ElseIf bbbb = 2 Then Cells(a - 2, b - 2) = -1 End If If bbb = 1 Then Cells(a - 1, b - 2) = 0 ElseIf bbb = 2 Then Cells(a - 1, b - 2) = -1 End If If bb = 1 Then Cells(a, b - 2) = 0 ElseIf bb = 2 Then Cells(a, b - 2) = -1 End If If aaaa = 1 Then Cells(a - 2, b - 1) = 0 ElseIf aaaa = 2 Then Cells(a - 2, b - 1) = -1 End If If aaa = 1 Then Cells(a - 1, b - 1) = 0 ElseIf aaa = 2 Then Cells(a - 1, b - 1) = -1 End If If aa = 1 Then Cells(a, b - 1) = 0 ElseIf aa = 2 Then Cells(a, b - 1) = -1 End If If total = 1 Then Cells(a - 2, b) = 0 ElseIf total = 2 Then Cells(a - 2, b) = -1 End If If sum = 1 Then Cells(a - 1, b) = 0 ElseIf sum = 2 Then Cells(a - 1, b) = -1 End If If con = 1 Then Cells(a, b) = 0 ElseIf con = 2 Then Cells(a, b) = -1 End If con = con + 1 Next d con = 0 sum = sum + 1 Next e sum = 0 total = total + 1 Next f total = 0 aa = aa + 1 Next g aa= 0 aaa = aaa + 1 Next h aaa = 0 aaaa = aaaa + 1 Next k aaaa = 0 bb = bb + 1 Next l bb = 0 bbb = bbb + 1 Next m bbb = 0 bbbb = bbbb + 1 Next n End Sub

  • 乱数の利用

    僕の通う中学校では、乱数を利用してプログラムを作成することになりました。そしてプログラムを作りましたがステートメントがないと出てきます。どう解決すればよいでしょうか?これがプログラムです。 Dim a,b,c,d,e,f,g a=msgbox("幸せですか?",4) if a=6 then const b="運勢" randomize b=int(rnd*10) select case b case 0,1,2 c=messagebox("吉でした。彼女はいますか?",4) if c=6 then msgbox"90%",,b elseif c=7 then msgbox"60%",,b end if case 3,4,5 d=msgbox("凶でした。友達はいますか?",4) if d=6 then msgbox"60%",,b elseif d=7 then msgbox"20%",,b end if case 6,7 e=msgbox("末吉でした。",4) if e=6 then msgbox"60%",,b elseif e=7 then msgbox"40%",,b end if case 8 f=msgbox("大凶でした。夢はありますか?",4) if f=6 then msgbox"30%",,b elseif f=7 then msgbox"10%",,b end if case else msgbox"100%",,b end if elseif a=7 msgbox"0%" end select

  • マクロ セル参照時の記述

    いつも回答ありがとうございます。 似たような質問をしていますが、下記の記述の(b3.value!"$B$1").の箇所でエラーがかかりました。 .SetSourceData Source:=Range(b3.value!"$B$1").CurrentRegion どのように変更したら上手く動作するのでしょうか?b3は変数です。御指導の程宜しくお願い致します。 Sub グラフの作成() Dim Date1 As Date 'グラフの始点の日付 Dim Date2 As Date 'グラフの終点の日付 Dim SName As String '商品名 Dim b1 As Variant 'グラフの始点のセル番号 Dim b2 As Variant 'グラフの終点のセル番号 Dim b3 As Variant '対象の商品名のセル番号 Dim d1 As Variant 'b1と違う列のセル番号 Dim d2 As Variant 'b2と違う列のセル番号 Dim d3 As Variant 'b3と違う列のセル番号 With Worksheets("集計用") s1: Date1 = Application.InputBox("最初の日付を2012/12/1のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b1 = .Columns("B").Find(Date1, , xlValues, 1) If b1 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s1 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d1 = b1.Row s2: Date2 = Application.InputBox("最初の日付を2012/12/31のように入力してください。") If Date1 = 0 Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b2 = .Columns("B").Find(Date2, , xlValues, 1) If b2 Is Nothing Then If MsgBox("入力した日付が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s2 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d2 = b2.Row s3: SName = Application.InputBox("商品名を入力して下さい。") If SName = "False" Then MsgBox "キャンセルされました。", vbOKOnly Exit Sub End If Set b3 = .Rows("3").Find(SName, , xlValues, 1) If b3 Is Nothing Then If MsgBox("入力した商品名が見当たりません。" & vbNewLine & _ "再度入力しますか?", vbYesNo) = vbYes Then GoTo s3 Else MsgBox "処理を中止しました", vbOKOnly Exit Sub End If End If d3 = b3.Column Worksheets.Add After:=Worksheets("集計用") ActiveSheet.Name = b3.Value .Activate .Range(b1, b2).Copy _ Destination:=Worksheets(b3.Value).Range("B2") .Activate .Range(Cells(d1, d3), Cells(d2, d3)).Copy _ Destination:=Worksheets(b3.Value).Range("C2") With Worksheets(b3.Value).Range("D2:D" & Range("C65536").End(xlUp).Row) .Formula = "=SUM(C2,D1)" .Value = .Value End With End With Charts.Add With ActiveChart .ChartType = xlColumnClustered .SetSourceData Source:=Range(b3.value!$B$1").CurrentRegion With .Axes(xlValue) .MaximumScale = 10 .MajorUnit = 1 End With .Location Where:=xlLocationAsObject, Name:=b3.Value End With End Sub

  • 文字列連結演算子を使った繰り返し(ループ)について

    Text1・Command1・Label1 と並んだBoxでText1に数字を入力しCommand1を押すと漢数字(一,二…)となるプログラムなのですが、一桁ずつ求めて行き最後に文字列連結演算子を使って求める場合はどのようにしたらよいのでしょうか? エラーが出るのでどこかが変なんだと思うのですが、何度みてもわからなくて。。。今途中の段階ですが当方がやったところまでを乗せておきますので。違うところや付け足すところなど指摘したり教えていただけたらと思っています。よろしくお願いします。 Private Sub Command2_Click() Dim a As Integer Dim b As String a = Val(Text1.Text) For x = 1 To 5 If a = 1 Then Label1.Caption = "一" ElseIf a = 2 Then Label1.Caption = "二" ElseIf a = 3 Then Label1.Caption = "三" ElseIf a = 4 Then Label1.Caption = "四" ElseIf a = 5 Then Label1.Caption = "五" ElseIf a = 6 Then Label1.Caption = "六" ElseIf a = 7 Then Label1.Caption = "七" ElseIf a = 8 Then Label1.Caption = "八" ElseIf a = 9 Then Label1.Caption = "九" Else Label1.Caption = "〇" sText1 = "1" & "2" & "3" & "4" & "5" & "6" & "7" & "8" & "9" sLabel1 = "一" & "二" & "三" & "四" & "五" & "六" & "七" & "八" & "九" End If End Sub

  • プログラミングVisual Basicの質問です。

    任意の数字を入力し、Len関数とMid関数を使って2進数を10進数に変換するというプログラムを作っているのですが、うまくいきません。 コードは Dim a  As Integer Dim b  As Integer Dim i  As Integer a = Val(TextBox1.Text) For i = Len(a) To 1 Step -1 If Mid(a, Len(a), 1) = "1" Then b += 2 ^ (i - 1) End If Next Label3.Text = b    End Sub 上記のものが作ったコードです。 問題点の指摘をよろしくお願いします。

  • 小数点以下表示

    averageで計算した値を表示したところ、 勝手に四捨五入されてしまいました 小数点第二位まで表示したいので どなたかよろしくお願いいたします<m(__)m> Option Explicit Public Sub 平均() Const SH_NAME As String = "VBA" Dim art As String Dim i Dim ws As Worksheet Dim endrow As Long Dim msg As String Dim writerow As Integer Dim target As Range Dim ActCell As Variant Dim Result As Integer Set ws = ThisWorkbook.Worksheets(SH_NAME) writerow = 2 art = InputBox("日付を入力してください") With ws endrow = .Cells(Rows.Count, 2).End(xlUp).Row For i = 2 To endrow If art = .Range("A" & i) Then If target Is Nothing Then Set target = Range("D" & i) Else Set target = Union(target, Range("D" & i)) End If Else If InStr(msg, .Range("A" & i)) = 0 Then msg = msg & .Range("A" & i) & vbCrLf End If End If Next i If msg <> "" Then MsgBox msg End If target.Select ActCell = Selection.Address Result = Application.WorksheetFunction.Average(.Range(ActCell)) Range("F39").Value = Result Range("F39").NumberFormatLocal = "0.00" End With End Sub