先日こちらで重複チェックの仕方を教えていただきました。
これをアレンジしようと思ったのですが、どうしてもうまくいかないので、もう一度教えていただけませんでしょうか?
先日は4つ全てのデータが一致する場合にメッセージボックスが出るように教えていただきました。
今回はチェックするのは3箇所で、そのうち2箇所が選択でどちらかにだけデータが入ります。
一番最初にコンボボックスでワードを選びます。
次にテキストボックスに数字を入れるのですが、テキストボックスが2つあり、どちらかにだけデータを入れます。
コンボボックス とテキストボックス1、コンボボックス とテキストボックス2の組み合わせになるのですが、
これが既にデータがある場合にメッセージボックスが出るようにしたいと思います。
この場合はどのように変更したらいいのでしょうか?
今のコードは以下の通りです。
どうかよろしくお願いいたします。
Private Sub touroku2_Click()
Dim res
res = MsgBox("登録します。よろしいですか?", vbYesNo + VbInfomation, "確認")
If res = vbNo Then
Exit Sub
End If
Sheets("銘柄").Activate
Dim Lrow
With Sheets("銘柄")
If WorksheetFunction.CountIfs(.Range("A:A"), cbokaisya, .Range("C:C"), txtip, .Range("D:D"), txtru) = 1 Then
MsgBox "既に登録があります。"
Exit Sub
Else
Lrow = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & Lrow).Value = cbokaisya
.Range("C" & Lrow).Value = txtip
.Range("D" & Lrow).Value = txtru
.Range("E" & Lrow).Value = txtmeigara
.Range("F" & Lrow).Value = txthyouki
End If
End With
End Sub
No.11ベストアンサー
- 回答日時:
No.10です。
>をするケースはあります。
>これは有効にしたいです。
この場合ですと過去に
cbokaisya : txtip
で登録した際のtxtruのセルは当然空白って事ですよね?
こちらではどうでしょう?(一部しか載せてませんが)
With Sheets("銘柄")
Select Case True
Case txtru = "" And WorksheetFunction.CountIfs(.Range("A:A"), cbokaisya, .Range("C:C"), txtip) > 0
MsgBox "既に登録があります。"
Exit Sub
Case txtip = "" And WorksheetFunction.CountIfs(.Range("A:A"), cbokaisya, .Range("D:D"), txtru) > 0
MsgBox "既に登録があります。"
Exit Sub
Case Else
Lrow = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & Lrow).Value = cbokaisya
.Range("C" & Lrow).Value = txtip
.Range("D" & Lrow).Value = txtru
.Range("E" & Lrow).Value = txtmeigara
.Range("F" & Lrow).Value = txthyouki
End Select
End With
No.10
- 回答日時:
No.9です。
もしかしてですが。
過去に
cbokaisya : txtip
で登録をしていて今回は
cbokaisya : txtru
で登録をしようと(そのようなデータ登録は有効とみなす?)しているとか。
ならば既に登録されているって判定される事について他に理由はなさそうに思えるのですが。。。
そうすると空白ではないテキストボックスコントロールを判断させ(No.6 fujillin さん回答の)、CountIfsを加算させて判定していたのをそのテキストボックスコントロールのみとの
組み合わせになるよう切り離して別々に判定した方が良いかもですが、実際のデータとしては私の仮説であってますでしょうか?
もしあっているとした場合、現在の検証コードはどのようになっているのか教えてください。
めぐみん_さん、何度もすみません。
cbokaisya : txtip
で登録をしていて、その後
cbokaisya : txtru
をするケースはあります。
これは有効にしたいです。
今はテストなので全く異なる数値で入力していました。
今まで登録がないものを入力してみようとしておりましたが、既に登録されていると表示されてしまいます。
No.9
- 回答日時:
No.7,8です。
ちょっと確認を。
If WorksheetFunction.CountIfs(.Range("A:A"), cbokaisya, .Range("C:C"), txtip) + WorksheetFunction.CountIfs(.Range("A:A"), cbokaisya, .Range("D:D"), txtru) > 0 Then
このコードを
If (WorksheetFunction.CountIfs(.Range("A:A"), cbokaisya, .Range("C:C"), txtip) + WorksheetFunction.CountIfs(.Range("A:A"), cbokaisya, .Range("D:D"), txtru)) > 0 Then
このようにカウントの加算を()で括った状態でも未登録なのに挙動がおかしくなりますかね?
CountIfs関数自体使う機会がなく(最近まで2002を使ってたので)、動作を把握しきれてませんでした。
先ほどの懸念を数式でチェックしてみると私が思っていたような結果にはならなさそうでしたので、あとは条件式の判定ミスなのかな?と。
No.7
- 回答日時:
No.5です。
>WF As WorksheetFunction '文字数省略の為
>WF.CountIfs
って使えないみたいですね。(どこかでか見たような気がしたのですが、未検証でしたのでごめんなさい。)
変数の宣言を消して
WF.CountIfs(~
は
WorksheetFunction.CountIfs(~
に書き換えてみて下さい。
何度もすみません。
ありがとうございます。
試してみたところ、エラーは出ませんでしたが、未登録情報でも「既に登録があります」と出てしまいます。
No.6
- 回答日時:
No2です。
他の方が丁寧に回答なさっているようなので、今更追加する必要もないのかもしれませんが…
どのような形でテキストボックスの値を取得しているのかわかりませんが、ふたつのテキストボックスの値をtxt1、txt2とするなら、
If (txt1 = "" And txt2 = "") Or (txt1 <> "" And txt2 <> "") Then
'両方未入力または両方に入力がある場合のエラー処理
Exit Sub
End If
If txt2 = "" Then
'txt1に入力がある場合の処理
Else
'txt2に入力がある場合の処理
End If
といった形式で判断できるはずです。
>どちらかに数値を入力します。
上記では変数が空白("")かどうかでチェックしていますが、数値の意味のあるものかどうかでチェックするなら、
IsNumeric(txt1)
などを利用して判定するようにすれば良いでしょう。
>コピペして実行してみたところ、~~
コピペで実行できるものを作成するには、私には情報が不足しています。
コピペ以外をお考えでない場合は、この回答はスルーして他の方の回答をお待ちください。
fujillinさん、ありがとうございます。
せっかくの貴重なアドバイスですので、少しでも理解できるように頑張りたいと思います。
ご提示いただいたコードの日本語のところに希望する処理(メッセージボックスを入れるなど)をするということでしょうか?
No.5
- 回答日時:
No.4です。
Bookをバックアップして先に書いていた Private Sub touroku2_Click() ~ End Sub 全体を上書きするか、或いはその間のコードだけをコピペ上書きで良いはずですが。。。
どのような事をしてそのエラーが出ているのか、ちょっと思いつかない。(そのエラーの経験がないので)
お礼が遅くなりすみません。
原因がわからず、ひたすら消して書き直しをしていました。
とりあえずエラーは出なくなりました。
コードについて試してみたところ、
If WF.CountIfs(.Range("A:A"), cbokaisya, .Range("C:C"), txtip) + WF.CountIfs(.Range("A:A"), cbokaisya, .Range("D:D"), txtru) > 0 Then
のところで黄色くなってしまいました。
ここはどのようにしたらよろしいのでしょうか???
No.4
- 回答日時:
No.3です。
未検証なのでBookはバックアップを取って下さいね。
Private Sub touroku2_Click()
Dim res, WF As WorksheetFunction '文字数省略の為
res = MsgBox("登録します。よろしいですか?", vbYesNo + VbInfomation, "確認")
If res = vbNo Then
Exit Sub
End If
Select Case True '強制実行
'双方の文字を連結しても文字列の長さが0でしかない
Case Len(txtip & txtru) = 0
MsgBox "テキストボックスが双方とも未入力です": Exit Sub
'双方の文字数を積算しても0にならない
Case Len(txtip) * Len(txtru) <> 0
MsgBox "テキストボックスが双方とも入力されてます": Exit Sub
End Select
Sheets("銘柄").Activate
Dim Lrow
With Sheets("銘柄")
'それぞれを別々にCountして加算し結果として0を超えた場合
If WF.CountIfs(.Range("A:A"), cbokaisya, .Range("C:C"), txtip) + WF.CountIfs(.Range("A:A"), cbokaisya, .Range("D:D"), txtru) > 0 Then
MsgBox "既に登録があります。"
Exit Sub
Else
Lrow = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & Lrow).Value = cbokaisya
.Range("C" & Lrow).Value = txtip
.Range("D" & Lrow).Value = txtru
.Range("E" & Lrow).Value = txtmeigara
.Range("F" & Lrow).Value = txthyouki
End If
End With
End Sub
ありがとうございます。
コピペして実行してみたところ、
「名前が適切ではありません:touroku2_Click」
と表示されてしまいます。
ボタンの名前は「touroku2」で間違いありません。
この場合はどうしたらよいのでしょうか?
No.3
- 回答日時:
あれ?
うちの火狐の調子が悪いのかな?
既出の回答が見られない・・・
まずコンボボックスとテキストボックス2に値を入れて登録をするとします。
この場合テキストボックス2の値はD列に存在しているかを調べるだけで、C列の値(テキストボックス1で登録するデータ)には存在しないので調べる必要がないと考えて宜しいのでしょうか?
めぐみん_さん、ありがとうございます。
コンボボックス は必ず値を選択します。
その後テキストボックス1かテキストボックス2のどちらかに数値を入力します。
両方に入れた場合については現状対策しておりませんでしたが、
もし両方に数値が入った場合はエラーメッセージが出るようにしたいと思っています。
テキストボックス2の値はC列には存在しないので調べる必要はありません。
どうぞよろしくお願いいたします。
No.2
- 回答日時:
No1です。
>テキストが両方とも入力される場合はありません
>(両方入力の場合はエラーになる仕組みを忘れていました)。
どこでテキストを取得してチェックを行っているのか不明ですが、両方ともに有意な文字列になることがないと保証されているなら、if文でどちらか片方が空白かどうかを判定すれば良いだけでは?
これで場合わけができるので、後は、ご提示と同じ方法でそれぞれチェックすればよいでしょう。
再度のアドバイスありがとうございます。
txtipとtxtruがテキストボックスで、このどちらかに数値が入ることになります。
両方に入ってしまった場合にエラーになるようにしたいのと、
cbokaisya(コンボボックス )+txtip(テキストボックス)、
cbokaisya(コンボボックス )+txtru(テキストボックス)、
で重複をチェックする方法が知りたいと思っております。
この場合はどのように記述したらよいか教えていただけませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 日付を重複させずに数えたい 4 2022/12/04 16:26
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでテキストボッ...
-
テキストボックスに入る文字を...
-
テキストボックスに大文字を
-
visual basic初心者です。 visu...
-
256色で任意の色を作成する時、...
-
VBAのフォーム カーソル移動
-
整数かどうかチェックする
-
テキストボックスを空白にする方法
-
VBAで入力数値について
-
VBでローマ字入力とかな入力を...
-
VB.NETのテキストボックスで、...
-
VB2005テキストボックスへのコ...
-
【C#】コンボボックスにおけるS...
-
テキストボックスとカーソルの制御
-
visual studio 2008 C# で、値...
-
【VB.NET】テキストボックスに...
-
VBSのプログラム
-
合計値の反映
-
VBA public変数はどのようなこ...
-
他のフォームから別のフォーム...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでテキストボッ...
-
アクセスできない保護レベルエ...
-
VBAで入力数値について
-
visual basic初心者です。 visu...
-
ユーザーフォームへのデータ入...
-
Excel ユーザーフォームで計算 ...
-
【VB.NET】テキストボックスに...
-
テキストボックスを空白にする方法
-
テキストボックスに大文字を
-
コンボボックスからテキストボ...
-
VB2005テキストボックスへのコ...
-
VBでローマ字入力とかな入力を...
-
VBでの入力値制限について
-
VBAのフォーム カーソル移動
-
TextBoxの内容を右寄せ
-
Vba テキストボックスの文字列...
-
整数かどうかチェックする
-
TEXTBOXの表示形式の変...
-
ACCESS 除算での小数点切上げ方法
-
テキストボックスとカーソルの制御
おすすめ情報