• 締切済み

ユーザーフォームで登録する前に重複があるかチェック

売上をユーザーフォームで登録出来るようにしたいのですが、テキストボックスを10個配置して、ボックス毎にシートに入力。 A列に登録ID、B列に日付、 C列に担当者番号 、D列からJ列まで他にデータを登録して、コマンドボタンで登録させてB列からD列が重複していたら、メッセージボックスに警告を表示させて登録せずに終了させたいのですが、出来なくて困っています。初心者なので解説付きでご教授いただければ幸いです。よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

アクセスにもフォームはある。 シートやユーザーフォームと言っているところから推測して、エクセルのはなしらしい。 ーー そしてインプットチェックをしたいという、質問ではないかな? すでに入力済み=重複起票or2度打ち、でないかどうかなど。 ーー こういう複数項目を見て重複をチェックするのはムエクセルでは不得意と思う。 伝票番号が、印刷済みとかで「ユニーク」(重複して起票はない)で、この重複をチェックするのなら、Countifのような関数で済むが、複数項目の場合は複雑か。 データベース的なソフトのアクセスなら、そういうチェックや、既存ファイルを読んでみて、読めたらすでに同じデータがあるので、重複とかの判断ができる。 アクセスでは、SQLという仕組みで、各項目(複数)を指定して、レコードを読みだしやすい。 将来のためにも、利用ソフトを考え直した方がよいと思った。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>数字を入力するのは、TextBoxの番号を入力するのですか。 普通、UserFormにTextBoxを設けるとオブジェクト名TextBox1、TextBox2 と増えていきます。今回TextBoxが10個あるのでTextBox1~TextBox10まで あると仮定しています。 For i = 1 To 10   .Cells(LR, i).Value = Me.Controls("TextBox" & i).Value Next 変数にiには1から10の値が与えられ "TextBox" & i とすることで 順次 TextBox1、TextBox2 ・・・ と処理されていきます。 >Cells(LR,i).value=Me.Controls(“textbox” & l)でした。 今回使っている変数はiです。Zimbabwe でも I でもないですよ

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>.Cells(LR,I).value=Me.Contorols(“TextBox”&Zimbabwe)の所にエラー Zimbabwe って何 ここには1~10の数値が入るのですが・・・

Sada0627
質問者

お礼

早速ありがとうございます。 打ち間違えていました。 .Cells(LR,i).value=Me.Controls(“textbox” & l)でした。 数字を入力するのは、TextBoxの番号を入力するのですか。 何度もすいませんご教授お願いします。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

Sheet1にデータがあるとしています Private Sub CommandButton1_Click()   Dim FR As Range, n As Long, LR As Long, i As Long   With Worksheets("Sheet1")     'B列をTextBox2を条件に抽出     .Range("A1").AutoFilter Field:=2, Criteria1:=Me.TextBox2.Value     'C列をTextBox3を条件に抽出     .Range("A1").AutoFilter Field:=3, Criteria1:=Me.TextBox3.Value     'D列をTextBox3を条件に抽出     .Range("A1").AutoFilter Field:=4, Criteria1:=Me.TextBox4.Value     '抽出された範囲を変数FRに格納     Set FR = .AutoFilter.Range     '抽出された個数を変数nに格納     n = FR.Columns(1).SpecialCells(12).Count - 1     '抽出モードを解除     .AutoFilterMode = False     If n > 0 Then       MsgBox Me.TextBox2.Value & "は、既に登録済です。", 16     Else       '登録処理       LR = Cells(Rows.Count, "A").End(xlUp).Row + 1       For i = 1 To 10         .Cells(LR, i).Value = Me.Controls("TextBox" & i)       Next     End If   End With End Sub

Sada0627
質問者

お礼

ありがとうございます。 早速チャレンジしましたが、 .Cells(LR,I).value=Me.Contorols(“TextBox”&Zimbabwe)の所にエラーが発生してしまいます。 “textbox”を入力した時に大文字に変わらないので直接大文字を入力しましたが、何か問題と関連ありますか? 間違って入力してないか確認しましたが、見当たりません。 ご教授いただいてすいませんが、この様な状況です。

関連するQ&A

  • エクセルでユーザーフォームの入力時に重複チェックしたいのですが・・・。

    エクセルでデータベースを作り、ユーザーフォームにて 入力作業を行っています。 フォーム上にテキストボックスが2つ有り、 一つは日付、もう一つは名称を入力する仕様と なっています。 またシートへの書き込みはコマンドボタンで 処理を行うようにしています。 このフォームで日付と名称を入力したときに、 そのデータをシートに書き込む前に 同じデータがすでにデータベースの中にある場合に 重複がある旨のメッセージダイアログを表示させたいと 思います。 処理条件としては、 1.日付、名称それぞれのテキストボックスを 抜けたとき(Private Sub TextBox1_Exit())に 処理させること 2.入力した日付と同じ日付のデータベースにおいて 名称が同じかどうかで判断すること 3.重複があればダイアログ表示、なければ何もなし ちなみにデータベースはA列に日付、B列に名称が 入っているものとします。 また上に処理条件を記しましたが、もっと良い方法が あれば加えてアドバイス願います。 VBA初心者ですので解説付きコードで教えてください。 (非常にあつかましいのですが、余り時間がないため、 明日の朝9時までにご回答頂けると非常に助かります。 その際、もっとも的確で早い回答をくださった方に 20ポイントつけさせて頂きます。) どうぞ宜しくお願いします。

  • ユーザーフォームで教えてください。

    ユーザーフォームで教えてください。 エクセルシートで、A列に1から100までナンバーがあり、 B列~E列までデータが入っている表があります。 テキストボックスにナンバーを入力(もしくはスピンボタン)して 「検索」のコマンドボタンを押すと、B列以降のデータが各テキストボックスに表示される。 という形にしたいのですが、やり方が分からず困っています。 これまでは表の外に最初の行と最後の行を表示させて、 それを変数として扱い、「前」、「次」のコマンドボタンで1ずつ増減させて 表示していたのですが、ナンバーから直接表示させたほうが効率が良いと思いました。 (データが少ないときはよかったのですが。) 希望としては、 例としてテキストボックス1に「50」と入力する。(またはスピンボタンで50を選択) コマンドボタン「検索」でナンバー50のB列~E列のデータをテキストボックス2~5へ表示。 コマンドボタン「前」「次」を配置し、「前」でナンバー49、「次」でナンバー51のデータを表示。 1もしくは100(最後のナンバー)のときに「前」「次」を押してもデータは表示せず、 メッセージで「これが最初(最後)です」と表示。 という感じです。 できればでいいのですが、 ナンバー50のデータが表示された状態で、 B列以降のデータを直してナンバー50の行に上書きする「修正」、 表示された行を削除して1行上にずらす「削除」の コマンドボタンがあると助かります。 長くなってしまいましたが、よろしくお願いします。

  • エクセルのユーザーフォームについての質問です。

    エクセルのユーザーフォームについての質問です。 かなりの初心者です。 テキストボックスを3つ、チェックボックスを10個作りました。 チェックボックスは複数チェックすることができます。 コマンドボタンをクリックすると、テキストボックスに入力された値とチェックされた チェックボックスがsheet1に自動入力できるようにしたいです。 たとえば、 テキストボックス1には「あいう」 テキストボックス2には「かきく」 テキストボックス3には「さしす」と入力。 チェックボックス1から10のうち、「1」「2」「3」にチェック。 この状態でコマンドボタンをクリックすると、Sheet1には     A列       B列       C列        D列 1行目 テキスト1    テキスト2    テキスト3     チェックボックス 2行目 あいう      かきく      さしす       1 3行目 あいう      かきく      さしす       2 4行目 あいう      かきく      さしす       3 このように、チェックボックスにチェックがあった数だけ、テキストボックスも コピーされて、次々と下の行に入って行くようにしたいのです。 こんなことができるのでしょうか? できるのなら、コードを教えてください。 お願いします。

  • EXCEL ユーザーフォームを使ったマクロ

    データの登録をするのにユーザーフォームを使おうと思うのですが、なかなかうまくいきません。教えてください。 ユーザーフォームにはコンボボックス、テキストボックス、コマンドボタンが貼り付けてあります。(コンボボックスのリストには呼び出したいシートの名前が入っています) コンボボックスのリストの中から呼び出したいシートを選択し、テキストボックスに入力した内容を、コマンドボタンを押すことで選択されたシート上の、あるセルに登録したいのですがどうすればよいでしょうか?

  • Excelユーザーフォームでのデータ検索

    初心者の質問で申し訳ございません。 ユーザーフォームを利用して検索ボタンを作ろうと考えています。 ユーザーフォームでテキストボックスを2個と コマンドボタン1個を作成し、 テキストボックス1に検索したい氏名を入力して コマンドボタンを押すと、 ワークシート(ワークシート名、データ)に作成されたデータのD列から 一致するものを検索し、 一致したデータのA列にある「番号」をテキストボックス2、 表示する。 というマクロが書けず困っています。 よろしくお願いします。

  • VBA; ユーザーフォームからの処理

    Excel 2007を使用しています。 下記のようなことを考えています。 1. テキストボックスにYYYY/M形式の日付データを入力 2. コマンドボタンを押下。 3. 日付データを確認 4. オリジナル(sheet1)の列値、日付データ(A列)、商品番号(B列)、商品名(C列)から条件に 該当した行をサマリー(sheet2)にコピー。 オリジナルの3行目のベッダー情報は先頭に置いて、その下に該当行を付ける。 オリジナルデータ; 注文日付 商品番号 商品名 2010/9 312000 ノコギリ 2011/12   542000 ハンマー . . . . . . 2014/5 312000 ノコギリ サマリー; 注文日付 商品番号 商品名 2010/9 312000 ノコギリ 2014/5 312000 ノコギリ ご質問; 1. 上記3、4の処理はコマンドボタンのクリックイベント処理として、まとめて 記述すれば 良いのでしょうか? 2. 日付データのオブジェクト名を"TextBox1"として、コマンドボタンのクリックイベント処理 など、これらの処理を行うにあたりサンプルなるコードはありませんか?   オリジナルの行数は変動します。 3. ユーザーフォームを作らずにシート上(shhet1)にテキストボックス、 コマンドボタンを作成できますか?   ありましたら方法を教えてください。 以上、宜しくおねがいします。

  • エクセルで検索結果をユーザーフォームに表示したいのですが

    A列 B列 C列 D列・・・M列 ID 名前 区分 日付・・・備考欄  というようなデータで1000行以上になる予定で作っています。  ユーザーフォーム上でIDを入力・検索した結果を同じフォーム内に表示させたいと思っています。 その際、  (1)同じIDが何度も登録されている時もあるのですが、重複OKですべてを表示させたい(スクロールバーなど使用したい)  (2)列はA~MまであるのですがA・B・Dの3列のみをフォーム内に表示させたい (もし可能なら、(3)同じ形式の複数シートからの検索結果をまとめて表示させる方法も教えて欲しいのですが)  Excelに詳しい方、よろしくお願いします。

  • VBAのユーザーフォーム・・

    教えてください。 ユーザーフォームのテキストボックス・コンボボックスに入力した文字列をコマンドボタンを押したら、セルC1・B1に反映させたいのですが、できません。 このコマンドボタンには他のプログラムも入っており、同時にプログラムを実行したいのですが。

  • Excelユーザーフォームでのデータ検索

    現在Excelマクロの勉強中ですが、ユーザーフォームでテキストボックスを4個とコマンドボタン1個を作成し、テキストボックス1にコードを入力してコマンドボタンを押すと、ワークシート(ワークシート名、住所録)に作成されたデータのA列からコードを検索(データは2行目から始まる)し、一致したデータのB列にある「名前」をテキストボックス2、C列の「住所」をテキストボックス3、D列の「電話番号」をテキストボックス4に表示する。 というマクロが書けず困っています。 わかる方教えてください。

  • エクセルのユーザーフォームの日付を和暦で表示したい

    いつもお世話になります。 エクセルのユーザーフォーム作成に初めて挑戦しております。 ワークシートに日付の元データがあり、ユーザフォームにテキストボックスを配置しその日付データを表示させています。(例:2006/8/3) やりたいことは、そのユーザーフォームにもうひとつ別のテキストボックスを作成し上記の日付データを和暦で自動的に表示させたいのです。(例:上記のテキストボックスが2006/8/3の場合、こちらのテキストボックスはH18.8.3と表示) 初心者ですが、よろしくお願いします。

専門家に質問してみよう