• ベストアンサー

1-10のように指定すると1から10まで入力可能なようにするには?

iniに OKNO=1,2,3,4,5,6,7,8,9,10,16と 指定しておいて、 そこに指定してある数字のみ入力OKと するテキストボックスを作ったとします。 単純にInstrを使って設定されているかチェックします。 上のような指定方法だと 数字がたくさんになるので OKNO=1-10,16 のように指定すればOKのように したいのですが、 できそうで、うまくいきません。 プログラムがお得意な方、このような時にどのように作ればよいか教えて頂けませんでしょうか・・。

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

  • ベストアンサー
noname#11856
noname#11856
回答No.2

InStrを使っているということは、OKNOを取得して、 それをそのままString型変数に入れているんでしょうか? そうであれば、取り込んだ後、一旦、その変数に対して InStrで"-"を検索します。 あった場合は、その前後の数値を取得し、For~Nextの開始を"-"の前の数値、 終了を"-"の後ろの数値で指定して、Replaceする・・・というのはいかがでしょう? "-"前後の数値を取得する際、桁数がわからないという前提になると思われますので 一旦、Splitして配列に入れたほうがいいかもしれないですね。 Dim strOKNO As String 'INIより取得した内容 Dim strOKSp() As String 'Splitの格納場所 Dim lngSta As Long '開始 Dim lngEnd As Long '終了 Dim lngLoop As Long 'ループ用 Dim lngRepl As Long 'ループ用 'INIからの取得は行われたものとする If InStr(strOKNO,"-") > 0 Then strOKSp = Split(strOKNO) For lngLoop = 0 To UBound(strOKSp) If InStr(strOKSp(lngLoop)) > 0 Then lngSta = Val(Mid(strOKSp(lngLoop), 1, InStr(StrOKSp(lngLoop) - 1))) lngEnd = Val(Mid(strOKSp(lngLoop), InStr(StrOKSp(lngLoop) + 1))) strOKSp(lngLoop) = "" For lngRepl = lngSta To lngEnd strOKSp(lngLoop) = strOKSp(lngLoop) & lngRepl & "," Next strOKSp(lngLoop) = Left(strOKSp(lngLoop), Len(strOKSp(lngLoop)) - 1) End If Next strOKNO = "" For lngLoop = 0 To UBound(strOKSp) strOKNO = strOKNO & strOKSp(lngLoop) & "," Next strOKNO = Left(strOKNO, Len(strOKNO) - 1) End If 上記のロジックを、INIからの取得後に一度行っておけば その後は今までどおり(?)、InStrでの比較でチェックできると思います。 これは、あくまでも、私がパッと思いついただけのコードですので 『正解』ではありませんし、参考程度にご覧下さいね。 #机上で書いているだけなので、パンチミス、勘違い等あるかも。(^-^; と、ここまで書いて質問画面を更新すると既にmaruru01さんの投稿が。。。 そうなんですよね。答えを押し付けるんじゃなくて、指摘やアドバイスが望ましいですよね。 と思うんですが、おもしろそうだったので作ってしまいました。(^-^;

GBSGBS
質問者

お礼

回答ありがとうございます。 プログラミングど素人の私には、 ある程度の答えが出ていて、それを参考に 作りを覚えていった方がはやい気がしてます・。 何せ、自分でいくら考えてもさっぱりなので。 みなさん最初から 考えてコードを書けたのだろうなぁ。 すごいと思ってしまいます。

GBSGBS
質問者

補足

はい、String型の変数に取り込んでます。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 Split関数を使用すると、任意の区切り記号で文字列を区切って配列に格納することが出来ます。 まず、文字列をSplit関数で「,」で区切って配列に格納します。 そしたら、配列の各要素で「-」を検索(InStr)して前後の数値を取り出せばいいと思います。 「-」がなければ、1ページ指定としてそのまま取り出せばいいでしょう。 後は、エラー入力対応が面倒かと思いますが、出来ると思います。 上手く行かなくてもいいので、途中まで書いたコードを載せるといいと思いますよ。

GBSGBS
質問者

お礼

回答ありがとうございます。 コードがぐっちゃぐちゃで載せるにも値しないと 思って・・・。ふむふむ、まずはSplit関数を 使うのですね。

関連するQ&A