Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11656 / 13646 ツリー ←次へ | 前へ→

【14823】コードの重複チェック ikke 04/6/8(火) 16:37 質問[未読]
【14825】Re:コードの重複チェック ぴかる 04/6/8(火) 17:07 回答[未読]
【14830】Re:コードの重複チェック BOTTA 04/6/8(火) 18:08 回答[未読]
【14838】Re:コードの重複チェック ichinose 04/6/8(火) 19:29 発言[未読]
【14840】コードの重複チェック-番外編 小林 04/6/8(火) 19:48 発言[未読]
【14877】Re:コードの重複チェック-番外編 BOTTA 04/6/9(水) 0:02 発言[未読]
【14850】Re:コードの重複チェック 訂正 大きく ichinose 04/6/8(火) 20:59 発言[未読]
【14932】Re:コードの重複チェック 訂正 大きく ikke 04/6/10(木) 18:13 お礼[未読]

【14823】コードの重複チェック
質問  ikke  - 04/6/8(火) 16:37 -

引用なし
パスワード
   登録用のシートを作成して番号その他の登録を行ないます。
登録コードは手入力なので重複してしまう可能性があります。
これを,重複チェックボタンを押したらチェックして修正を
促すメッセージを表示するように
したいのですが・・。
簡単なことなのかも知れませんが初心者なので教えてください。

登録番号
0001
0002
0003
0004
0005
0004
0002

重複チェックボタンをクリック

「メッセージボックス」
登録番号 
0004
0002
が重複しています。 

こんな感じなのですが・・。
どなたか助けてください。

【14825】Re:コードの重複チェック
回答  ぴかる  - 04/6/8(火) 17:07 -

引用なし
パスワード
   ikkeさん、こんにちは。

変数宣言なし、重複データが全て出てくるセンスないマクロです。
(もうすぐ帰宅しますんで、お許しを・・・。)
多分、どなたかが別案をご提示して頂けると思います。

Sub TEST()

  重複データ = ""
  For I = 1 To Range("A1").End(xlDown).Row
    If Application.CountIf(Range("A1:A" & Range("A1").End(xlDown).Row), Range("A" & I)) > 1 Then
      重複データ = 重複データ & " " & Range("A" & I)
    End If
  Next
  If 重複データ <> "" Then
    MsgBox 重複データ
  Else
    MsgBox "重複データなしです。"
  End If

End Sub

【14830】Re:コードの重複チェック
回答  BOTTA  - 04/6/8(火) 18:08 -

引用なし
パスワード
   ikkeさん、ぴかるさん、こんばんは。

重複チェックなら、「入力規則」が便利ですよ。
ただし、VBAではありません。

>登録用のシートを作成して番号その他の登録を行ないます。
>登録コードは手入力なので重複してしまう可能性があります。

「登録コード」はすべてA列に入力するものとして、
まず、A列全体を選択状態にして、「データ」→「入力規則」
「設定」タブの「入力値の種類」で「ユーザー設定」を選び、
「数式」欄に
=COUNTIF(A:A,A1)=1と入力。

重複データが入力されるとメッセージが出ます。

>重複チェックボタンをクリック
しなくてもいいです。

【14838】Re:コードの重複チェック
発言  ichinose  - 04/6/8(火) 19:29 -

引用なし
パスワード
   ikkeさん、ぴかるさん、BOTTA さん、こんばんは。

>
>重複チェックなら、「入力規則」が便利ですよ。
>ただし、VBAではありません。
>
>>登録用のシートを作成して番号その他の登録を行ないます。
>>登録コードは手入力なので重複してしまう可能性があります。
>
>「登録コード」はすべてA列に入力するものとして、
>まず、A列全体を選択状態にして、「データ」→「入力規則」
>「設定」タブの「入力値の種類」で「ユーザー設定」を選び、
>「数式」欄に
>=COUNTIF(A:A,A1)=1と入力。

私も↑に賛成です。

が、敢えてVBAでやれば、

'=============================================================
Sub test()
  Dim rng As Range
  Dim wk() As Variant
  Dim ans() As Variant
  Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp))
  If rng.Row > 1 And rng.Count > 1 Then
   ReDim wk(1 To rng.Count)
   For idx = 1 To rng.Count
     wk(idx) = rng.Cells(idx).Text
     Next
   ans() = mk_dup_array(wk())
   MsgBox Join(ans, vbLf)
   End If
End Sub
'==================================================================
Function mk_dup_array(myarray() As Variant) As Variant
  Dim myclct As New Collection
  Dim dup()
  Dim jdx As Long
  On Error Resume Next
  For idx = LBound(myarray(), 1) To UBound(myarray(), 1)
   Err.Clear
   myclct.Add myarray(idx), myarray(idx)
   If Err.Number <> 0 Then
     ReDim Preserve dup(jdx)
     dup(jdx) = myarray(idx)
     jdx = jdx + 1
     End If
   Next
  Set myclct = Nothing
  mk_dup_array = dup()
  On Error GoTo 0
End Function

まっ、参考程度に確認して下さい。

【14840】コードの重複チェック-番外編
発言  小林 E-MAIL  - 04/6/8(火) 19:48 -

引用なし
パスワード
   ▼ichinose さん、ikkeさん、ぴかるさん、BOTTA さん、こんばんは。

番外編です。
答えではありません。(MsgBoxは出ませんから)

私はこれを使っています。↓
http://www.morgan.co.jp/kiso/kiso_ex03.htm

なかなかの優れものです。
よろしかったら試してみてください。

作ってくださった方、ありがとうございます。
感謝しています。

【14850】Re:コードの重複チェック 訂正 大きく
発言  ichinose  - 04/6/8(火) 20:59 -

引用なし
パスワード
   前のコードではダメです。
訂正します。
'=====================================================
Sub test()
  Dim rng As Range
  Dim wk As Variant
  Dim ans As Collection
  Set rng = Range("a2", Cells(Rows.Count, 1).End(xlUp))
  If rng.Row > 1 And rng.Count > 1 Then
   ReDim wk(1 To rng.Count)
   With rng
     wk = Evaluate("=transpose(if(countif(" & .Address & "," & .Address & ")>1,text(" & .Address _
        & ",""0000""),""" & Chr(1) & """))")
     wk1 = Filter(wk, Chr(1), False)
     End With
   Set ans = mk_unique_collection(wk1)
   For idx = 1 To ans.Count
     mes = mes & ans(idx) & vbLf
     Next
   MsgBox mes
   End If
End Sub
'========================================================
Function mk_unique_collection(myarray)
  Dim myclct As New Collection
  On Error Resume Next
  For idx = LBound(myarray) To UBound(myarray)
   myclct.Add myarray(idx), myarray(idx)
   Next
  Set mk_unique_collection = myclct
  Set myclct = Nothing
  On Error GoTo 0
End Function


>まっ、参考程度に確認して下さい。

【14877】Re:コードの重複チェック-番外編
発言  BOTTA  - 04/6/9(水) 0:02 -

引用なし
パスワード
   皆さん、こんばんは。

>私はこれを使っています。↓
>http://www.morgan.co.jp/kiso/kiso_ex03.htm
>
>なかなかの優れものです。
>よろしかったら試してみてください。
>
>作ってくださった方、ありがとうございます。

をぉっ!これはここの管理人様がつくったものでわないですかっ
登場できて、よかったですね谷さん(^。^)

【14932】Re:コードの重複チェック 訂正 大きく
お礼  ikke  - 04/6/10(木) 18:13 -

引用なし
パスワード
   皆様,たくさんの回答をありがとうございました。
すごく嬉しかったです。皆さんの方法も試してみて結局
一応ボタンでいくことになりました。
コードは下のとおりです。
また,よろしくお願いします!

Private Sub CommandButton1_Click()
  Dim e_row As Long
  Dim idx As Long
  Dim jdx As Long
  Dim r_add As String
  jdx = 1
  e_row = Cells(Rows.Count, 1).End(xlUp).Row
  r_add = Range(Cells(1, 1), Cells(e_row, 1)).Address
  For idx = 1 To e_row
    With WorksheetFunction
    If .CountIf(Range("a1:a" & idx), Range("a" & idx)) > 1 Then
      MsgBox "受験番号が重複しています。" & Range("a" & idx).Value & ""

    End If
    End With
  Next
End Sub

11656 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free