• 締切済み

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

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

みんなの回答

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

スルーしようかとも思いましたが、希望納期も過ぎましたし、そろそろいいでしょうかw まずは苦言から。「20ポイント」も愉快ではありませんが、「VBA初心者」を自称しておきながら不完全な「処理条件」を堂々と突きつける辺りにあきれて補足要求する気にすらなれませんでした。「これがやりたい」とだけ書いていただく方が、余程気持ちよく回答できます。 aoincさんがお金を出して下請けに作らせるのなら、このような方法でも良いのでしょうが、なにせここは「自発的な」回答者ばかりですので…w 最初に前提を書きます。 入力したデータを書き込むシートは仮に「Sheet1」とします。その他に作業用シートとして「Sheet2」があるものとします。 データ件数も分からないのでシート関数を併用する方法を採りました。その方がFor~Next文を使うより高速と思ったからです。 UserForm1には  TextBox1 (日付入力用)  TextBox2 (名前入力用)  CommandButton1 (登録用)  Label1 (警告メッセージ用) が配置されているものとします。その上でUserForm1のコードシートに以下を貼り付けてイミディエイトペインから  UserForm1.Show で動かしてみてください。 フォーカスのコントロールは私の思いこみで書いています。データエラーチェックはしていませんので必要に応じて追加してください。またその他のコントロールについてはご自由になさってください。(そこまでは「処理条件」に書かれていませんでしたので…) Option Explicit Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)  Label1.Caption = ""  CommandButton1.Enabled = True  Sheets("Sheet2").Range("A1") = TextBox1.Text  If Sheets("Sheet2").Range("A3") > 0 Then   Label1.Caption = "重複あり"   CommandButton1.Enabled = False  End If End Sub Private Sub TextBox2_change()  Label1.Caption = ""  Sheets("Sheet2").Range("A2") = TextBox2.Text  If Sheets("Sheet2").Range("A3") > 0 Then   Label1.Caption = "重複あり"   CommandButton1.Enabled = False  Else   CommandButton1.Enabled = True  End If End Sub Private Sub CommandButton1_Click() Dim LastR As Long  LastR = Sheets("Sheet1").Range("A65536").End(xlUp).Row  Sheets("Sheet1").Cells(LastR + 1, 1) = TextBox1.Text  Sheets("Sheet1").Cells(LastR + 1, 2) = TextBox2.Text  Sheets("Sheet2").Range("A3").Formula = "=SUMPRODUCT((Sheet1!A2:A" & _   LastR + 1 & "=A1)*(Sheet1!$B$2:$B$" & LastR + 1 & "=A2)*1)"  TextBox2.Text = ""  Sheets("Sheet2").Range("A2") = TextBox2.Text  TextBox2.SetFocus End Sub Private Sub UserForm_Activate() Dim LastR As Long  LastR = Sheets("Sheet1").Range("A65536").End(xlUp).Row  Sheets("Sheet2").Range("A3").Formula = "=SUMPRODUCT((Sheet1!A2:A" & _   LastR + 1 & "=A1)*(Sheet1!$B$2:$B$" & LastR + 1 & "=A2)*1)" End Sub 動作は確認してありますが、解説は遠慮しておきます。ポイントも勿論いりません。

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

こんばんは。 10行もあればすむコードに何故回答がつかないのか、 それはたぶん最後の >もっとも的確で早い回答をくださった方に20ポイントつけさせて頂きます この余計なコメントのせいだろうと推測。 何にもならないポイント欲しさに回答する人、いないと思ふ。(^^;;; 何れにしろ人にものを教えてもらう態度ではない。 以上。

関連するQ&A

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

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

  • エクセルユーザーフォームの日付操作を教えてください。

    エクセルユーザーフォームの日付操作を教えてください。 テキストボックスにスピンボタンで日付を入力し、ワークシートに転記するとシリアル値ではなくテキストで転記されます。ワークシートの日付処理に反映されませんので良い方法があれば教えてください。(mm/ddの入力でも良いですスピンボタンにこだわりません)

  • 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)にテキストボックス、 コマンドボタンを作成できますか?   ありましたら方法を教えてください。 以上、宜しくおねがいします。

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

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

  • ユーザーフォームにデータを入力

    「開発」→「Visual Basic」→「フォーム」の「UserForm1」をクリックして表示されるUserFormに何個かのテキストボックスを作成しています。 そのテキストボックスに入力するデータをワークシートにあるデータを自動的に入力( 表示)させる方法はありませんか? ちなみに、ワークシート上でセルをクリックするとそのワークシート上にデータが自動的に入力されたUserFormが表示されるようにはしています。 今回の質問は、「開発」→「Visual Basic」→「フォーム」の「UserForm1」をクリックして表示されるUserFormのテキストボックスのことです。(この画面では、手入力しかできないのでしょうか?) Excel 2013 です。 よろしくお願いします。

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

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

  • エクセルで重複のチェックをしたい

    初心者なので、拙い内容ですが教えてください。 ・エクセル2003 二つのシートにそれぞれA列に企業名、B列に支店名、 C列に郵便番号、D列に住所が入力されています。 二つのシートはほぼ同じ内容で、シート1は3000件の全データ、 シート2は抽出された1300件のデータが入力されています。 やりたいことは3000件のうちの1300件の重複データを シート1の全データの空白列に「重複」や  重複データには行に色をつけて表示させる、などとにかく 重複をわかりやすく表示させたいのです。 過去ログみましたが、いまいち理解できませんでしたので わかりやすく教示してくださると助かります! ちなみに二つのデータをひとつにし、フィルタオプションの 「重複するレコードは・・」は検討違いだったようでうまくいきませんでした・・ ひとつの列に対する重複チェックは理解できたのですが.. 支店によって住所が違ってくるので、たちどまってしまいました。

  • EXCELのユーザーフォームで入力規制をしたい

    EXCELのユーザーフォームで、テキストボックスに、例えば「日付のみ入力できる」のような入力規制をしたいのですが、プロパティのどこかでできるのでしょうか?

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

    エクセルのユーザーフォームについての質問です。 かなりの初心者です。 テキストボックスを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 このように、チェックボックスにチェックがあった数だけ、テキストボックスも コピーされて、次々と下の行に入って行くようにしたいのです。 こんなことができるのでしょうか? できるのなら、コードを教えてください。 お願いします。

  • ユーザーフォームについて

    エクセル2002です。 ユーザーフォーム内のテキストボックスを使用して、 (1)A1のセルに1と入力されている状態でマクロを起動した場合、 (2)ユーザーフォーム内のテキストボックスには2と表示される (3)ユーザーフォーム内のボタンを押すと、A2のセルに2と入力される。 このような流れで、A列のデータ最終行に番号をふっていきたいです。 (A列のデータ最終行がA30なら、A31に31と番号をふる) ユーザーフォームのテキストボックスとボタンは作ってあるのですが、 それぞれに入れるコードを教えていただけないでしょうか。 よろしくお願いします。

専門家に質問してみよう