「忠犬もちしば」のAIボットを作ろう!

 エクセルの重複セルの削除において、通常、条件が一つの場合は出来るのですが、複数セルの組み合わせの場合、どのようにすればいいでしょうか?

 例えば、下記のように項目が並んでいるとします
    A     B   C    D
 1 メーカー  車種
 2 トヨタ  クラウン
 3 トヨタ  アルファード
 4 トヨタ  カローラ
 5 トヨタ  クラウン
 6 ホンダ  シビック
 8 ホンダ  オデッセイ
 9 ホンダ  アコード
10 日産   サニー
11 トヨタ  クラウン
12 日産   スカイライン
13 日産   セドリック
14 ホンダ  シビック
 ↓   ↓
  このような配列でデーター項目セルが1万ほどあります。
 例えば、このうちメーカーがトヨタで車種がクラウン(A2+B2)
の組み合わせの重複を見つけ、重複行を削除するにはどのようにすればよいでしょうか?
メーカーだけの重複を見つけ、重複行の削除をするには
 いつもは=IF(COUNTIF($A$2:A2)>1,NA(),"")のような方法でNA()を返し、ジャンプ→エラー値で一括削除しています。
 このような2つの組み合わせの場合、どのような式を立てれば良いでしょうか?教えていただけないでしょうか?

A 回答 (5件)

(1)VBAを使う


(2)SortしてVBAを使う
方法がありますが、略
(3)A、B列を結合した文字列をC列に作りそこで関数で重複しないものだけに連番を振る。後はimogasi方式で、別シートなどに抜き出しする。(imogasi方式は、私の過去の回答例に沢山有ります)
「A、B列を結合した文字列をC列に作る」ときに、A列の最高文字数を見繕い、もしそれが10桁とするなら、
=A1&REPT( " ",10-LEN(A1))&B1
のようにするのがお勧めです。
連番は
A2:A7が
A列  B列(関数式結果)
aa1
bb2
aa
cc3
bb
dd4
の場合
B2には=IF(COUNTIF($A$2:A2,A2)=1,MAX($B$1:B1)+1,"")
と入れてB7まで式を複写します。
この1,2,3,4を頼りにSheet2の第1,2,3,4行にSheet1のデータを持ってきます。
(4)ピボットテーブルも使えるかも
コード1コード2計数
aax1
bby2
aax3
ccc4
のようなデータに対し
データの個数 / 計数
コード1コード2合計
aax2
aa 合計2
bby1
bb 合計1
ccc1
cc 合計1
総計4
のような表が即座にできます。
ピボットの操作の「レイアウト」の指定のところで
「行」にコード1とコード2をドラッグし、「データ」には「データの個数」をドラッグします。
    • good
    • 0
この回答へのお礼

お礼が遅れてすみませんでした。複雑な条件になると分かりにくいので参考になりました。
 自分でやってみて、検証してみます。有難うございました。

お礼日時:2006/12/03 16:10

[フィルタオプションの設定]の“重複するレコードは無視する”機能を使うのが簡単かと。


1万行だと時間が掛かりそうだけど、その間は珈琲でも飲んでおけば好い。(^_^)
    • good
    • 2

◆メーカが違って同じ車種は無いのではないでしょうか!


◆C列を作業列にして
C2=COUNTIF($B$2:B2,B2)

◆フィルタで、C列の「1」を抽出してください
    • good
    • 0

すご~く、どんくさい方法ですが、恥を忍んで紹介します。



・A列=メーカー、B列=車種、とします。
・「A列~●列(データが入っている最後の列)」を対象に「データ」「並び替え」にて「優先されるキー」を「列:A・昇順」「列:B・昇順」「ほか・なし」とし、ソートします。
・「●の次の列」の、例えば2行目に「=IF(AND(A2=A1,B2=B1),"*","")」を入力し、全行にコピーします。すると重複している行には"*"が表示されます(重複が始まる最初の行には"*"が表示されません)。
・「●の次の列」で、「コピー」「形式を選択して貼り付け」で「値」をチェックし貼り付けます。これで「=IF(AND(A2=A1,B2=B1),"*","")」は全て"*"かブランクになります。
・「A列~●の次の列」で「データ」「並び替え」にて「優先されるキー」を「列:●の次・降順」とし、ソートします。
・1行目からず~と「●の次の列」に"*"が入った行が続きます。
・"*"が入った行を全て削除します。
・これでA列・B列が重複した行はなくなります。

超どんくさい方法で恐縮ですが、もしお気に召せば、お試し下さい。
    • good
    • 1

A列データとB列データを結合した作業列を使って


検索すればよろしいかと
   C            D
=CONCATENATE(A2,B2)   =IF(COUNTIF($C$2:C2,C2)>1,NA(),"")

1万行までコピー
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで複数の列が一致する重複データを削除したい

こんにちは。
よろしくお願いします。

今私はエクセルに吐き出した顧客データを整理しているのですが質問があります。

エクセルに出した顧客データの内容は添付イメージの様な感じです。


固定電話、携帯、姓、名で列が分かれています。
この中で

固定、姓、名が一致するデータ
携帯、姓、名が一致するデータ

    で重複が無いかを探したいです。

オートフィルタを使用して確認しようとしていたのですがデータが膨大なので手作業は難しいと判断しました。

どなたかお分かりになる方いましたらご助言をお願いします。

Aベストアンサー

No.2です。仮に

TEL MOBILE LAST_NAME FIRST_NAME
0344445555 09088883333 Yamada Taro -----1
0344445555 (空白) Yamada Taro -----2
(空白) 09088883333 Yamada Taro -----3

という3件のデータがあった場合
1と2は電話番号で重複、1と3は携帯番号で重複していますが
これらを重複とみなすのかどうか?
(それ以前に上記のようなパターンが存在するかどうか?、ですが)

フィルタオプションで重複レコードを除く方法だと、この3件は全て
「重複ではない」とみなされます。その点はご注意下さい。

Q【エクセル】2列間で、同じ組み合わせのものを抽出したい。

A列には地名、B列にはお店が書いてあるような表で
A列とB列の組み合わせが他の行でもあった場合それを表示しないよう
にさせたいんです。
たとえば以下な表を、(A,B列は元から記入されています)

│A   │B     │C│D│││││
1│東京  │ラーメン屋│ │││││
2│東京  │花屋    │ │││││
3│神奈川│花屋    │ │││││
4│東京  │ラーメン屋│ │││││
5│神奈川│自転車屋 │ │││││
6│埼玉  │ラーメン屋│ │││││
7│神奈川│花屋     │ │││││

を・・

│A   │B      │C  │D │E│
1│東京  │ラーメン屋│東京 │ラーメン屋│2│
2│東京  │花屋    │東京 │花屋 │2│
3│神奈川│花屋    │神奈川│花屋 │1│
4│東京  │ラーメン屋│神奈川│自転車屋 │2│
5│神奈川│自転車屋 │埼玉 │ラーメン屋│1│
6│埼玉  │ラーメン屋│    │ │ │
7│神奈川│自転車屋 │     │ │ │

というように、C列、D列、E列に、A,B列の元データで共に重複している
部分を表示させないようにするには、どうしたらよいでしょうか?

ちなみに、マクロはなるべく使わず、関数で教えてもらえると有難いです。
よろしくお願いします。

A列には地名、B列にはお店が書いてあるような表で
A列とB列の組み合わせが他の行でもあった場合それを表示しないよう
にさせたいんです。
たとえば以下な表を、(A,B列は元から記入されています)

│A   │B     │C│D│││││
1│東京  │ラーメン屋│ │││││
2│東京  │花屋    │ │││││
3│神奈川│花屋    │ │││││
4│東京  │ラーメン屋│ │││││
5│神奈川│自転車屋 │ │││││
6│埼玉  │ラーメン屋│ │││││
7│神奈川│花屋     │ │││││

を・・

│A   │B   ...続きを読む

Aベストアンサー

訂正です
(3)F2に「=IF(D2="","",COUNTIF($C2:&C&100,C2))」と入力

(3)F2に「=IF(D2="","",COUNTIF($C2:$C$100,C2))」と入力
としてください。

このままだとばらばらにデータが入ったままなので
(1)D~F列のデータを選択→コピー
 →右クリック「形式を選択して貼り付け」で「値」で貼り付けておく
(2)D~F列のデータ範囲を選択して「データ」→「並び替え」で並び替える

もしくはデータの順番をデータの登場順のままで整理したいなら
(1)D~F列のデータ範囲を選択して「データ」→「フィルタ」→「オートフィルタ」
(2)D列の△印→「空白せる以外」をクリック
(3)データをいったん別シートに「値」でコピペしておき、オートフィルタを解除しなおしてからもとのシートに貼り付けてなおしてください。

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

QExcelでの全通りの組み合わせ出力方法(文字列)

Excelについて全くの初心者で、教えて頂きたい質問があります。

Excelの文字列の全通りの組み合わせを出力がしたいのですが、その方法が分かりません。
例えばセルAに
・りんご
・みかん
・いちご

セルBに
・だいこん
・キャベツ
・トマト

があり、別のセルにその全通りの組み合わせを出力
(文字と文字の間はスペース)

りんご だいこん
りんご キャベツ
りんご トマト
みかん だいこん
みかん キャベツ
みかん トマト
いちご だいこん
いちご キャベツ
いちご トマト

この様に出来る方法はあるでしょうか?
また出来ればその裏(だいこん りんご)も出力したいと考えており、キーワードは3つまで出来るようになりたいです。

どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

Aベストアンサー

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行からB列最終行まで繰り返し
x = x + 1
Cells(x, "C") = Cells(i, "A") & " " & Cells(n, "B") 'C列に結合して転記
Next n
Next i
End Sub

3.Alt+F11キーでワークシートへもどります.

4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行

これでできます。
これがわかれば「裏」というのも簡単ですよね。
以上はVBAでの回答ですが、外していたらごめんなさい。

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行...続きを読む

QエクセルでA列B列C列の重複するレコードのみを表示

エクセルのA列とB列とC列で重複するレコードのみを抽出して別の列に表示させたい。

エクセルのA列とB列とC列にそれぞれ1000行くらいのデータがあります。
それぞれの列内には重複レコードがあります。

この条件の中で

「A列とB列とC列に重複するデータすべて」

を抽出したいのですが、どんな方法がありますか。
抽出されたデータで重複レコードの場合は1件のみで表示したいです。

よろしくお願いします。


  A   B   C   抽出 
1-001-002--002--002
2-002-002--005--007
3-003-007--007--008
4-007-008--008--011
5-008-008--010
6-008-010--011
7-011-011--012
8-013-014--013

Aベストアンサー

式が複雑になるということはそれだけ分かりにくく、計算が重くなるということです。出来るだけ作業列を使ってわかりやすく処理することが肝要と考えます。
例えばA,B,C列の2行目からお示しのようなデータがあるとします。
D2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(AND(COUNTIF(A$2:A2,A2)=1,COUNTIF(B:B,A2)>0,COUNTIF(C:C,A2)>0),MAX(D$1:D1)+1,"")

D列にはA,B,C列に共通して含まれるデータがあれば上から順に番号が付けられます。その際にもしもA列でダブったデータがある場合には最初に出てきたデータに番号が振られます。

お求めのデータはE列に並べるとしてE2セルには次の式を入力して下方にオートフィルドラッグします。

=IF(ROW(A1)>MAX(D:D),"",INDEX(A:A,MATCH(ROW(A1),D:D,0)))

D列が目障りでしたら列を非表示にすればよいでしょう。

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExcelですべての組合せ(重複組合せ)を出力するには?

Excelですべての組合せ(重複組合せ)を出力するには?

次の条件のような場合、Excelですべての組合せ(重複組合せ)をVBAで出力するにはどうしたらいいのでしょうか?

10種類のお菓子の中から、好きなものを3個選んでセットにするとします。
同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓子A」は選んだ順が違うだけで同じ組合せなので、どちらか片方だけにします。

この場合、すべての組合せの数は Excelの関数で求めることができるようで COMBIN(10+3-1,3) = 220 通りあることまではわかりましたが、このすべての組合せの一覧をどのようにして出力したらいいのかがわかりません。

いろいろ検索した結果、順列という方法は見つかりましたが、重複組合せでの方法は見つけることができませんでした。
また、Accessを使っても似たようなことができるのでしょうか? 直積?

できれば、3個固定ではなく5個の場合も出来るとうれしいです。
よろしくお願いします。

Aベストアンサー

>同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓
つまり「菓子A、菓子A、菓子A」も「菓子A、菓子A、菓子B」もあり ですね。
№2さんのコードをお借りして
Sub Test()
  Dim myStr As Variant
  Dim rowX As Long
  Dim i As Long, j As Long, k As Long
  Const MaxNum = 10

  myStr = Split("A B C D E F G H I J")
  rowX = 1
  For i = 0 To MaxNum - 1
    For j = i To MaxNum - 1
      For k = j To MaxNum - 1
        Cells(rowX, 1).Value = myStr(i)
        Cells(rowX, 2).Value = myStr(j)
        Cells(rowX, 3).Value = myStr(k)
        rowX = rowX + 1
      Next k
    Next j
  Next i
End Sub

>同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓
つまり「菓子A、菓子A、菓子A」も「菓子A、菓子A、菓子B」もあり ですね。
№2さんのコードをお借りして
Sub Test()
  Dim myStr As Variant
  Dim rowX As Long
  Dim i As Long, j As Long, k As Long
  Const MaxNum = 10

  myStr = Split("A B C D E F G H I J")
  rowX = 1
  For i = 0 To MaxNum - 1
    For j = i To MaxNum - 1
      For k = j To MaxNum - 1
       ...続きを読む

Q2つのシート間での重複データのチェック

Excelについて教えてください。
以下の2つのシートがあります。

Sheet1
すずき 03-0000-0000
やまだ 03-1111-1111
たなか 03-2222-2222

Sheet2
03-1111-1111
03-4444-4444
03-0000-0000
03-2222-2222

Sheet1には名称と電話番号、Sheet2には別所から抽出した電話番号のみのデータがあります。
Sheet1のデータの中からSheet2に電話番号があるものだけを知りたいのですが、たとえばSheet1の 各行のC列 に Sheet2に一致する番号があった場合は●等付けるにはどうすればよいでしょうか。

よろしくお願いします

Aベストアンサー

シート1のC列に式を入れます。
=IF(ISNA(VLOOKUP(B1,Sheet2!A:A,1,FALSE))=TRUE,"-","●")

【式の説明】
シート1のセルB1の値が、シート2のA列に、存在する場合は●を、存在しない場合は-をセット。

QExcelでデータ全通り組み合わせ出力方法

Excelでデータ全通り組み合わせ出力方法について教えて頂けますと助かります。

セルA~Eに、数がまちまちのアイテム名が入っています。
(セルA~Eというのは例で、変則的に全てのアイテム数は増減します。)

全ての組合せをセルG~Kに各々書き出してくれる方法はあるでしょうか?
(イメージ添付あり)

できればセルに入力すれば自動的に組合せが追加されていくのが理想です。
Excel2010を使用しており、VBAは初心者です。


どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

Aベストアンサー

#1、2、cjです。#1、2、補足欄へのレスです。

取り急ぎ、コードのみ修正しました。
#2を元に書き換えています。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rSrc As Range
  Application.EnableEvents = False
  Set rSrc = Range("B2").CurrentRegion
  Application.EnableEvents = True
  If Intersect(Target, rSrc) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  Call PrintCombi(rSrc)
  Application.EnableEvents = True
End Sub

Sub PrintCombi(ByVal rSrc As Range)
  Dim tnFld As Long
  Dim nRc As Long
  Dim nConti As Long
  Dim nRow As Long
  Dim i As Long
  Dim j As Long

  tnFld = rSrc.Columns.Count
  nConti = 1
  With rSrc(1, rSrc.Columns.Count + 3)
    .CurrentRegion.Clear
    Cells(1).Resize(, tnFld).Copy .Cells(1)
    For i = tnFld To 1 Step -1
      nRc = Cells(Rows.Count, i).End(xlUp).Row
      nRow = 2
      For j = 2 To nRc
        Cells(j, i).Copy Destination:=.Cells(nRow, i).Resize(nConti)
        nRow = nRow + nConti
      Next j
      nConti = nConti * (nRc - 1)
    Next i
    With .Cells(2, 1).Resize(nConti)
      For i = 2 To tnFld
        Range(.Cells(1, i), .Cells(.Cells.Count + 1, i).End(xlUp)).Copy Destination:=.Columns(i)
      Next i
    End With
  End With
End Sub

#1、2、cjです。#1、2、補足欄へのレスです。

取り急ぎ、コードのみ修正しました。
#2を元に書き換えています。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rSrc As Range
  Application.EnableEvents = False
  Set rSrc = Range("B2").CurrentRegion
  Application.EnableEvents = True
  If Intersect(Target, rSrc) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  Call PrintCombi(rSrc)
  Application.EnableEvents = True
...続きを読む

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング