
教えて下さい!
以下のような表があります。
月|日|A担当|コード|サブ|コード|B担当|コード
5 1 田中 1 佐藤 5 鈴木 3
5 2 佐藤 5 鈴木 3 田中 1
5 3 鈴木 3 田中 1 佐藤 5
5 4 佐藤 5 鈴木 3 田中 1
行ごとにかぶっている人がいると”■行の○○さんが重複しています”といったようなメッセージが表示されるようにしたいのです。
行は30行ほどあります。
一つフォームのボタンを作り、それをクリックすることにより重複チェックのマクロが流れるようにするにはどうしたらいいのでしょうか?
No.7ベストアンサー
- 回答日時:
こんばんは。
>私が下に記入してきたような表で列と列の間にいくつかの空白列が含まれる場合
こういう質問は、とても好きですね。(^.^)
頭の体操にはよいのですが、でも、今度こそ、自信がありませんね。
Sub 重複チェック3()
Dim i As Long, j As Long, LastCol As Long
Const 最初の行 As Long = 2
With ActiveSheet
LastCol = .Cells(最初の行, 256).End(xlToLeft).Column
For i = 最初の行 To .Range("A65536").End(xlUp).Row
For j = 3 To LastCol - 1
If VarType(.Cells(i, j)) = vbString Then '※
If Application.CountIf(.Range(.Cells(i, j), .Cells(i, LastCol)), _
.Cells(i, j).Value) > 1 Then
MsgBox .Cells(i, 2).Value & " 日に " & _
.Cells(i, j).Value & "さんが重複しています。"
End If
End If
Next j
Next
End With
End Sub
解説:
If VarType(.Cells(i, j)) = vbString Then
これで、文字列の時だけ、引数を取るようにしました。でも、その間の場所が空白ならともかく、全角空白では、これではダメですね。例えば、全角文字列だけしか検索値に取らない、という場合は、その部分が、
If .Cells(i, j).Value Like "[ぁ-钁]*" Then
ということになるかと思います。
試してみてください。
御礼が遅くなってしまい申し訳ありません。
あれから色々試行錯誤を繰り返しながら、やっとこ出来ました◎
何度もすみませんでした。
ありがとうございます。
No.6
- 回答日時:
froma_a さん、こんばんは。
>田中 佐藤 鈴木 吉田
今度は、3列目から、6列目までですから、前回の理屈からすれば、ひとつ手前までです。しかし、とびとびではありませんので、Step はひとつずつだから、書かなくて良いですね。だから、
# For j = 3 To 5 Step 2
の部分を、このように替えてあげれば、良いことになりますね。
For j = 3 To 5
試してみてください。
この回答への補足
御回答ありがとうございます。
返事が遅くなって申し訳ありませんでした。
もう一つ質問してもいいですか?
例えば私が下に記入してきたような表で列と列の間にいくつかの空白列が含まれるとする場合、「この列とこの列を見て重複しているかチェックする」といった、参照する列を指定したマクロにする場合はどうしたら良いのでしょうか?
本当度々の質問ですみません。
No.5
- 回答日時:
froma_aさん、こんばんは。
>”1日に田中さんが重複しています””5日に佐藤さんが重複しています”といったようなメッセージを表示する場合、どうしたらよいのでしょうか?
なるほど、そういう意味なのですか!
それでは、私の解釈が違いましたね。難しく考えすぎました。
”5日に佐藤さんが重複しています”
なお、これは、4日目ですね。
'----------------------------------
Sub 重複チェック2()
Dim i As Long, j As Long
Const 最初の行 As Long = 2
With ActiveSheet
For i = 最初の行 To .Range("A65536").End(xlUp).Row
For j = 3 To 5 Step 2
If Application.CountIf(.Range(.Cells(i, j), .Cells(i, 7)), _
.Cells(i, j).Value) > 1 Then
MsgBox .Cells(i, 2).Value & " 日に " & _
.Cells(i, j).Value & "さんが重複しています。"
End If
Next j
Next
End With
End Sub
'-------------------------------------
For j = 3 To 5 Step 2
なお、ここの部分は、もっと列が多いときは、現在は、7列目まで、人名が入れてありますから、そのひとつ手前、5列目までで良いわけです。最後はひとつしかありませんからね。つまり、13列目まであるときは、11列目までで良いことになりますね。
この回答への補足
なるほど。。。
そっか!わかりました◎
まだまだ勉強不足ですね…(*_*;)
ちなみにこれが以下の表だった場合はどの記述を加えたらよいでしょうか??
月|日|A担当|サブ|B担当|サブ|
5 1 田中 佐藤 鈴木 吉田
5 2 佐藤 鈴木 鈴木 佐藤
5 3 鈴木 田中 佐藤 鈴木
5 4 佐藤 鈴木 吉田 田中
2日が佐藤さんと鈴木さんが重複していますよね?
尚且つ、3日には鈴木さんが重複しています。
No.4
- 回答日時:
>行ごとにかぶっている人がいると”■行の○○さんが重複しています”
A担当 コード サブ コード B担当 コード
の「行ごとにかぶる」という意味は、日付を除いた、その組み合わせが全部同じである行ということだと解釈しました。
つまり、サンプルの表ですと、佐藤さんの5行目に当たりますね。
以下は、わたし流のコードです。一般的には、Dictionary を使う方法や、仮にVBAでも、#1さんのようなCountif を、シートの作業列を設けるのが普通です。
私は、あまり、シートの作業列を設けるのが好きではないので、もし、Dictionary の方法をお使いになりたければ、また、ご指摘ください。バブルソート法などのアルゴリズムを使う方法もありますが、仮にも、Excelですから、そこまでの必要性がないような気がします。VBAでも、Countif が使えたらよいのですが、配列を引数に取れません。
なお、このコードは、時系列から考え、下からチェックするようにできています。
'----------------------------------------------
Sub 重複チェック1()
Dim i As Long, j As Long, k As Long
Dim myData() As Variant, buf As String
Dim rtn As Variant
Const 最初の行 As Long = 2
For i = 最初の行 To ActiveSheet.Range("A65536").End(xlUp).Row
For j = 3 To 8
buf = buf & "," & Cells(i, j).Value
Next j
ReDim Preserve myData(k)
myData(k) = Mid$(buf, 2)
k = k + 1
buf = ""
Next i
For k = UBound(myData) To LBound(myData) Step -1
rtn = Application.Match(myData(k), myData, 0)
If Not IsError(rtn) Then
If rtn <> k + 1 Then
MsgBox k + 最初の行 & "行目の" & _
Mid$(myData(k), 1, InStr(myData(k), ",") - 1) & _
"さんが重複しています。"
End If
End If
Next k
End Sub
'-----------------------------------------
この回答への補足
細やかな回答ありがとうございます。
とてもうれしいです。
一つ質問してもいいですか?
例えば、以下のように1行に重複している人がいた場合、
月|日|A担当|コード|サブ|コード|B担当|コード
5 1 田中 1 佐藤 5 田中 1
5 2 佐藤 5 鈴木 3 田中 1
5 3 鈴木 3 田中 1 佐藤 5
5 4 佐藤 5 佐藤 5 田中 1
”1日に田中さんが重複しています””5日に佐藤さんが重複しています”といったようなメッセージを表示する場合、どうしたらよいのでしょうか?
質問ばかりですいません。
No.2
- 回答日時:
マクロで確認する流れとしてはこんな感じでしょうか。
・A担当の情報を取得
・サブ、B担当と比較、同じ人が居たら表示。
・サブの情報を取得
・B担当と比較、同じ人が居たら表示。
これを行の数だけ繰り返す。(For~else でくりかえす)
(行数は、先に数えておいたほうが良いですね。)
・自分で確認するだけならピボットテーブルを使って
項目の数を数え、二個以上の重複がないかみるほうが楽かと思います。
担当の数が限られているなら、行のラストに各担当の名前が使われる回数を”COUNTIF”関数で数えても良いと思います。
それぞれの方法はEXCELLのヘルプを参照ください。
この回答への補足
回答ありがとうございます。
マクロで確認する流れとしましては以下のような形だと思います。
・1行目に記載されている名前を取得
・重複している場合エラー”1行目の○○さんが重複しています”
・重複していなかった場合、そのほかの行(2行目以降)を重複チェック
表自体がすでに出来上がっているため、できる限りそれを生かしチェックを行いたいと思っています。
ヘルプを見たり、他のサイトを見たりしたのですが不明確で…
No.1
- 回答日時:
こんばんは
マクロではありませんが
条件付書式の数式が
=COUNTIF(A:A,A1)>1
書式で目立たせる(例えばセルのパターンを赤くする)
等すれば、入力中に重複に気がつきますし
どのセルが重複しているのかも
一目瞭然だと思いますが
いかがなものでしょうか?
ご質問の
>マクロを使用した重複チェックについて
に対しての回答では無いことをお詫びします o(_ _)o
この回答への補足
回答ありがとうございます。
条件付書式は私も考えました。
できれば今勉強中のマクロを使用し考えたいと思いまして投稿しましたので、これからもまだまだ学習していきたいと思います。
どうもありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- その他(学校・勉強) 日本語について 3 2022/04/07 22:50
- PHP MySql PHP 2つのテーブルをJOINで結合 user_idで抽出 1 2023/01/03 14:04
- Access(アクセス) アクセスで教えてください。 例えばテーブル1に 1 佐藤 2 鈴木 3 佐々木 コードと住所一覧があ 3 2022/06/11 20:45
- Visual Basic(VBA) Excel・ユーザーフォームの情報を受け渡したい 4 2022/06/08 10:11
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- 野球 世界一ですか 4 2022/11/11 06:17
- 計算機科学 Excel ある行と列が交わったところにマークを付けるには 7 2023/01/24 08:46
- 野球 日本代表 これで世界一ですか 2 2022/11/11 05:59
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「言う通り」と「言った通り」...
-
「仰せの通り」は「仰る通り」...
-
「**者のかた」って言いますか?
-
同じ通りにやる。の"同じ通り"...
-
サクラエディタは複数行に渡る...
-
itunesの重複項目の削除
-
100MBとは0.1GBのことですか?
-
【Excel】マクロを使用した重複...
-
日曜日 深夜 って土曜と日曜の...
-
今日、16時まで寝てしまいまし...
-
【VBA】特定の範囲で同じ値を含...
-
サブスクで月2万ってどうなんで...
-
4/1000とは、0.4ですか?
-
英検の筆記80~100字だったんで...
-
教科傍用。
-
±10%や±5%ってどうやって計算す...
-
英語で鑿(ノミ)と彫刻刀
-
じゃんけん列車の歌
-
アルファベット順の4文字以上...
-
トライの講習会
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「言う通り」と「言った通り」...
-
サクラエディタは複数行に渡る...
-
重複しないグループ分けをエク...
-
「**者のかた」って言いますか?
-
100MBとは0.1GBのことですか?
-
異なる色の9個の玉を3個ずつ3つ...
-
問題文で「傍線部ⓐⓑⓒⓓⓔの主語を...
-
日曜日 深夜 って土曜と日曜の...
-
同じ通りにやる。の"同じ通り"...
-
「仰せの通り」は「仰る通り」...
-
【VBA】特定の範囲で同じ値を含...
-
PDFデータ A-2サイズの2つの...
-
重複フォルダ検索
-
10個の数字を5個の組み合わ...
-
「過信し過ぎ」はtoo muchの意...
-
「○○極まりないことこの上ない...
-
2024年から
-
予定通り… 想定内通り… 思った...
-
UWSCに詳しい方助けてください><
-
Word2007差し込み印刷について。
おすすめ情報