Excel VBA質問箱 IV

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

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


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

【30247】EXCEL重複チェック 優哉 05/10/24(月) 7:14 質問[未読]
【30249】Re:EXCEL重複チェック ichinose 05/10/24(月) 7:34 発言[未読]
【30250】Re:EXCEL重複チェック 優哉 05/10/24(月) 7:58 質問[未読]
【30253】Re:EXCEL重複チェック ichinose 05/10/24(月) 8:27 発言[未読]
【30255】Re:EXCEL重複チェック 優哉 05/10/24(月) 8:40 質問[未読]
【30256】Re:EXCEL重複チェック ichinose 05/10/24(月) 9:19 発言[未読]
【30261】Re:EXCEL重複チェック 優哉 05/10/24(月) 9:51 質問[未読]
【30307】Re:EXCEL重複チェック ichinose 05/10/24(月) 22:35 発言[未読]
【30310】Re:EXCEL重複チェック UF 05/10/25(火) 7:46 発言[未読]
【30315】Re:EXCEL重複チェック 優哉 05/10/25(火) 9:58 質問[未読]
【30360】Re:EXCEL重複チェック UF 05/10/25(火) 19:58 発言[未読]

【30247】EXCEL重複チェック
質問  優哉  - 05/10/24(月) 7:14 -

引用なし
パスワード
   みなさん はじめまして 優哉と申します。
早速ですが教えてください。

ユーザ側にAセルにある値を入力してもらい、ボタンをクリックすると
データを固定長で出力するプログラムを作成中なのですが・・・
Aセル内に 全く同じ値が会った場合 エラーを出力して重複データを
入力出来ないようにしたいと思っています。

どのようなプログラミングをすれば良いかお教えいただけますでしょうか?
宜しくお願いします。

【30249】Re:EXCEL重複チェック
発言  ichinose  - 05/10/24(月) 7:34 -

引用なし
パスワード
   ▼優哉 さん:
おはようございます。

>みなさん はじめまして 優哉と申します。
>早速ですが教えてください。
>
>ユーザ側にAセルにある値を入力してもらい、ボタンをクリックすると
>データを固定長で出力するプログラムを作成中なのですが・・・
どこに出力するのですか?
具体的に記述してください。


>Aセル内に 全く同じ値が会った場合 エラーを出力して重複データを
>入力出来ないようにしたいと思っています。
これも例を出して記述して説明して下さい。

重複チェックだって、チェックするデータがどこにあるかによって
方法も違う場合だってあります。
2次方程式を解くのに常に解の公式を使って解くわけではないですよね!!

【30250】Re:EXCEL重複チェック
質問  優哉  - 05/10/24(月) 7:58 -

引用なし
パスワード
   ichinose さん
おはようございます。

説明不足ですみません。

データ出力先は、ローカルドライブ(例D:\TEMP)です。
データ保存 ファイル名.PRNで出力します。

今回のプログラムは ユーザ側が順番にラベルのバーコード(ラベルNo)
を読んでいって 固定長に出力させるプログラムです。
入力箇所はA1セル〜A100セルになっており、読み込み件数は
100未満でも出力可能にしています。
単にそれだけのプログラムなのですが、ユーザ側で間違えて同じラベルを
2回読む可能性が有り、そのチェック機能として 固定長送信ボタンを
クリックした際に もしA1〜A100セルに同じラベルNoがあった場合に
エラーを出力したいと思っています。
プログラム上での重複チェック方法について、分かる方いらっしゃいましたら
お教え願います。


▼ichinose さん:
>▼優哉 さん:
>おはようございます。
>
>>みなさん はじめまして 優哉と申します。
>>早速ですが教えてください。
>>
>>ユーザ側にAセルにある値を入力してもらい、ボタンをクリックすると
>>データを固定長で出力するプログラムを作成中なのですが・・・
>どこに出力するのですか?
>具体的に記述してください。
>
>
>>Aセル内に 全く同じ値が会った場合 エラーを出力して重複データを
>>入力出来ないようにしたいと思っています。
>これも例を出して記述して説明して下さい。
>
>重複チェックだって、チェックするデータがどこにあるかによって
>方法も違う場合だってあります。
>2次方程式を解くのに常に解の公式を使って解くわけではないですよね!!

【30253】Re:EXCEL重複チェック
発言  ichinose  - 05/10/24(月) 8:27 -

引用なし
パスワード
   >
>今回のプログラムは ユーザ側が順番にラベルのバーコード(ラベルNo)
>を読んでいって 固定長に出力させるプログラムです。
>入力箇所はA1セル〜A100セルになっており、読み込み件数は
>100未満でも出力可能にしています。
>単にそれだけのプログラムなのですが、ユーザ側で間違えて同じラベルを
>2回読む可能性が有り、そのチェック機能として 固定長送信ボタンを
>クリックした際に もしA1〜A100セルに同じラベルNoがあった場合に
>エラーを出力したいと思っています。
途中には未入力データがないとして、重複ありか否かだけなら

'==========================================================
Sub test()
  Dim rng As Range
  Dim add As String
  Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
  add = rng.Address
  If Evaluate("round(sum(1/countif(" & add & "," & add & ")),0)") = rng.Count Then
    MsgBox "重複なし"
  Else
    MsgBox "重複あり"
    End If
End Sub

で可能です。又、上記のコードは配列数式をVBAコード内で処理させている
だけなので、数式のみでも可能です。
確認してみてください。

【30255】Re:EXCEL重複チェック
質問  優哉  - 05/10/24(月) 8:40 -

引用なし
パスワード
   ichinose さん

回答有難うございます。

早速試してみたのですが「ボタン」をクリックすると
型が一致しません と言うエラーが表示されてしまいました。

Excel(VBA)については、かなり初心者でして・・・
お手数ですが、原因お教えいただけると助かります。


▼ichinose さん:
>>
>>今回のプログラムは ユーザ側が順番にラベルのバーコード(ラベルNo)
>>を読んでいって 固定長に出力させるプログラムです。
>>入力箇所はA1セル〜A100セルになっており、読み込み件数は
>>100未満でも出力可能にしています。
>>単にそれだけのプログラムなのですが、ユーザ側で間違えて同じラベルを
>>2回読む可能性が有り、そのチェック機能として 固定長送信ボタンを
>>クリックした際に もしA1〜A100セルに同じラベルNoがあった場合に
>>エラーを出力したいと思っています。
>途中には未入力データがないとして、重複ありか否かだけなら
>
>'==========================================================
>Sub test()
>  Dim rng As Range
>  Dim add As String
>  Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
>  add = rng.Address
>  If Evaluate("round(sum(1/countif(" & add & "," & add & ")),0)") = rng.Count Then
>    MsgBox "重複なし"
>  Else
>    MsgBox "重複あり"
>    End If
>End Sub
>
>で可能です。又、上記のコードは配列数式をVBAコード内で処理させている
>だけなので、数式のみでも可能です。
>確認してみてください。

【30256】Re:EXCEL重複チェック
発言  ichinose  - 05/10/24(月) 9:19 -

引用なし
パスワード
   もう出かけてしまうので以下のコードでうまくいかないと
投稿は夜になってしまいますが、
コードは今、優哉さんが抱えている問題のブックにではなく、
新規ブックの標準モジュールに記述してください。

'======================================
Sub test()
  Dim rng As Range
  Dim add As String
  'サンプル1
  With Range("a1:a100")
    .NumberFormatLocal = "G/標準"
    .Formula = "=row()"
    .Value = .Value
    End With
  Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
  add = rng.Address & "," & rng.Address
  If Evaluate("=ROUND(SUM(1/IF(COUNTIF(" & add & ")=0,1,COUNTIF(" & add & "))),0)") = rng.Count Then
    MsgBox rng.Address & " 中に重複なし"
  Else
    MsgBox rng.Address & " 中に重複あり"
    End If
  
  'サンプル2
  
  With Range("a1:a100")
    .Formula = "=row()"
    .Value = .Value
   
    End With
  Range("a1:a5").Value = 1
  Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
  add = rng.Address & "," & rng.Address
  If Evaluate("=ROUND(SUM(1/IF(COUNTIF(" & add & ")=0,1,COUNTIF(" & add & "))),0)") = rng.Count Then
    MsgBox rng.Address & " 中に重複なし"
  Else
    MsgBox rng.Address & " 中に重複あり"
    End If
End Sub


数式に変更がありますが、基本的には前回と同じです。

【30261】Re:EXCEL重複チェック
質問  優哉  - 05/10/24(月) 9:51 -

引用なし
パスワード
   ichinose さん

回答有難うございました。
今回お教えいただいたプログラムにて試してみたところ
先ほどのような 型が一致しません と言うエラーはなくなったのですが
ボタンをクリックすると(このプログラムを起動すると)
A1〜A100に(テスト値?)値が上書きされてしまいます。
このプログラムを元にカスタマイズしろということ?かとは思いますが
どのコードでどのような処理をしているのかちょっとわからないため
大変申し訳ありませんが 本番モードのプログラムを教えていただけると助かります。
何度も申し訳ございませんが宜しくお願いします。


▼ichinose さん:
>もう出かけてしまうので以下のコードでうまくいかないと
>投稿は夜になってしまいますが、
>コードは今、優哉さんが抱えている問題のブックにではなく、
>新規ブックの標準モジュールに記述してください。
>
>'======================================
>Sub test()
>  Dim rng As Range
>  Dim add As String
>  'サンプル1
>  With Range("a1:a100")
>    .NumberFormatLocal = "G/標準"
>    .Formula = "=row()"
>    .Value = .Value
>    End With
>  Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
>  add = rng.Address & "," & rng.Address
>  If Evaluate("=ROUND(SUM(1/IF(COUNTIF(" & add & ")=0,1,COUNTIF(" & add & "))),0)") = rng.Count Then
>    MsgBox rng.Address & " 中に重複なし"
>  Else
>    MsgBox rng.Address & " 中に重複あり"
>    End If
>  
>  'サンプル2
>  
>  With Range("a1:a100")
>    .Formula = "=row()"
>    .Value = .Value
>   
>    End With
>  Range("a1:a5").Value = 1
>  Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
>  add = rng.Address & "," & rng.Address
>  If Evaluate("=ROUND(SUM(1/IF(COUNTIF(" & add & ")=0,1,COUNTIF(" & add & "))),0)") = rng.Count Then
>    MsgBox rng.Address & " 中に重複なし"
>  Else
>    MsgBox rng.Address & " 中に重複あり"
>    End If
>End Sub
>
>
>数式に変更がありますが、基本的には前回と同じです。

【30307】Re:EXCEL重複チェック
発言  ichinose  - 05/10/24(月) 22:35 -

引用なし
パスワード
   ▼優哉 さん:
こんばんは。

>
>回答有難うございました。
>今回お教えいただいたプログラムにて試してみたところ
>先ほどのような 型が一致しません と言うエラーはなくなったのですが
>ボタンをクリックすると(このプログラムを起動すると)
>A1〜A100に(テスト値?)値が上書きされてしまいます。


では、

重複チェックを関数化してみました。
'===================================================
Sub test()
  If repeat_chk(worksheets(1).Range("a1:a100")) Then
    MsgBox "重複しているデータがあります"
  Else
    MsgBox "セルa1:a100は、正常なデータです"
    End If
End Sub
'==========================================================
Function repeat_chk(rng As Range) As Boolean
'  repeat_chk True -----重複あり
'        False----重複なし
  Dim add1 As String
  repeat_chk = True
  add1 = rng.Address & "," & rng.Address
  If Evaluate("=ROUND(SUM(1/IF(COUNTIF(" & add1 & ")=0,1,COUNTIF(" & add1 & "))),0)") = rng.Count Then
    repeat_chk = False
    End If
End Function


>このプログラムを元にカスタマイズしろということ?かとは思いますが
本当は、そうです。

>どのコードでどのような処理をしているのかちょっとわからないため
>本番モードのプログラムを教えていただけると助かります。

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=30302;id=excel

ここで、「まさ7251さん」が

>出来る方法は提示されているのですから、ご自分で試行錯誤してみて、
>具体的にどこで躓いているのかを書き込んでみてください。
>そうすれば、もっと有意義に掲示板を活用することが
>出来るかと思います。

とおっしゃっています。
私も半分は同じ思いです。
(少なくとも私が質問者ならそうします)。

残りの半分は、この掲示板の投稿内容を
どのように使うかなんて事は、優哉 さんが決めればよい事で
私がとやかく言うことではないなあ!!

という思いと半々です。

【30310】Re:EXCEL重複チェック
発言  UF  - 05/10/25(火) 7:46 -

引用なし
パスワード
   ▼優哉 さん:
このようなことでは?如何です。

Sub 重複データチェック() '色付けとメッセージ

Dim MyR As Range, R As Range
Set MyR = Range("A1:A100")
For Each R In MyR
  If Application.CountIf(MyR, R.Value) > 1 Then
    'R.Interior.ColorIndex = 34 '色つけ
    MsgBox "重複データがあります" 'メッセージ
  End If
Next
Set MyR = Nothing

End Sub

【30315】Re:EXCEL重複チェック
質問  優哉  - 05/10/25(火) 9:58 -

引用なし
パスワード
   ichinoseさん、UFさん 

回答有難うございます。
ExcelVBAについては初心者なもので・・・
これからいろいろ覚えていきますので今後とも宜しくお願いします。
早速ですが、UFさん 初心者の私にとってはかなり簡易的で
分かりやすいプログラムでして参考になりました。
一応やりたい事も実現できました。

今後の為にいくつか教えてください。

このプログラムは、MyRにA1〜A100の値を代入し
A1からループでまわして一点ずつ重複の確認をする
ようなプログラムでしょうか?
R.Valueの用途及びSet MyR = Nothingの役割
のあたりを詳しく教えていただけると助かるのですが・・・。
宜しくお願いいたします。


▼UF さん:
>▼優哉 さん:
>このようなことでは?如何です。
>
>Sub 重複データチェック() '色付けとメッセージ
>
>Dim MyR As Range, R As Range
>Set MyR = Range("A1:A100")
>For Each R In MyR
>  If Application.CountIf(MyR, R.Value) > 1 Then
>    'R.Interior.ColorIndex = 34 '色つけ
>    MsgBox "重複データがあります" 'メッセージ
>  End If
>Next
>Set MyR = Nothing
>
>End Sub

【30360】Re:EXCEL重複チェック
発言  UF  - 05/10/25(火) 19:58 -

引用なし
パスワード
   ▼優哉 さん:

今晩は。お元気ですか。
>早速ですが、UFさん 初心者の私にとってはかなり簡易的で
>分かりやすいプログラムでして参考になりました。
シート関数を・・・色々と参考にして。ですが。

>一応やりたい事も実現できました。
良かったですね。私もVBAをやりだした初心者です。
ゆっくりと勉強しています。無理をせずに・・・
でもこの掲示板を見て頑張っております。
>
>今後の為にいくつか教えてください。
教えるようなレベルではありませんが・・・
>
>このプログラムは、MyRにA1〜A100の値を代入し
>A1からループでまわして一点ずつ重複の確認をする
>ようなプログラムでしょうか?
そのようですね。代入?というのではないかと・・・思いますが。
要は調べる範囲を設定して、その範囲の
中に同じものがあればそれを見出しているのですね。
シート関数にこれを使っても即反応しますよ。

>R.Valueの用途及びSet MyR = Nothingの役割
>のあたりを詳しく教えていただけると助かるのですが・・・。
>宜しくお願いいたします。
特に必要は無いのでしょうが、でもメモリーを多く必要とする場合
その時点で目盛っている容量を0にする方が良い・・・反応も早いという
ことでしょう。
詳しくは、ichinose様に解説していただいた方が正しい情報と中身が
豊かだと思いますよ。でも少し難しいですから、できるだけ初心者に
分かりやすくお願いされては・・・如何です。親切な解説をいつもこの
掲示板で見させていただき、この掲示板を見るのが楽しみの一つになって
います。
こんな程度でよろしいでしょうか?。はい。

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