• ベストアンサー

同じ行の中で重複するデータを削除してつめる方法

   A    B    C     D      E    F 1|りんご|いちご|りんご|ぶどう|ばなな|りんご 2|すもも|ばなな| 3|りんご|りんご|びわ | 4|かき |りんご|ばなな| データが上記のように記入されている場合、 下記のように、同じ行の中で重複するデータを削除してつめる方法をご伝授ください。     A    B    C     D      E    F 1|りんご|いちご|ぶどう|ばなな|  2|すもも|ばなな| 3|りんご|びわ | 4|かき |りんご|ばなな| よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

これくらいになるとエクセル関数では複雑か、難しくなる。 エクセル関数は、表のデータの組み換えは、苦手分野です そこでVBAの出番です。 ーーー 例データ A-F列 りんご いちご りんご ぶどう ばなな りんご すもも ばなな りんご りんご びわ  かき  りんご ばなな ばなな ーーー 標準モジュールに Sub test01() d = Range("A65536").End(xlUp).Row For i = 1 To d k = 10 'K列以右に結果 r = Range("IV" & i).End(xlToLeft).Column '最右列取得 Cells(i, k) = Cells(i, 1) '第1列目は無条件にセット k = k + 1 '1列右を指す For j = 2 To r If Application.WorksheetFunction.CountIf(Range(Cells(i, "A"), Cells(i, j)), Cells(i, j)) = 1 Then Cells(i, k) = Cells(i, j) 'データを持ってくる k = k + 1 End If Next j Next i End Sub ーーー このプログラムではデータはI列までと仮定になってます。 K=10(J列)を増やせば、データが増えても良い。 少し変えれば、データより下部分や、別シートにも出せますが。 CountifはVBA関数で、重複を判定している。 ーー 結果 jーM列 りんご いちご ぶどう ばなな すもも ばなな りんご びわ  かき  りんご ばなな

raizo_999
質問者

お礼

ありがとうございました^^ このコードで無事並べ替えることができました。 If文の部分勉強になりました! これで作業もはかどります♪

その他の回答 (2)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

こんなのはどうでしょう。 1.Sheet2 のA10に以下の式を入れて横にだ~っとコピー =IF(COUNTIF(Sheet1!$A$1:A1,Sheet1!A1)=1,COLUMN(),9999) 2.Sheet2のA1に以下の式を入れて、1と同じだけ横にだ~っとコピー =IF(SMALL(10:10,COLUMN())<>9999,INDEX(Sheet1!1:1,1,SMALL(10:10,COLUMN())),"") これで1行目は重複が除かれて左詰になります。 2行目以降も同様に。

raizo_999
質問者

お礼

ありがとうございました!! データの数が少ないときはこれで試してみます^^

noname#96418
noname#96418
回答No.2

2007であれば、重複した「行」を削除する機能が使えます。 (1)データのセル範囲を選択して「コピー」 (2)適当な場所へ「形式を選択して貼り付け」ますが、その際「行列を入れ替える」にチェックを入れて行います (3)貼り付けられたデータに対して、<1列ずつ>データを選択して「データ」タブの「重複の削除」を適用します (4)重複の削除が済んだら、そのデータ範囲をコピーして、先ほどと同じ要領で行列を入れ替えて貼り付けます で、どうでしょう。

raizo_999
質問者

お礼

ありがとうございました! 残念ながら2003なのです;; 2007では便利な機能があるんですね。

関連するQ&A