VBScriptで値の比較をするには?

このQ&Aのポイント
  • VBScriptで値の比較をする方法を知りたいです。
  • ASPにおいてVBScriptで値の比較を行う方法について困っています。
  • VBScriptにおいて、値の型を揃えるためにCASTは必要なのか疑問です。
回答を見る
  • ベストアンサー

VBScriptで値の比較をするには?

VBScriptで値の比較をするには? VB.NETはかじった程度いじったことがあるのですが、今回、ASPに兆戦する必要があり (既存のプログラム回収)ちょっと困っています。 まず、以下のようなメソッドをaspファイルに追加しました。 引数から、Caseで返すべき値を判定するメソッドです。 <% Function get_name(ByVal arg1,ByVal arg2) dim retVal retVal = "" If arg1 = CONST_NAME_ARI Then Select Case arg2 Case CONST_CD1 retVal = CONST_NAME1 Case CONST_CD2 retVal = CONST_NAME2 End Select ElseIf then …(略) End if get_name = retVal End Function %> 別ファイルで、const.incというファイルあって、その中に値が定義されており (CONST_NAME_ARI = "1"とか、CONST_NAME1 = "名前"とか)それとの比較を したいと思っています。 引数は、文字列が入るとは限らず、DB上INT型で定義されている値がきた場合、 VB.NETだと比較する値の型を揃えるためにCASTが必要かと思うんですが、 VBScriptでは必要ないのでしょうか? 上記のメソッドを追記しただけで、エラーが発生してしまい(呼び出していなくても)、 比較の仕方に問題があるような気がしているんですが…。 初歩的なところで申し訳ないのですが、問題点をご教授いただけないでしょうか。

  • ginfix
  • お礼率34% (330/962)

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

#1さんも述べていますが、 If arg1 = CONST_NAME_ARI Then  ・  ・ ElseIf then ←は、Else ですね。 >(CONST_NAME_ARI = "1"とか、CONST_NAME1 = "名前"とか) そもそも、データ型が決まらない比較は、 If StrComp(arg1,CONST_NAME_ARI,1)=0 Then こうして比較したらどうでしょうか。 でも、現状のコードで、特別エラーが発生する理由は、「ElseIf then」だけしかないと思います。 それは、いくら、VBScript でも、エラーの場所は分かるはずだと思います。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

>上記のメソッドを追記しただけで、エラーが発生してしまい 単にシンタックスエラーだと思います。 ちょっと見た目には ElseIf then のところで 条件式が書かれていないようですが、(略)の中 かも知れません。 >CASTが必要 VBScriptは全てVariant型です。また、CASTという手法は ありません。VarTypeでデータ型を調べるか、強制的に 型変換してから比較します。 If CStr(arg1) = CONST_NAME_ARI Then Select Case CStr(arg2) http://www.kanaya440.com/contents/script/vbs/function/data/var_type.html

関連するQ&A

  • VBScript 全角英数記号→半角英数記号に

    ASP(VBScript)での開発をしています。 全角英数記号を、半角英数記号に変換したくて、以下のメソッドを 作りました。 Function FunFullToHalf(ByVal StrTarget) Dim ObjBASP21 Dim StrHalf Set ObjBASP21 = Server.CreateObject("basp21") StrHalf = ObjBASP21.StrConv(StrTarget,8) FunFullToHalf = StrTarget End Function しかし、これだと、全角カタカナまで半角になってしまい、困っています。 回避策を教えていただけないでしょうか。

  • VBScript

    ボタンクリックで引数を受け取る方法を教えてください。 ボタンクリックの基本は <button name=b>b</button> <script language="VBScript"> Sub b_onClick です。 <button name=b(1)>b</button> <script language="VBScript"> Sub b_onClick(p) このようにすると関数がコールされませんでした。 どうすれば引数を受け取れますか? 値渡しでよいです。

  • OpenOffice Basicで引数を2つ利用する関数が作れません

    OpenOffice Basicで引数を2つ利用する関数が作れません Open Office Calc 3.1.1を使っています。 できれば複数(3つ以上)引数を取る関数を作りたいのですが、 2つ引数を取ろうとすると演算結果が#NAME?になってしまいます。 切り分けにシンプルな関数を作ってみました。 以下で=test2(3,5)とすると結果が#NAME?になります。 Function test2(arg1 As Integer, arg2 As Integer) as Integer test2 = 3 + arg2 End Function #なお、関数内の演算内容はtest2 = arg1 + arg2でも変わらず#NAME?です 切り分けで以下を作ると=test3(3)で6が返されます Function test3(arg1 As Integer) as Integer test3 = 3 + arg1 End Function 関数名のタイプミスの可能性を排除するために、 test2関数を名前を換えずに引数の数を1つに変更してみると 計算できるのでタイプミスではないと思います。 やはり引数を複数とる取り方に問題があるように見えます。 お手数ですが何かアドバイスいただけないでしょうか?

  • VB.NETで値や参照について ByRefなど

    VB.NETで値や参照について、まだ初学ですがよろしくお願いします。 VBは2008です。 以下のようなs文字列を参照引数にしたSetDataメソッドがあります。 ByRef s As Stringという引数は、SetData内でsを書き換えると、 呼び出したSetDataメソッド外でも中身が変わるので 私のByRefの認識ではポインタと解釈しています。間違っているでしょうか? SetData(1,1, buf)とすれば、DataGridViewの中は、「初期値」という文字が表示されます。 別のメソッド(KaKikae)でbufを"あ"という文字に変えた場合、SetDataメソッドを使わなくても 書き換わっていると思っていたのですが、実際実行してみると書き換わりません。 値や参照について理解が足りないからだと思いますがわかりません。 どのようにすれば、それが実現できるのでしょうか? Public Class HogeClass Private buf As String = "初期値" Private Sub SetData(ByVal x As Integer, ByVal y As Integer, ByRef s As String) As Boolean Dim dg As DataGridView dg = DataGridView1 dg.Item(x, y).value = s End Sub Private Sub KaKikae() buf = "あ" End Sub End Class

  • VBScriptで引数を省略したい場合

    VBScript の Function、Sub プロシージャで引数を省略したい場合、Optional キーワードが使えないので、空文字を渡すようにしていますが、これは言語仕様的に正しいやり方でしょうか? Sub MyProc(ByVal a, ByVal b) . . . End Sub Call MyProc(a, "")   '← 引数 b は状況に応じて省略したい。 よろしくお願いします。

  • 0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題

    0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題ですが、一つの数字しか計算が出来ません 5と12の場合は String "5 12" から型 'Long' への変換は無効です。と出てきてしまいます。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Long Dim f As Long n = CLng(TextBox1.Text) ←ここにエラーが出ます。 TextBox2.Text = CStr(Recur(n)) End Sub Public Function Recur(ByVal arg As Long) As Long If arg = 1 Then Recur = arg Exit Function End If Recur = arg * Recur(arg - 1) End Function End Class というプログラムです。分かる方よろしくお願いします。 実行エラーです。

  • ページ間の値の引渡し

    (1) Function nextPage(AAA) Select Case AAA Case "1" document.page.folder.value = "ASP" document.page.file.value = "System001" Case "2" document.page.folder.value = "JAVA" document.page.file.value = "System002" . . . (2) Response.Write "<tr><td nowrap><a href=# onclick=nextPage('1')>" & "ASP" & "</a>" Response.Write "<td nowrap><a href=# onclick=nextPage('2')>" & "JAVA" & "</a>" . . . テーブルに値が入っていて、クリックすると別ページに飛びます。(ここでの値はASP、JAVA) (1)では引数が一つで、次ページに飛ぶためにフォルダとファイルの名前をセットしています。 (2)ではクリックしたときに移動するための値を引数として渡しています。 で質問です。 引数を二つにしたいのです。ページ数と値を渡したいのです。 こんな感じだとダメでした。 Function nextPage(AAA,BBB) Select Case AAA Case "1" document.page.folder.value = "ASP" document.page.file.value = "System001" document.page.data.value = BBB . . . Response.Write "<tr><td nowrap><a href=# onclick=nextPage('1','ASP')>" & "ASP" & "</a>" . . . 調べてみたのですがわからなかったのでここで質問させていただきました。 今は自宅ですぐ確認できないのでお返事が明日になると思いますが よろしくお願いいたします。

  • asp(vbscript)でテキストの値を取得する

    よろしくお願いします。 これは実際のプログラムではなく、質問したい部分だけを抜き出して簡略化してあるものです。 やりたいことは、Functionでセットした「あいうえお」という値をPageNumberというセッション変数に戻すことです。 いろいろ試行錯誤した結果どうしても出来なかった為、myDataというテキストボックスに一度セットしてから、そのテキストの値を取得することで目的を達成できないかと思い、下記のような状態になりました。 目的さえ達成できれば、テキストボックスは使わなくて構いません。 お力をお貸しください、よろしくお願いいたします! <%@ Language=VBScript %> <% Option Explicit %> <html> <body> <% dim PageNumber PageNumber = Request.Form("txtPageNumber") '別ページから値を取得 %> <input type="text" name="myData" > <input type="submit" id="idNext" value="次へ" onClick="fncNext(<% = PageNumber %>)"> Function fncNext(PageNunber) PageNunber="あいうえお" dim objData Set objData = document.GetElementById("myData") objData.innerText = PageNunber End Function </script> <% PageNumber = ?? '★この??の所に、PageNunberの値をセットしたい★ %> </body> </html>

  • 0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題

    0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題です。 前にこのプログラムで複数個、同時には計算できない問題を自分で解決したのですがこんどは0が計算できないようです。 System.StackOverflowException' のハンドルされていない例外が WindowsApplication1.exe で発生しました。 とでます Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim n As Long Dim f As Long n = CLng(TextBox1.Text) TextBox2.Text = CStr(Recur(n)) End Sub Public Function Recur(ByVal arg As Long) As Long ←ここにエラーが If arg = 1 Then Recur = arg Exit Function End If Recur = arg * Recur(arg - 1) End Function End Class というプログラムです。分かる方よろしくお願いします。 実行エラーです。

  • DLL内のイベントをハンドリング

    VB2008にて、外部DLL(VB2008作成)を使用しようと考えています。 外部DLLの仕様書には、メソッド、イベント、プロパティが記載されており、 外部DLLの発生させるイベントをハンドリングしたいのですがうまくいきません。 「参照の追加」にてDLLを指定し、ソース内で該当DLLのクラスもインスタンス化し、 DLL内のメソッドは使用できています。 イベントに関して仕様書には Event001(Byval arg1,Byval arg2)、Event002(Byval arg1,Byval arg2)、Event003… このように記載されています。 該当DLLのインスタンス化したものをTestClassとして、 Public Event TestEvent Handles TestClass.Event001 という記載では駄目でした。 外部DLLのイベントのハンドリングについて、ご教授頂けましたら幸いです。