Excel VBA質問箱 IV

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

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


2332 / 13644 ツリー ←次へ | 前へ→

【68664】重複チェックの方法について G'z One 11/4/3(日) 21:31 質問[未読]
【68665】セルとセルを組み合わせ、出力する方法 G'z One 11/4/3(日) 22:35 質問[未読]
【68666】Re:セルとセルを組み合わせ、出力する方法 kanabun 11/4/3(日) 22:41 発言[未読]
【68667】Re:セルとセルを組み合わせ、出力する方法 G'z One 11/4/3(日) 22:58 お礼[未読]
【68669】Re:セルとセルを組み合わせ、出力する方法 kanabun 11/4/3(日) 23:05 発言[未読]
【68671】Re:セルとセルを組み合わせ、出力する方法 G'z One 11/4/3(日) 23:33 お礼[未読]
【68668】Re:セルとセルを組み合わせ、出力する方法 kanabun 11/4/3(日) 23:00 発言[未読]
【68670】Re:セルとセルを組み合わせ、出力する方法 G'z One 11/4/3(日) 23:18 お礼[未読]

【68664】重複チェックの方法について
質問  G'z One  - 11/4/3(日) 21:31 -

引用なし
パスワード
   皆様、はじめまして。

VBA初心者の者ですが、以下のデータをVBAを使用して
重複チェックしたいと考えているのですが、どのように
コードを記載すればよいのか分からず、どなたか分かる方が
いらっしゃいましたら、ご教授お願いできませんか?

お手数ですが、宜しくお願い致します。


シートのD列とE列に、以下のようなデータがあるとします。

Keyとコードを組み合わせて、注文NOとし、[J列]に出力します。
更に、同じ注文NOがあれば、[K列]にて、(重複)と出力したいです。


   [A]   [D]  [E]    [J]   [K]
[1]  項   key  コード  注文NO  チェック
[2]  1    ●   1    ●1  (重複)
[3]  2   ▲   2    ▲2  (重複)
[4]  3   ■   3    ■3
[5]  4   ★   4    ★4  (重複)
[6]  5   ●   1    ●1  (重複)
[7]  6   ●   2    ●2
[8]  7   ■   1    ■1
[9]  8   ★   4    ★4  (重複)
[10]  9   ▲   3    ▲3
[11]  10   ▲   2    ▲2  (重複)
[12]  11   ★   4    ★4  (重複)
・   ・   ・   ・    ・
・   ・   ・   ・    ・
・   ・   ・   ・    ・

2行目と6行目のデータが重複しています。    ⇒●1
3行目と11行目のデータが重複しています。    ⇒▲2
5行目と9行目と12行目のデータが重複しています。⇒★4


本を見ながら見よう見真似で、下記のVBAを作成したのですが、
[D]列のKEY と [E]列のコードを組み合わせて、[J]列に
注文NOを出力する方法が分かりません。

下記のコードの前に、注文NOを出力する方法を教えて頂けませんか?


Sub 重複チェック()
 With Range("K2").Resize(Range("J" & Rows.Count).End(xlUp).Row)
  .Formula = "=IF(COUNTIF(J:J,J2)>1,""重複"","""")"
  .Value = .Value
 End With
 
 Range("A1").Select
 
 MsgBox "チェック終了"
 
 
End Sub

【68665】セルとセルを組み合わせ、出力する方法
質問  G'z One  - 11/4/3(日) 22:35 -

引用なし
パスワード
   先程投稿させて頂いた者ですが、題名間違えてました。
申し訳ありません。

[D]列のKEY と [E]列のコードを組み合わせて、[J]列に
注文NOをループで出力させる方法をご教授お願いいたします。
最終目標が、注文NOの重複チェックを行う事です。
宜しくお願いします。


>シートのD列とE列に、以下のようなデータがあるとします。
>
>Keyとコードを組み合わせて、注文NOとし、[J列]に出力します。
>更に、同じ注文NOがあれば、[K列]にて、(重複)と出力したいです。
>
>
>   [A]   [D]  [E]    [J]   [K]
>[1]  項   key  コード  注文NO  チェック
>[2]  1    ●   1    ●1  (重複)
>[3]  2   ▲   2    ▲2  (重複)
>[4]  3   ■   3    ■3
>[5]  4   ★   4    ★4  (重複)
>[6]  5   ●   1    ●1  (重複)
>[7]  6   ●   2    ●2
>[8]  7   ■   1    ■1
>[9]  8   ★   4    ★4  (重複)
>[10]  9   ▲   3    ▲3
>[11]  10   ▲   2    ▲2  (重複)
>[12]  11   ★   4    ★4  (重複)
>・   ・   ・   ・    ・
>・   ・   ・   ・    ・
>・   ・   ・   ・    ・
>
>2行目と6行目のデータが重複しています。    ⇒●1
>3行目と11行目のデータが重複しています。    ⇒▲2
>5行目と9行目と12行目のデータが重複しています。⇒★4
>
>
>本を見ながら見よう見真似で、下記のVBAを作成したのですが、
>[D]列のKEY と [E]列のコードを組み合わせて、[J]列に
>注文NOを出力する方法が分かりません。
>
>下記のコードの前に、注文NOを出力する方法を教えて頂けませんか?
>
>
>Sub 重複チェック()
> With Range("K2").Resize(Range("J" & Rows.Count).End(xlUp).Row)
>  .Formula = "=IF(COUNTIF(J:J,J2)>1,""(重複)"","""")"
>  .Value = .Value
> End With
> 
> Range("A1").Select
> 
> MsgBox "チェック終了"
> 
> 
>End Sub

【68666】Re:セルとセルを組み合わせ、出力する方法
発言  kanabun  - 11/4/3(日) 22:41 -

引用なし
パスワード
   ▼G'z One さん:
>[D]列のKEY と [E]列のコードを組み合わせて、[J]列に
>注文NOを

こうですかね?

Sub 重複Check()
  With Range("K2:K" & Cells(Rows.Count, "E").End(xlUp).Row) 'K列
    .Offset(, -1).FormulaR1C1 = "=RC[-6]&RC[-5]"     'J列=D列&E列
    .Formula = "=IF(COUNTIF(J:J,J2)>1,""重複"","""")"   'K列
    .Value = .Value
  End With
  MsgBox "チェック終了"
End Sub

【68667】Re:セルとセルを組み合わせ、出力する方法
お礼  G'z One  - 11/4/3(日) 22:58 -

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

こんばんわ。
回答、どうもありがとうございます。

早速試してみた所、私の期待通りに動作してくれました。
有難うございます。

申し訳ありませんが、あと1つだけ、教えてください。

先程のサンプルデータでは、重複データが7件ありました。

重複データをカウントして、下記の様に MsgBox に
アウトプットする方法を教えて頂けませんか?
   ↓
MsgBox "重複データが ●件あります"


>[D]列のKEY と [E]列のコードを組み合わせて、[J]列に
>>注文NOを
>
>こうですかね?
>
>Sub 重複Check()
>  With Range("K2:K" & Cells(Rows.Count, "E").End(xlUp).Row) 'K列
>    .Offset(, -1).FormulaR1C1 = "=RC[-6]&RC[-5]"     'J列=D列&E列
>    .Formula = "=IF(COUNTIF(J:J,J2)>1,""重複"","""")"   'K列
>    .Value = .Value
>  End With
>  MsgBox "チェック終了"
>End Sub

【68668】Re:セルとセルを組み合わせ、出力する方法
発言  kanabun  - 11/4/3(日) 23:00 -

引用なし
パスワード
   参考までに 別法で、
Dictionaryオブジェクトを使って重複チェックすることも
できます。
(たぶん、こちらのほうが速いと思います。)
Sub CheckDup()
 Dim i As Long
 Dim v, du
 Dim ss As String
 Dim dic As Object
 
 Set dic = CreateObject("Scripting.Dictionary")
 With Range("D2", Cells(Rows.Count, "E").End(xlUp)).Resize(, 2)
   v = .Value            'D&E列用データ配列
   ReDim du(1 To UBound(v), 0 To 1) 'J列、K列出力用配列
   For i = 1 To UBound(v)
     ss = v(i, 1) & v(i, 2)
     du(i, 0) = ss
     If dic.Exists(ss) Then
       If dic(ss) > 0 Then
         du(dic(ss), 1) = "重複"
         dic(ss) = Empty
       End If
       du(i, 1) = "重複"
     Else
       dic(ss) = i
     End If
   Next
   .Offset(, 6).Value = du  'チェック結果を貼り付ける
 End With
 MsgBox "重複チェック終了"
     
End Sub

上のコードは、D列とE列の文字列を結合したものもJ列に出力していますけど、
この列は作業用と考えると、 K列だけを出力する風に書き換えることもできます。

【68669】Re:セルとセルを組み合わせ、出力する方法
発言  kanabun  - 11/4/3(日) 23:05 -

引用なし
パスワード
   ▼G'z One さん:
>重複データをカウントして、下記の様に MsgBox に
>アウトプットする方法を教えて頂けませんか?
>   ↓
>MsgBox "重複データが ●件あります"

こうかな?

Sub 重複Check()
  Dim n As Long
  With Range("K2:K" & Cells(Rows.Count, "E").End(xlUp).Row)
    .Offset(, -1).FormulaR1C1 = "=RC[-6]&RC[-5]"
    .Formula = "=IF(COUNTIF(J:J,J2)>1,""重複"","""")"
    .Value = .Value
    n = WorksheetFunction.CountA(.Cells)
  End With
  MsgBox "重複データは " & n & "件あります", , "チェック終了"
End Sub

【68670】Re:セルとセルを組み合わせ、出力する方法
お礼  G'z One  - 11/4/3(日) 23:18 -

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

重複チェックでも色々なやり方があるんですね。

下記のコードも今、試しましたが、
同様な結果になりました。

データ量が多いと、きっとこちらの方が早く処理される
のでしょうね。

kanabun さんの高度なマクロ知識に、感服しました。
色々と勉強になります。
本当に有難うございます^^


>参考までに 別法で、
>Dictionaryオブジェクトを使って重複チェックすることも
>できます。
>(たぶん、こちらのほうが速いと思います。)
>Sub CheckDup()
> Dim i As Long
> Dim v, du
> Dim ss As String
> Dim dic As Object
> 
> Set dic = CreateObject("Scripting.Dictionary")
> With Range("D2", Cells(Rows.Count, "E").End(xlUp)).Resize(, 2)
>   v = .Value            'D&E列用データ配列
>   ReDim du(1 To UBound(v), 0 To 1) 'J列、K列出力用配列
>   For i = 1 To UBound(v)
>     ss = v(i, 1) & v(i, 2)
>     du(i, 0) = ss
>     If dic.Exists(ss) Then
>       If dic(ss) > 0 Then
>         du(dic(ss), 1) = "重複"
>         dic(ss) = Empty
>       End If
>       du(i, 1) = "重複"
>     Else
>       dic(ss) = i
>     End If
>   Next
>   .Offset(, 6).Value = du  'チェック結果を貼り付ける
> End With
> MsgBox "重複チェック終了"
>     
>End Sub
>
>上のコードは、D列とE列の文字列を結合したものもJ列に出力していますけど、
>この列は作業用と考えると、 K列だけを出力する風に書き換えることもできます。

【68671】Re:セルとセルを組み合わせ、出力する方法
お礼  G'z One  - 11/4/3(日) 23:33 -

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

またまた、回答を頂き、有難うございます!

早速、試してみた所、バッチリです。

kanabunのおかげで、私の理想通りのマクロができました。
感謝です。

kanabun さんって、マクロの天才ですね。

本当に助かりました。

早速ですが、明日会社で使用させて頂きます。

また、何か分からない事があれば投稿させて頂く事が
あるかと思いますが、宜しくお願いいたします。

私も独学ながら、少しずつVBAを勉強して精進して参ります。
有難うございました^^


>>重複データをカウントして、下記の様に MsgBox に
>>アウトプットする方法を教えて頂けませんか?
>>   ↓
>>MsgBox "重複データが ●件あります"
>
>こうかな?
>
>Sub 重複Check()
>  Dim n As Long
>  With Range("K2:K" & Cells(Rows.Count, "E").End(xlUp).Row)
>    .Offset(, -1).FormulaR1C1 = "=RC[-6]&RC[-5]"
>    .Formula = "=IF(COUNTIF(J:J,J2)>1,""重複"","""")"
>    .Value = .Value
>    n = WorksheetFunction.CountA(.Cells)
>  End With
>  MsgBox "重複データは " & n & "件あります", , "チェック終了"
>End Sub

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