• ベストアンサー

エクセルでできるでしょうか?

お世話になります。 仮にC1からC30までのC列の範囲で、重複する数値が入力された場合、 一番上(行番号が最小の)のセルのみ残し、他は消す(空欄にする) ということはできるでしょうか? 例:C1,C2,C3にそれぞれ1、C4,C5,にそれぞれ2、C6に3が入っているき、   C1は1、C4は2、C6は3 になり C2,C3,C5は空欄にする ちなみに「入っているとき」という表現にしたのは他のところからカット&ペーストでC1:C30に貼り付けるということを念頭においているためです。 列全体を指定すれば入力規則でできるらしいのですが、あくまでC1からC30まで というように対象範囲を指定したいのです。ちなみにこの範囲は不変です。 計算式でできたらよいのですが、マクロでもいいです。 よろしくお願いします。

  • HGK
  • お礼率69% (138/199)

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

Sheet1で行う例でマクロを書いてみました。 質問にある通りに消して(消去して)います。カット&ペースト、個々のセルへの入力、どちらでも機能するはずです。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。 プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロをコピーして貼り付けます。 Excel2000です。ご参考に。 ここから ↓ Const CheckArea = "C1:C30" 'チェックする範囲 Private Sub Worksheet_Change(ByVal Target As Range)   Dim rgArea As Range '変更セルとチェックする範囲の共通部分   Dim rg As Range '単一セル   Dim Txt(30) As String 'チェックする範囲の内容(文字列で取得)   Dim rw As Integer '行カウンタ   Dim c As Integer 'チェック用行カウンタ   On Error GoTo ErrorHandler 'エラー対応   Set rgArea = Intersect(Range(CheckArea), Target)   'チェックする範囲に変更があったら   If Not rgArea Is Nothing Then     'マクロで書き換えても再度このマクロに入らないようにする     Application.EnableEvents = False     'どのセルを変更してもチェックする範囲を全て調べる     For Each rg In Range(CheckArea)       rw = rw + 1: Txt(rw) = rg.Text       '今までのセルと同じ値なら消す       For c = 1 To rw - 1         If Txt(rw) = Txt(c) Then           rg = ""           Exit For         End If       Next     Next     Application.EnableEvents = True   End If   Exit Sub ErrorHandler:   Application.EnableEvents = True 'エラー対応 End Sub

HGK
質問者

お礼

すばらしかったです。マクロの保存方法すら知らなかったので会社の人に教えてもらいながらやりましたが・・・。ありがとうございまいた。

その他の回答 (3)

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

下記は、本日他の質問に答えて、1つしか現われないキーの行を省くテクニックとして考えたものですが、解答を締めきられてしまいました。この逆ですので、後半にダブり行分を省く方法に修正したものを説明します。 ----- 私が仕事に使った方法を説明します。 第2行目以下にデータが入っているものとします。(第1行目からデータが始まるときは、第1行目にブラ ンク行を挿入してください。そうしないと下記関数式がエラーが起こるため。) 何もデータが入って無い列をX,Y列と仮定します。 A。(当初データ順序の保存のため付番)  もし順序が壊れても、復元不要なら下記1、2は省略する。  1.X2に1、X3に2を入力する。  2.X2とX3を範囲指定し、+ハンドルで、終わりの行まで引っ張り連番を振る。 B.(コード列でソート)  ソート済みのとは下記1は省略する。   1.問題にしているコードの入っている列で、ソートをする。仮にB列とする。 C.(単独行のサインをセット)  1.Y2に「=IF(B2=B1,0、IF(B2=B3,0,1))」と式を入れる。(0,1はなんでも良い)  2.+ハンドルでY3からデータ最終行まで式を複写する。Y列には0か1が入る。    同じコードで前後が続いている行は0、そうでないコードが単独の行は1が入る。   3.Y列でソートする。  4.複数行あるものは上部へ、単独行はしたに固まって集まる。  5.単独行の塊は、抹消するか無視する。 抹消していない時、当初のデータの並び順に戻すなら、X列でソートすれば良い。 ------- 上記の逆を考えます。 上記C-1の式をY2に「=IF(B2=B1,1,0)」と式を入れる。上記C-4では、Y列が0のもののみ上部に集まるので、1がセットされた行の塊(下部)は無視し0の部分を見れば良い。  

HGK
質問者

お礼

ありがとうございました。

回答No.2

とりあえずC2に次のような条件付書式を入れます。 その際に書式設定は白文字にします。 それによって字を見えなくできます。 C2の条件付書式の数式で「=(MATCH(C2,$C$1:C1,0)>0)」です。 これをC30まで書式だけコピー&ペーストしましょう これで見た目上消えた形になります。

HGK
質問者

お礼

ありがとうございました。

  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

結果をD列に作る,というのでいいのなら, d1「=c1」 d2「=if(c2=c1,"",c2)」 として,d2セルをD30までコピーすればできます. ただし,ソートされていることを前提としました.

HGK
質問者

お礼

ありがとうございます。ソートしているので問題ないです。理想の結果になりました。やっぱりC列のなかでは循環参照になって無理なんでしょうかね。

関連するQ&A

  • エクセル2000の計算式の範囲の固定

    簡単な計算式の入力(範囲指定)がしたいのでわかる方 ご教授ください。 以下のようなデータがあります。    A列 B列  1 い支店 15  2 ろ支店 6 3 は支店 80 4 に支店 112 5 ほ支店 15 6 へ支店 6 7 と支店 32 以下1400行ほど これらのデータを C列には「セルC1」から1~1400という数字を入力し D列に計算式(B2:B1400,C2)を入れました。 コピー&ペーストをするとD2は=COUNTIF(B2:B1400,C2) D3は=COUNTIF(B3:B1401,C3)、D4は=COUNTIF(B4:B1402,C4)・・・となり、 本来入れたい式D3=COUNTIF(B2:B1400,C3)、D4=COUNTIF(B2:B1400,C4)・・・とは範囲の部分が一つずつずれてしまいます。 この計算式の範囲「B2:B1400」を固定したままにすることはできないのでしょうか。 教えてください。

  • Excelのワークシート関数について

    Worksheet_Changeを()使って、自動リスト作成(入力規則)を使ったマクロを作成しております。 例えばL列のセルに値を入力すると同行のM列に自動にリストが作成されるものです。 今問題なのが、セルのコピー&ペーストで、L列のみのコピーペーストだとM列に自動リスト処理がはしるのですが、A列からL列の範囲コピーだとM列は無反応でなにも動きません。 ターゲット指定では下記のようにペーストされる範囲を指定しております。 Set Target = Intersect(Target, Worksheets("Sheet1").Range("A1:M100")) うまく動作させる方法をお願いいたします。

  • エクセル関数について

    入力したデータが重複していた際、セルの色を変えるか警告文を表示したいです。 問題なのは3回目に重複した際に表示をしたいのですが、どのような関数を使用すればよろ しいでしょうか? ちなみに範囲はA列、C列、E列…というように飛び飛びです。 このどの列に入力しても3回目の重複で警告文などが出るようにしたいのです。 分かりづらい説明で大変恐縮ですが、お分かりになりますでしょうか? よろしくお願いいたします。

  • 【エクセル】データの重複チェック

    次のようなデータが入力されているとします。 A列/B列/C列/D列/E列/F列 1行:都道府県/市区町村/data1/check1/data2/check2 2行:東京/新宿/1/""/1/"" 3行:東京/新宿/2/""/2/"重複" 4行:東京/新宿/3/""/3/"" 5行:東京/渋谷/1/重複/4/"" 6行:東京/渋谷/2/""/5/"" 7行:東京/渋谷/3/""/6/"" 8行:東京/渋谷/4/""/2/"重複" 9行:東京/渋谷/1/重複/7/"" ここで、check1は、 「都道府県」のグループでdata1に重複があれば、「重複」表示をさせます。 また、check2は、 「市区町村」のグループでdata2に重複があれば、「重複」表示をさせます。 例えば、 セルD2=IF(COUNTIF($C$2:$C$4,$C$2:$C$4)>1,"重複","") セルF2=IF(COUNTIF($E$2:$E$9,$E$2:$E$9)>1,"重複","") というように関数を入力して、2行目以下にコピペすればいいのですが、 実際は1万行以上のデータがあり、「都道府県」「市区町村」も多くのグループがあるため いちいち範囲を指定するのも大変です。 そこで、上記関数のように手動で範囲を指定しなくても、 自動で範囲指定をして重複チェックができる良い方法があれば教えてください。 できれば関数がいいのですが、VBAでも構いません。 ご教授のほど、よろしくお願いします。

  • 入力規則の重複を重複しない方法

    教えてください。エクセルの入力規則で、リストで範囲指定をしたときに、例えば、範囲指定のなかで、「A」が三つあて「B」が2つあって「C]が一つあるとき、入力規則のリストで範囲指定すると、A,A,A,B,B,B,Cとでてきますが、それを、重複しているリストは、A,B,Cみたいに選択することはできますか?

  • エクセル

    A B C D E F G 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Intersect(Target, Range("A1:A14,C2:E2,G2、C4:E4 :")) Is Nothing Then Exit Sub Else UHOME..Show 皆さんにお聞きしてVBAを勉強してます 上のセルの範囲をひとつづつ入力する方法は理解できましたが 範囲を指定する項目が多すぎるとエラ-が出るみたいです。 union とか使うとかしらべてみるのでがうまくいきません 主にある列を指定したり1列おきに複数列を指定したり いろいろ指定する場合にいい方法があれば教えてください

  • エクセル マクロ 選択範囲を含む行の特定列を選択し、決まった値を入力させたいです。

    みなさんいつもありがとうございます。 ある範囲を選択しているときに、その選択範囲を含む行の、 特定の列全てに決まった文字列を入力させたいです。 【例】 (1)の範囲を選択している時に実行すると (2)のセル全てに『ABC』と入力  (下の場合は文字列を入力させたいのがC列)  (1)        (2) A2:A4  ⇒  C2:C4 A2:B4  ⇒  C2:C4 B5:E10  ⇒  C5:C10 よろしくお願いいたします。

  • 【エクセル2010】表全体文字列の重複

    エクセル2010について教えて頂きたいのですが..... 【例】     A      B      C   1 あああ   ああ     ううううう 2 いいいい  ううう    かか 3 ううう    あああ   いい 4 ええ    いいい    ああああ 5 あああ   ううう     おおお と入力した場合 A行【A1】【A5】とB行【B3】が 同内容にて重複しますが この場合 [あああ]にて検索する以外 重複を見つける方法が無いのでしょうか? (つまり重複そのものを見つける機能です。) また、他の方法がある場合、 その方法では【C4】ああああ を重複として拾いますか、拾いませんか。 ちなみに実際の表は列が10、行が100ぐらいあります。 いくつかの表で同様に調べなければなりません。 マクロはよくわかりません。よろしくお願いします。

  • エクセルのマクロの手直し

    お世話になります。 以下はエクセルの入力規則(リスト)をマクロに記録したものです。(マクロ名はリスト) 下の例では、C列の33~44行にリストの項目が入力されています。 この $C$33:$C$44 の範囲を、C33~C列のうちデータが入力されている一番最後の行(行番号が最大) までとするにはどうすればいいのでしょうか。(先頭のC33は不変) ちなみにこのリストは数字だけでなく文字も含めて考えます。 いったん一番下の行番号を、影響のない他のセルに表示させてから、マクロに記録しても可。 Excel2000です。 よろしくお願いします。 Sub リスト() ' ' リスト Macro ' マクロ記録日 : 2002/7/23 ユーザー名 : ' ' Range("D51:D70").Select ActiveWindow.SmallScroll Down:=-9 With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$C$33:$C$44" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Range("C45").Select End Sub

  • エクセルのコピーについて

    エクセルのコピーについて  A   B   C  ・・・      G 空欄  空欄  空欄      空欄 文字列 文字列 文字列   文字列   空欄  空欄  空欄      文字列   文字列 文字列 文字列   文字列 空欄  空欄  空欄      =A2&B2  ・   ・   ・          文字列    ・   ・   ・          =C2  ・   ・   ・          文字列 とある時、G1~G8までを下へいくつかコピーしていきたいんですが、コピーした時、G4,G6の式が2つずつずれて=A4&B4,=C4とすることはできないでしょうか? このままコピーすると文字列が入っている分、ずれてしまいます。 わかりにくいかもしれませんが、何か方法があればよろしくお願いします。                

専門家に質問してみよう