[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数のシートの重複するデータをまとめて一覧にする』(SUGI)
エクセル初心者です。
1つのBOOKに朝、昼、夜、間とシートがあり
その各シートにB列4行以降にに名前が入り、C列4行以降に住所、
D列4行以降に年齢・・・と情報が続いています。
シートごとに同じデータが入っているのですが、
同じ人物が重複して入っています。
新しい別のシートに重複しない一覧を作成したいのですが、
どのようにしたらよいでしょうか?
新しいく作成するシートはデータの並びは同じでいいのですが、
1行目は項目としてB列2行目から作成したいです。
宜しくお願いいたします。
< 使用 Excel:unknown、使用 OS:unknown >
>新しい別のシートに重複しない一覧を作成したいのですが、 これは名前だけですか? それとも同姓同名で住所や電話番号が一文字でも違えば、重複ではないとみなしますか? 例) 田中太郎 東京 田中太郎 埼玉 の場合、どちらも残すのか、片方だけなのか。
一覧の作成頻度はどのくらいですか? 一度だけですか? 毎朝ですか?
一度だけの場合、「重複の削除」で調べてください。
エクセルのバージョンを教えてください。 (稲葉) 2019/03/06(水) 15:55
>新しい別のシートに重複しない一覧を作成したいのですが、 これは名前だけですか? それとも同姓同名で住所や電話番号が一文字でも違えば、重複ではないとみなし ますか? →名前以外の部分も一覧に入れたいです。
例) 田中太郎 東京 田中太郎 埼玉 の場合、どちらも残すのか、片方だけなのか。 →想定していなかったのですが、両方残すほうがいいです。
一覧の作成頻度はどのくらいですか? →一度だけでなく、追加、変更、名前以外の情報の変更が発生するたびに 一覧に反映していきたいです。頻度は1日1回ほどです。
作業としてはその一覧をもとに 名前と情報のののったネームカード のようなものを別シートで作成します。 変更や追加があった場合は朝、昼、夕のシートに修正して、 ネームカードを印刷しなおして使用します。
エクセルのバージョンを教えてください。 →失礼いたしました。2016です。 (SUGI) 2019/03/06(水) 16:49
標準モジュールに張り付けてください。 実行を押すと、「重複削除」というシートが作られ、そこに各シートのデータをコピーして重複を削除します。 Sub 重複削除() Dim wsn As Variant Dim c As Long, cc As Long Dim i As Long Dim tmp As Variant Dim ary() As Variant If Evaluate("=NOT(ISREF(重複削除!A1))") Then Sheets.Add before:=Sheets(1): Sheets(1).Name = "重複削除" Sheets("重複削除").Cells.ClearContents c = 1 cc = 0 For Each wsn In Array("朝", "昼", "夜") With Sheets(wsn) If c = 1 Then Do c = c + 1 cc = cc + 1 Sheets("重複削除").Cells(1, cc).Value = .Cells(3, c).Value ReDim Preserve ary(cc - 1): ary(cc - 1) = cc Loop Until .Cells(3, c + 1).Value = "" End If tmp = .Range(.Cells(4, c), .Cells(Rows.Count, "B").End(xlUp)).Value Sheets("重複削除").Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(UBound(tmp, 1), UBound(tmp, 2)).Value = tmp End With Next wsn With Sheets("重複削除").Range("A1").CurrentRegion Debug.Print .Address .RemoveDuplicates _ Columns:=(ary), _ Header:=xlYes End With End Sub
|[B] |[C] |[D] [2] |朝シート | | [3] |名前 |住所 |年齢 [4] |上村 つばさ|茨城県| 45 [5] |谷口 幾江 |茨城県| 46 [6] |浜崎 伝三郎|東京都| 45 [7] |望月 松代 |山形県| 39 [8] |伊藤 貞郎 |広島県| 20 [9] |杉田 季孝 |愛知県| 36 [10]|藤本 たか子|新潟県| 39 [11]|相馬 重文 |東京都| 40 [12]|林田 都義 |京都府| 37 [13]|杉田 伴助 |東京都| 35
|[B] |[C] |[D] [2] |昼シート | | [3] |名前 |住所 |年齢 [4] |上村 つばさ|茨城県| 50 ★ [5] |谷口 幾江 |茨城県| 46 [6] |浜崎 伝三郎|東京都| 45 [7] |望月 松代 |山形県| 39 [8] |伊藤 貞郎 |広島県| 20 [9] |杉田 季孝 |愛知県| 36 [10]|藤本 たか子|新潟県| 39 [11]|相馬 重文 |東京都| 40 [12]|林田 都義 |京都府| 37 [13]|杉田 伴助 |東京都| 35
|[B] |[C] |[D] [2] |夜シート | | [3] |名前 |住所 |年齢 [4] |上村 つばさ|茨城県| 45 [5] |谷口 幾江 |茨城県| 46 [6] |浜崎 伝三郎|東京都| 45 [7] |望月 松代 |山形県| 39 [8] |伊藤 貞郎 |広島県| 20 [9] |杉田 季孝 |愛知県| 36 [10]|藤本 たか子|新潟県| 39 [11]|相馬 重文 |東京都| 40 [12]|林田 都義 |京都府| 37 [13]|杉田 伴助 |埼玉県| 35 ★
出力結果 |[A] |[B] |[C] [1] |名前 |住所 |年齢 [2] |上村 つばさ|茨城県| 45 ★ [3] |谷口 幾江 |茨城県| 46 [4] |浜崎 伝三郎|東京都| 45 [5] |望月 松代 |山形県| 39 [6] |伊藤 貞郎 |広島県| 20 [7] |杉田 季孝 |愛知県| 36 [8] |藤本 たか子|新潟県| 39 [9] |相馬 重文 |東京都| 40 [10]|林田 都義 |京都府| 37 [11]|杉田 伴助 |東京都| 35 ★ [12]|上村 つばさ|茨城県| 50 ★ [13]|杉田 伴助 |埼玉県| 35 ★
(稲葉) 2019/03/06(水) 18:03
>→一度だけでなく、追加、変更、名前以外の情報の変更が発生するたびに
> 一覧に反映していきたいです。
どういった理由で、重複が発生するのかわかりませんが、
変更する際は、重複の削除が先でないとだめでは?
(マナ) 2019/03/06(水) 19:02
ありがとうございます。 稲葉様、試してみて名前とC列のは一覧になったのですが D列の情報が反映されませんでした。 なぜか教えていただけますでしょうか?
また追加でA列にも記号が入っていて重複削除後の一覧の A列に反映させることはできますでしょうか。
さらに各シートの重複削除して一覧に反映させる範囲を 4〜50行に範囲設定することはできますでしょうか。
マナ様 各シート朝、昼、夕、の名簿はそれぞれの、参加者がリストになっていて 多くは同じ人物が入っていて半分以上朝、昼、夕と重複しています。 名前の後に続く情報の集計を数値で別のBookで計算し、 埼玉県が何名、洋食が何名、という風に数を集計したものを作成しています。 それとは別にネームカードに名前や情報が書いたものを印刷して使用しています。 (↑それを今は手書きです)
情報が変更し、ネームプレートを差し替えたり(昨日まで和食だったが、今日は洋食など) が頻繁に発生するため、作業は毎日あります。
分かりにくいと思いますが、ご検討お願いいたします。
(SUGI) 2019/03/07(木) 10:09
> D列の情報が反映されませんでした。 >なぜか教えていただけますでしょうか? D3セルが空白になっていませんか? A3 B3 C3・・・と見ていって、空白になったらそこで表が終わり、というコードです。
> また追加でA列にも記号が入っていて重複削除後の一覧の >A列に反映させることはできますでしょうか。 >さらに各シートの重複削除して一覧に反映させる範囲を >4〜50行に範囲設定することはできますでしょうか。 意味が分かりません。 具体的な例を出してください。
(稲葉) 2019/03/07(木) 10:20
>なぜか教えていただけますでしょうか? D3セルが空白になっていませんか? A3 B3 C3・・・と見ていって、空白になったらそこで表が終わり、というコードです。
→なっていました。ありがとうございます。
意味が分からラなかった部分下記もう一度 ご検討ただけますでしょうか。 最初にお伝えせず、後から気づいた内容です。
・朝、昼、夕それぞれのシートのA列には「S」「特」など 記号が入っていて、重複削除した一覧のA列に反映させたい。 (名前はB列、情報はC列以降に表示させたい。) 先ほどのマクロを実行させたところ、重複削除のシートのA列に名前がありました。
・朝、昼、夕のシートのだいたい30行目以降に今は使っていない人の 情報が残っています(復活するかもしれないので、完全に消していない) ここは一覧に表示させたくないので、4行目から30行目(余裕をつくって50行目でも) を重複削除したいです。
(SUGI) 2019/03/07(木) 15:10
最初の要件が、B2からでしたね。すみません。
> c = 1 これを c = 0
>tmp = .Range(.Cells(4, c), .Cells(Rows.Count, "B").End(xlUp)).Value これを tmp = .Range(.Cells(4, c), .Cells(50, "A")).Value
試してないけど、これでどうでしょうか? (稲葉) 2019/03/07(木) 16:12
確認が遅くなり申し訳ございません。 記載いただいた物を試したのですが 「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです」 となり動きませんでした。
何度も申し訳ございませんが、 対処法を教授いただけますでしょうか?
よろしくお願いいたします。 (SUGI) 2019/03/11(月) 11:26
どの部分でしょうか? デバッグ画面で網掛けのコードを教えてください。 (稲葉) 2019/03/11(月) 11:59
tmp = .Range(.Cells(4, c), .Cells(50, "A")).Value の部分は黄色く網掛けになりました。 よろしくお願いいたします。 (SUGI) 2019/03/11(月) 14:42
前回直してほしいところが漏れていたみたいです。 全面差し替え あと確認でA列が異なって、他が同じ場合は、重複とみなしますか? |[A]|[B] |[C] |[D] [2]|S |上村 つばさ|茨城県| 45 [3]|特 |上村 つばさ|茨城県| 45 この方は重複とみなすのか、そうでないのか。 コード上はみなしていません。
Sub 重複削除() Dim wsn As Variant Dim c As Long, cc As Long Dim i As Long Dim tmp As Variant Dim ary() As Variant If Evaluate("=NOT(ISREF(重複削除!A1))") Then Sheets.Add before:=Sheets(1): Sheets(1).Name = "重複削除" Sheets("重複削除").Cells.ClearContents c = 0 cc = 0 For Each wsn In Array("朝", "昼", "夜") With Sheets(wsn) If c = 0 Then Do c = c + 1 cc = cc + 1 Sheets("重複削除").Cells(1, cc).Value = .Cells(3, c).Value ReDim Preserve ary(cc - 1): ary(cc - 1) = cc Loop Until .Cells(3, c + 1).Value = "" End If tmp = .Range(.Cells(4, c), .Cells(50, "A")).Value Sheets("重複削除").Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(UBound(tmp, 1), UBound(tmp, 2)).Value = tmp End With Next wsn With Sheets("重複削除").Range("A1").CurrentRegion Debug.Print .Address .RemoveDuplicates _ Columns:=(ary), _ Header:=xlYes End With End Sub (稲葉) 2019/03/11(月) 15:55
ありがとうございます。 記載いただいたように重複とみなさないでいいです。 希望通りのものができました。
時間もかかってしまい申し訳ございませんでした。
本当にありがとうございました。 (SUGI) 2019/03/11(月) 16:35
上記の件でさらに質問です。
今"朝", "昼", "夜"のシートを重複削除で一覧にできたのですが、 同じブック内でさらに別のシートで"月", "火", "水"があり、 今できている"重複削除"と別のシートで同じことをしたいのですが、 どのようにすればいいでしょうか?
自分なりに"重複削除"この部分の名前をかえて 新規で標準モジュールを作成したのですが デバックが With Sheets(wsn)と網掛けされエラーになってしまいました。
何度もすみませんがよろしくお願いいたします。 (SUGI) 2019/03/22(金) 16:00
遅くなりました。 しばらく腰を据えて返信できそうにないので、端的な返信になります。
For Each wsn In Array("朝", "昼", "夜") この部分が実際にはないシート名を指定されているのではないでしょうか?
同じ表構成であれば、こちらを書き換えることで対応できると思います。 (稲葉) 2019/03/25(月) 17:48
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.