- ベストアンサー
VB6で重複チェックを行う方法
- Visual Basic6.0を使用して、キー入力した値と重複しているかどうかをチェックする方法について教えてください。
- 保存先はVB内のテキストボックスが第1希望で、外部のtxtファイルやcsvファイルは第2希望です。
- 入力値と保存値の一致率を知りたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな考え方はどうでしょう。 1.Publicな配列とカウント変数を用意します。 2.コマンドボタンクリック時に入力した値と配列をforで回しながら判定します。 3.配列内に入力したデータと一致するデータがない場合は、配列を1つ増やし入力データを記録し、ファイルにデータを追加します。 [Module1.vb] Public InpHist(0) As String Public aryCt As Long [Form1.vb] Private Sub Command1_Click() Dim InpData As String Dim i As Long Dim flg As Boolean ' 入力した文字を取得 InpData = Text1.Text flg = True ' 今まで入力したデータと今回入力したデータを比較 For i = 0 To UBound(InpHist) If InpData = InpHist(i) Then ' 既に入力されたデータ flg = False Exit For End If Next If flg = True Then ' 入力済みでないデータ処理 If aryCt = 0 Then ' 初回の時は、初期履歴配列を使用する Else ' 履歴配列を1つ追加 ReDim Preserve InpHist(aryCt) End If ' 履歴配列にデータを追加 InpHist(aryCt) = InpData aryCt = aryCt + 1 ' ファイルの末尾にデータを書込む Else ' 既に入力済みデータはメッセージで警告 MsgBox ("既に入力済みです。") End If End Sub Private Sub Form_Load() ReDim InpHist(0) aryCt = 0 End Sub
その他の回答 (2)
- n-jun
- ベストアンサー率33% (959/2873)
#1です。 補足に書かれている事は回答したコードの テキストボックス名とコマンドボタン名を変更したら そのまま当てはまりそうな気がしますけど? ⇒重複した場合には >' 重複していた場合の処理 ここでエラーメッセージを出せばいいのかな? と言うくらいかと。 >保存されるデータは文字列が1000回分くらいまで入れたいし これがフォームを開いて途中で閉じて(中断して) またフォームを開いたあとも保持されると言うなら、 Dictionaryでは無理かなぁ。 ⇒別ファイルへの書き出しになるかもしれませんが、 そこは他の回答を待ってみるしか。。。 Excelへの書き出しも考えるなら、 最初からExcelで作成するのも1つの方法ではあるけれど。
お礼
n-junさん いろいろ教えてくださり、ありがとうございました。 Dictionaryを調べるなかで、txtファイルに保存値を書き込み、 データ読み出しで出来るようになりました。 きっかけを与えてくださり感謝します。 今後もまた質問すると思いますので、よろしくお願いします。!
- n-jun
- ベストアンサー率33% (959/2873)
第一希望がTextBoxの利用と言う事なら、 フォームが開いている間だけ重複がチェックできればいいのかな? ならばDictionaryオブジェクトを使って ' 変数の宣言 Private myDic As Object ' フォームが開く時 Private Sub Form_Load() ' Dictionaryオブジェクトのセット Set myDic = CreateObject("Scripting.Dictionary") End Sub Private Sub Command1_Click() ' Dictionaryオブジェクトに値がない場合 If Not myDic.Exists(Text1.Text) Then ' Dictionaryへのキー設定を行なう myDic(Text1.Text) = "" ' 重複していない場合の処理 Else ' 重複していた場合の処理 End If End Sub ' フォームを閉じる時 Private Sub Form_Terminate() ' Dictionaryオブジェクトの解放 Set myDic = Nothing End Sub みたいな感じはいかがかな?
補足
Dictionaryや配列つかっていろいろやりましたが、うまくいきませんでした。 改めて質問させていただきます。 やりたいことは、、、、 Input.textとstartボタンを準備します。 (1)Input.textに文字列7桁を入力する。 (2)コマンドボタンのstartボタンを押すと、入力された文字列がPC内の所定の保存場所に存在するかチェックする(重複しているか?)。 (3)存在(重複)していなければ、Input.textに入力された文字列をPC内の 所定の保存場所に保存する。重複していればエラー。 ・・・以降(1)~(3)を100回程度繰り返します。 PC内の所定の保存場所とは、フォームのTextBoxでも配列でも、外部のcsvファイルやExcelでもかまいません。可能ならフォームのTextBoxか配列が希望です。 (配列は基礎しかわかりませんが。。。) 保存されるデータは文字列が1000回分くらいまで入れたいし、クリアもしたいです。 私の初心者知識では限界です。 可能な限りコードもお願い致します。 申し訳ありませんが、教えてください。
お礼
foolwordさん ありがとうございます!配列使って出来そうです。 txtファイルを使用して作成したものを改良しようと思います。 感謝致します!