- ベストアンサー
Excel97です
セルA1~AnにA組の生徒の名前(姓のみ)が、同様にセルB1~BmにB組の生徒の名前が入っています。以下E組まであります。それぞれの組の人数は異なります。また、各組共、同じ姓の者が入り交じって居るかも知れません。 [質問1] 各組に同姓者が居れば2名目以降は省いて、各組の中に同姓者が居ないような(見かけ上人数を減らしたような)表に作り替えたい。 [質問2] 質問1で作った表を元に、A組を基準として、B~E組にA組と同じ姓の者が居れば、その者の姓名を赤字にしたい。 [補足] ・条件付き書式で、うまく行きませんでした。 ・VLOOKUPを使うようであれば、(苦手なので)少し詳しくお願いします。 ・勝手ば言いますがよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは 以下のページがご参考になるのでは? 【エクセル技道場】 -編集-重複するレコードは無視する http://www2.odn.ne.jp/excel/waza/edit.html#SEC30 -条件付き書式-別シートにある文字列との重複チェック http://www2.odn.ne.jp/excel/waza/cformat.html#SEC21
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
関数や機能を使う方法は大変(面倒)なのでマクロを書いてみました。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入し、そのコードウインドウに下記マクロ(Public~End Subをコピーして)を貼り付けます。 シートに戻って、ツール→マクロ→マクロ でTableMake を実行します。 今はH列から表を作り出します。複数のシートがあれば、個別に実行します。ご参考に。 Public Sub TableMake() Const strSCol = "H" '作成する表を開始する列。今はH列 Dim strCol As Integer '作成する表を開始する列の番号 strCol = Asc(strSCol) - Asc("A") + 1 Dim r As Integer '行カウンタ Dim c As Integer '列カウンタ Dim rwNum(5) As Integer 'A~E列の重複無しのデータ数 Dim rwWrt As Integer '書き出す行 Columns(strSCol & ":" & Chr(Asc(strSCol) + 4)).ClearContents '書き込む列をクリア With WorksheetFunction 'A~E列から重複を除く For c = 1 To 5 r = 1: rwWrt = 0 While Cells(r, c) <> "" If .CountIf(Range(Cells(1, c), Cells(r, c)), "=" & Cells(r, c)) = 1 Then rwWrt = rwWrt + 1 Cells(rwWrt, strCol + c - 1) = Cells(r, c) End If r = r + 1 Wend rwNum(c) = r - 1 Next 'B~E列とA列を照合 Dim rgA As Range '書き換えたA列 Set rgA = Range(Cells(1, strCol), Cells(rwNum(1), strCol)) For c = strCol + 1 To strCol + 4 For r = 1 To rwNum(c - strCol) If .CountIf(rgA, "=" & Cells(r, c)) = 1 Then Cells(r, c).Font.ColorIndex = 3 'フォント=赤 Else Cells(r, c).Font.ColorIndex = xlAutomatic 'フォント=自動に戻す End If Next Next End With End Sub
お礼
ずいぶん細かくご回答頂き恐縮です。じつは#1ーkbonbさんの回答で解決しました。 マクロは数年前、覚えたばかりの頃にウィルスに感染して懲りてしまってからご無沙汰なんです。 ご回答をプリントして、また少し勉強し直してみます。 有り難うございました。
お礼
わあ~助かりました。不慣れなので少し時間がかかりましたが、質問1,2とも解決です。関数を使わずにできるとは思いませんでした。(条件付き書式の中でcountifを使いましたが・・・) それにしても便利なサイトがあるんですね。早速「お気に入り」へ登録です。 有り難うございました。