• 締切済み

このプログラムを改良したいんですが・・・

このプログラムを改良したいんですが・・・ VBSのプログラムです、 入力した数字の足し算をするプログラムを 書いてみたいんですが・・・ 下の書き方だと「x+y=xy」となってしまって 5+5=10 のようにすることができません。 インプットボックスに入力された数字を数値として 認識させるにはどうすればいいんでしょうか? それとも、別の書き方があるのでしょうか・・・; ご指導おねがいします。 x=inputbox("1つ目の数字を入力してください。") y=inputbox("2つ目の数字を入力してください。") msgbox purasu() function purasu() purasu=(x)+(y) end function

みんなの回答

  • layy
  • ベストアンサー率23% (292/1222)
回答No.3

この先どうしたらできますか、というのは無限ですから早めに自分で解決する手段を見つけること。 「数字を数値に」 「メッセージボックスの表記の仕方」 「FUNCTIONやSUBの作り方」 など、組み立てしないでコード記載が先行した感じですから、使い方を見直すとよいです。ネットで検索するとか。 式はいかに変数と文字列をつなげて表記するか 変数X & "+" & 変数Y & "=" & PURASUの結果 をまず考えたら良いです。

全文を見る
すると、全ての回答が全文表示されます。
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.2

ANo.1さんが回答されていますが、下記などを参照して調べてみたらいかがでしょうか。 http://www.kanaya440.com/contents/script/vbs/function/index_text.html

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

昨日プログラムを始めたような人のプログラムですよ。もっと基礎的なことを、勉強してから質問するべきですね。改良(機能の向上を図るときに使う)どころか、動かないでしょう。 ーー InputBoxの返す値は文字列です。そのことを判って(確認して)もらうために MsgBox VarType(x) を入れています。 下記はエクセルVBAのためのVBE画面に入力したものですが、メモ帳に入力するとチェックや先頭大文字化もしてくれないので、エクセルでやってみました。 ーーー Sub test02() x = InputBox("1つ目の数字を入力してください。") MsgBox VarType(x) '8とでたら文字列です xn = Val(x) y = InputBox("2つ目の数字を入力してください。") yn = Val(y) MsgBox purasu(xn, yn) End Sub Function purasu(x, y) purasu = x + y End Function ーー VBSでは X=から X= InputBox("1つ目の数字を入力してください。") MsgBox VarType(x) '8とでたら文字列です xn =Clng(x) y = InputBox("2つ目の数字を入力してください。") yn = Clng(y) MsgBox purasu(xn, yn) '--- Function purasu(x, y) purasu = x + y End Function のようにします。 前者との違いがエクセルVBAとVBSの違いです。 Sub、EndSubを除くとか、数値化の関数が違うとかあるようです。 計算に絡んだ関数には引数のセットは普通必要であることが多い。

magus-night
質問者

補足

回答ありがとうございます^^ 本当に昨日プログラム始めたばっかりですw ネットで調べただけなので きっと勉強時間は5時間も経ってないです; だからこんな初歩的なものしか書けません(^q^) もっと基礎を勉強してから質問するべきだったんですね・・・ こんなちゃちい質問してた自分が馬鹿みたいです、ていうか馬鹿ですorz この質問は削除するので、今後勉強してから また分からないとき質問します。 せっかく丁寧に説明してもらったのにすいません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • If文で何故か望んだ結果が出ない。

    VBSで、 a=inputbox ("a") b=inputbox ("b") c=inputbox ("c") x=(a-2000+b)-c*0.8 If x<c then msgbox x&" type Y" else msgbox " type N" End if と、いうのを制作したのですが、 例えば、a=15000、b=4000、c=5000と数値を入力した場合、x=13000となり、 「x<c」では無いので結果標示が「type N」となるはずなのですが何故か「13000 type Y」と標示されてしまいます。 色々と試行錯誤したのですが、何故このような結果になってしまうのか皆目検討がつきません。 宜しければ何が原因となっているのか御教示お願いいたします。

  • プログラムの改良。

    うまく改良できなくて困っています。 このプログラムを #include <stdio.h> #include <stdlib.h> /* データ用変数 */ struct xy {  int x;  int y; } *hil; int idx; /* ヒルベルトスキャン */ void hilbert(int n, int p, int x, int y) {  if (n>1) {   hilbert(n/2, (p+4)%8, x+(p&1)*(n/2), y+((p>>1)&1)*(n/2));   hilbert(n/2, p, x+((((p>>1)^(p>>2)))&1)*(n/2), y+(~(p^(p>>2))&1)*(n/2));   hilbert(n/2, p, x+(~p&1)*(n/2), y+(~(p>>1)&1)*(n/2));   hilbert(n/2, 7-p, x+(~((p>>1)^(p>>2))&1)*(n/2), y+((p^(p>>2))&1)*(n/2));  } else {   hil[idx].x=x; hil[idx].y=y; idx++;  } } int main(void) {  int i,n;  /* nの入力と領域確保 */  printf("n? "); scanf("%d",&n);  if((hil=(struct xy*)malloc(sizeof(struct xy)*(1<<n)*(1<<n)))==NULL) {   printf("malloc error\n"); return -1;  }  /* ヒルベルトスキャン */  idx=0; hilbert((1<<n),4,0,0);  /* データ表示 */  for (i=0; i<idx; i++) {   printf("%d ([d %d]\n",i,hil[i].x,hil[i].y);  }  /* 領域開放 */  free(hil);  return 0; } 実行結果はn?8 0 [0 0] 1 [0 1] ・ ・ 65534 [0 254] 65535 [0 255] と表示されます。これを buf[0]=img[hil[0].x][hil[0].y][0] buf[1]=img[hil[0].x][hil[1].y][0] ・ ・ buf[65534]=img[hil[0].x][hil[254].y][0] buf[65535]=img[hil[0].x][hil[255].y][0] と表示させたいのですがうまくできません。どこを改良すればいいでしょうか?お願い致します。 buf[]の中身は0から256*256-1を表しています。

  • プログラムで入力した数値を変更したい場合はどのようにすればよいのでしょ

    プログラムで入力した数値を変更したい場合はどのようにすればよいのでしょうか? 初めまして。現在Scilabを用いてプログラムを書いているのですが、入力変数が多いために、入力ミスをしたときに修正するプログラムを書こうとしています。たとえば、 for x=1:100 y(x)=input('y=');disp(y); end; という、100個変数を入力する場合を考えているのですが、変数を入力し間違えた場合に、最初からやり直すのは面倒なので、これを補うプログラムを考えてほしいのです><; 入力変数は毎回ことなるので、どこかに保存ということもできず・・・。入力をし間違えた場合にループを一つ戻るようにするにはどのようにすればよいのでしょうか?

  • エクセルVBA Inputboxについて教えてください。

    InputBoxの使い方について教えてください。 テストで下記のように書いてみました。 Sub input_test2() ans = InputBox("質問!適当に数字を入れてね") MsgBox Application.WorksheetFunction.IsNumber(ans), vbInformation, "入力判定" If Application.WorksheetFunction.IsNumber(ans) Then If ans = 0 Then MsgBox "入力されたのは、 0", vbInformation, "回答" If ans = 1 Then MsgBox "入力されたのは、 1", vbInformation, "回答" If ans = 2 Then MsgBox "入力されたのは、 2", vbInformation, "回答" If ans = 3 Then MsgBox "入力されたのは、 3", vbInformation, "回答" If ans >= 4 Then MsgBox "入力されたのは、 4以上", vbInformation, "回答" Else MsgBox "入力は数字でしてください!", vbExclamation, "お願い" End If End Sub 1.入力が数値ならTRUEがかえると思ったのですが、何を入れてもFALSEしかかえりません。どこがまずいのでしょうか? 2.表示されるInputBoxのサイズが随分横に長いのですが、サイズを変える方法はあるのでしょうか? 3.MsgBoxの"入力判定"や”回答”ようにInputBoxにも最上行に日本語を表示させる方法はないでしょうか? 以上、よろしくお願いいたします。

  • エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛

    エクセルの1シート内にある複数の散布図のx軸とy軸の最大目盛、最少目盛、目盛間隔を揃えるにはどのようにしたら良いか教えてください。いくつかwebsiteで調べて下記のようにしてみましたが、x軸の目盛を変更するところで、失敗してしまいます。 よろしくお願いします。 Sub XY軸() Dim Ymin Ymin = InputBox("Y軸の最少?") If IsNumeric(Ymin) Then Range("C2").Value = Ymin Else MsgBox "入力NG!" End If Dim Ymax Ymax = InputBox("Y軸の最大?") If IsNumeric(Ymax) Then Range("C3").Value = Ymax Else MsgBox "入力NG!" End If Dim Y Y = InputBox("目盛間隔?") If IsNumeric(Y) Then Range("C4").Value = Y Else MsgBox "入力NG!" End If Dim xmin xmin = InputBox("X軸の最少?") If IsNumeric(xmin) Then Range("D2").Value = xmin Else MsgBox "入力NG!" End If Dim Xmax Xmax = InputBox("X軸の最大?") If IsNumeric(Xmax) Then Range("D3").Value = Xmax Else MsgBox "入力NG!" End If Dim X X = InputBox("Xの目盛間隔?") If IsNumeric(X) Then Range("D4").Value = X Else MsgBox "入力NG!" End If Dim co As ChartObject For Each co In ActiveSheet.ChartObjects With co.Chart With .Axes(xlValue) .MinimumScale = Range("C2").Value '最小値 .MaximumScale = Range("C3").Value '最大値 .MajorUnit = Range("C4") '目盛間隔 End With With .Axes(xlCategory) .MinimumScale = Range("D2").Value '最小値 .MaximumScale = Range("D3").Value '最大値 .MajorUnit = Range("D4") '目盛間隔 End With End With Next End Sub

  • VBAにおける、たし算の自動作問プログラムについて

    二列目に、二桁の整数の足し算を出題することができるたし算の作問プログラムを以下のように作ったのですが、続いて三列目に、足し算の解答をして、それの正誤を確かめるプログラムを作りたいのですがどのようにすればよいでしょうか? ↓作問のプログラム Sub test() Columns("B:F").Clear n = InputBox("問題数は?") ReDim ans(n) For i = 1 To n Randomize x = Int(Rnd * 100) Randomize y = Int(Rnd * 100) ans(i) = x + y Cells(i, 2) = "(" & i & ") " & x & " + " & y & " = " Next i End Sub 以下のような感じで採点のプログラムを作りたいのですが、上のプログラムの変数ans(i)を参照する場合、下のプログラムのans(i)はどのように定義すればよいのでしょうか? Sub saiten() For i = 1 To n If Cells(i, 3) = ans(i) Then Cells(i, 4) = "○" Else: Cells(i, 4) = "×" Next i End Sub

  • 【VBScript】プログラム改良

    VBScriptのプログラムについて、 回答頂きたく投稿しました。 以下を実行すると、 65行目で「'End'がありません。」とエラー表示されてしまいます。 End Ifは入れているはずですが、どこが問題なのでしょうか? またIfステートメントを少し減らしたいのですが、 どうすればシンプルな形になりますでしょうか? 恐れ入りますが、アドバイス頂ければ幸いです。 Option Explicit Dim intCount, strFile, strArg, strX, lonMsgBox, objFSO, objOpen, strText, strNewFile, objTS intCount = 0 If WScript.Arguments.Count = 0 Then WScript.Echo "引数が指定されていません。" WScript.Quit End If For Each strArg In WScript.Arguments intCount = intCount + 1 strFile = strArg Next Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.GetExtensionName(strFile) <> "txt" Then If intCount > 1 Then MsgBox "2つ以上のファイルが指定されています。" & vbCr _ & "ファイルを指定し直してください。", 48, "Error" WScript.Quit Else MsgBox "テキストファイル以外が指定されています。" & vbCr _ & "ファイルを指定し直してください。", 48, "Error" WScript.Quit End If Else strX = InputBox("抽出したい文字列を入力してください。", "変換処理") If strX <> "" Then lonmsgbox = MsgBox (strX & "を抽出します。" & vbCr _ & "変換しますか?", 4 + 32 + 0, "確認") If lonmsgbox = 6 Then strNewFile = objFSO.BuildPath( _ objFSO.GetParentFolderName(strFile), _ objFSO.GetBaseName(strFile) & "_New." & objFSO.GetExtensionName(strFile)) Set objTS = objFSO.OpenTextFile(strNewFile, 2, True) Set objOpen = objFSO.OpenTextFile(strFile, 1) Do Until objOpen.AtEndOfStream = True strText = objOpen.ReadLine If InStr(strText, strX) > 0 Then objTS.WriteLine strText End If Loop objTS.Close Set objTS = Nothing objOpen.Close Set objFSO = Nothing WScript.Sleep 1000 MsgBox ("文字列の抽出が完了しました。") Else MsgBox ("処理を中断します。") End If End If ElseIf IsEmpty(strX) then MsgBox ("キャンセルされました。") WScript.Quit Else MsgBox "文字列が入力されていません。" & vbCr _ & "入力し直してください。", 0, "Error" WScript.Quit End If

  • プログラムについて

    今このようなプログラムを作っているのですが、わからなくて困っています。 Private Sub Command1_Click() Command1.Enabled = False 'タイマー無効 Text1.Text = GetSource() Command1.Enabled = True 'タイマー有効 Msg = "アドレスを入力して下さい" Title = "URL入力" Ret = InputBox(Msg, Title, "") End Sub Function GetSource() As String Dim strBuf As String Dim strURL As String strURL = "http://www.microsoft.com/japan/ms.htm" strBuf = Inet1.OpenURL(strURL) 'ファイル内容を取得 GetSource = strBuf End Function InputBoxにアドレスを書いてOKを押すと別ウィンドウでソースが表示されるプログラムを作りたいんです。お願いします。

  • VBS どうするの?

    VBSで、 a=inputbox("0+1=") if lang=1 then  msgbox("あってます。")  else  msgbox("間違えています。") end if として、 msgbox("間違えています。") のあとに、もういちど最初(aの位置)にもどしたいときはどうすればよいでしょう? よろしくおねがいします。

  • このプログラムを改良して…

    #include<stdio.h> #define NMAX 200 int n; int a[NMAX], x[NMAX]; void yomikomi() { for(n=0; scanf("%d %d",&a[n],&x[n])!=0;n++); return; } void hyouzi() { int i; for(i=0;i<n;i++) printf("%5d %5d\n",a[i],x[i]); return; } void seiretu() { int i,j,max,k,w; for(i=0;i<n-1;i++){ max=x[i];k=i; for(j=i+1;j<n;j++) if(x[j]>max){ max=x[j];k=j; } w=a[k];a[k]=a[i];a[i]=w; x[k]=x[i]; x[i]=max; } return; } main() { printf("Sorting\n"); yomikomi(); printf("\nInput data\n"); hyouzi(); seiretu(); printf("\nSorted data\n"); hyouzi(); return(0); } 以上のプログラムは、 Sorting 1 87 2 91 3 76 4 84 5 61 6 100 7 93 \n\n と入力しますと、 Input data 1 87 2 91 3 76 4 84 5 61 6 100 7 93 Sorted data 6 100 7 93 2 91 1 87 4 84 3 76 5 61 Press any key to continue という結果(左が番号として右が点数とした場合、点数が上位のものから番号を並びかえる)が出るプログラムです。このプログラムを改良して、上の結果を例として、 Input data 1 87 2 91 3 76 4 84 5 61 6 100 7 93 Guusuu   3 76 4 84 6 100 Kisuu 2 91 3 76 5 61 7 93 という風に右側の数が偶数か奇数かでわけて結果を出すことは可能でしょうか?可能であれば教えてください。お願いします。