エクセル関数でお聞きします。
列の中で重複数値は削除できますが、行の中の重複する数値を削除する方法はありますか。
例えば A2からS2までの行内の重複する数値を削除したいのですが・・・
また 数値が入ったA2からS15の表の中で重複する数値を削除できますか
Office2010です。よろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    お手数おかけします。
    「重複する数値」を1個だけを残して あとは削除したいのですが・・・

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/03/20 14:34

このQ&Aに関連する最新のQ&A

A 回答 (6件)

データ全体をコピーして


新しーシートに縦横入れ替え貼り付けしたら
列で削除処理できるから
も一度、戻しの縦横入れ替えすれば可能では?
    • good
    • 0

削除の意味次第ですが、



①元データを完全に消去したい。と言う意味であれば関数でどうこうできるものではありません。
 VBAについては分かりませんので、他の方の回答を参考にしてください。
②元データから重複データを除いて抽出(表示)したい。という意味であれば、
 COUNTIFによってその列より左に重複データがあるかどうか数え、
 IFにより重複データがあった場合は空白とする。なければそのまま表示する。
 という式を入れれば、重複データのみ表示を消すことができます。

A2~S15というのは、行・列関係なく、19*14個全てのセルの中に重複データがあるかどうかという意味でしょうか?
先ほどの②と同様の意味でいいのならば、
そのセルより上の行に重複データがあるかをカウントし、あった場合は空白。
なかった場合は、その行のそのセルより左にあるかをカウントし、あった場合は空白。
これも無かった場合は、そのまま表示する。
とすることで、1行目左端→右端→2行目左端→右端→…という順番で優先されて重複データを空白とできます。
1列目上端→下端→2列目上端→下端→…としたければ、最初にそのセルより左の列でカウントし、
無かった場合にその列でそのセルより上にあるかをカウントする。という順番にすれば可能です。
同様に右や下のセルを優先して残すようにもできます。
    • good
    • 0

添付図参照


Sheet2!A1: =IF(COUNTIF(Sheet1!$A1:A1,Sheet1!A1)>1,"",COLUMN(A1))
Sheet2!U1: =IFERROR(INDEX(Sheet1!$A1:$S1,SMALL($A1:$S1,COLUMN(A1))),"")
Sheet1!U1: =IFERROR(SMALL(Sheet2!$U1:$AM1,COLUMN(A1)),"")
「表または行内の重複する数値の削除」の回答画像4
    • good
    • 0

こんにちは。



要するに、データ(タブ)のデータツールの重複の削除の横版ということですよね。

横に対しては、うまくいかないようですね。
今のところ、マクロしかないような気もしますが……。汎用性をもたせましたので、できれば、個人用マクロブックで、ショートカットやQATボタンにすると便利かと思います。

'//標準モジュールに入れてください。
Sub UniquedItemLine()
 Dim Rng As Range
 Dim objDic As Object
 Dim c As Variant
 Dim vhflg As Integer
 Dim i As Long, j As Long
 i = 1
 If TypeName(Selection) <> "Range" Then Exit Sub
 Set Rng = Selection
 If Application.CountA(Rng) < 3 Then
  MsgBox "データは、2個よりも多くあるところを選択してください。", vbExclamation
  Exit Sub
 End If
 If Rng.Rows.Count = 1 And Rng.Columns.Count > 2 Then vhflg = 1
 If Rng.Rows.Count > 2 And Rng.Columns.Count = 1 Then vhflg = 2
 If vhflg = 0 Then MsgBox "どちらか1行か1列でないと働きません。", vbExclamation: Exit Sub
 Set objDic = CreateObject("Scripting.Dictionary")
 
 For Each c In Rng
  If c.Value <> "" Then
   If objDic.Exists(c.Value) Then
    j = j + 1
    Else
    objDic.Add c.Value, CStr(i)
   End If
  End If
 Next
 If MsgBox(j & "個重複を省きますが、よろしいですか?", vbOKCancel) = vbCancel Then
  Exit Sub
 End If
 Rng.ClearContents
 For i = 0 To objDic.Count - 1
  Rng.Cells(i + 1).Value = objDic.Keys()(i)
 Next
 If j > 0 Then
  MsgBox Rng.Count & "中で、" & j & "個重複を省きました。", vbInformation
 End If
End Sub
    • good
    • 0

>A2からS2までの行内の重複する数値を削除したいのですが・・・


>また 数値が入ったA2からS15の表の中で重複する数値を削除できますか

3行目から15行目に入っている数値もセル単位で重複しているということですか?(要はセルでバラバラ)
2行目だけを基準に列単位で重複列の削除では駄目ということ?
    • good
    • 0

「重複する数値の削除」の意味?


「重複する数値」と同じ数値は全て削除?
「重複する数値」だけを削除して、1個だけを残す?
そこンとこ、キッチリ!
この回答への補足あり
    • good
    • 0

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

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

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

Qエクセルの質問です。例えばA1の数値が7.0%、B2の数値がA1の数値

エクセルの質問です。例えばA1の数値が7.0%、B2の数値がA1の数値+1.3%~-3.0%のにときには○をC1に表示、その数値条件+1.3%~-3.0%以外ならC1に×を表示させたいのです。
教えて下さい。
よろしくお願いします。

Aベストアンサー

C1=IF(AND(B2-A1<=1.3%,B2-A1>=-3%),"○1","×")

QA列とB列の重複を抽出したいのですがA列とB列の値は一部だけ同じ文字です。ご教示お願いします。

エクセル初心者です。重複を見つけるのが仕事です。いろいろやってみたのですがうまくできません。
お知恵をお貸しください。

A列には企業名が入力されています。
B列にも企業名が入力されていますが全く同じ文字ではないのです。

たとえばこういうことです。
A1 (有)雪見酒      B1  雪見
A2 株式会社豪雪地帯   B2 (株)豪雪地帯
A3 ゆきかき本舗     B3 (有)ゆきかき本舗

A列にある企業名とB列にある企業名が同じであればセルを塗りつぶすか○を表示させるように
したいのです。
重複を見つけるのが目的なので、ほかの方法でもかまいません。
すみません、A列のセルとB列のセルが全く同じ名前ならば重複が見つけられたのですが
ここから先がどうしてもわからないのです。。。
申し訳ありませんがどうか教えてください。。。

Aベストアンサー

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim nameT1(maxrow1)
ReDim nameT2(maxrow2)
Range("C1:" & "D" & maxrow2).Value = ""
Call makeTable(nameT1, "A", maxrow1)
Call makeTable(nameT2, "B", maxrow2)
For row1 = 1 To maxrow1
For row2 = 1 To maxrow2
If Cells(row2, "C") = "" Then
If Mymatch(nameT1(row1), nameT2(row2)) = True Then
Cells(row2, "C").Value = "○"
Cells(row2, "D").Value = row1
End If
End If
Next
Next
t2 = Time
MsgBox ("チェック完了 処理時間=" & Minute(t2 - t1) & "分" & Second(t2 - t1) & "秒")
End Sub
'余分な文字を削除した結果をテーブルに格納する
Private Sub makeTable(ByRef nameT() As String, ByVal col As String, ByVal maxrow As Long)
Dim row As Long
Dim ary As Variant
Dim name As String
Dim i As Long
ary = Array("㈱", "(株)", "株式", "(有)", "有限", "会社")
For row = 1 To maxrow
name = Cells(row, col).Value
For i = 0 To UBound(ary)
name = Replace(name, ary(i), "")
Next
nameT(row) = name
Next
End Sub
'企業名が一致かどうか判定する
Private Function Mymatch(ByVal name1 As String, ByVal name2 As String) As Boolean
Mymatch = False
Dim pos As Variant
pos = InStr(1, name1, name2, vbTextCompare)
If pos > 0 Then Mymatch = True
End Function
-----------------------------------------------------
一致の精度が悪ければその旨補足してください。
(一致すべきものが一致しない、一致してはいけないものが一致している)
100%解決できる保証はありませんが、多少のチューニングは行います。

No4です。以下のマクロを標準モジュールへ登録してください。
--------------------------------------------------
Option Explicit
Public Sub 重複チェック()
Dim maxrow1 As Long
Dim maxrow2 As Long
Dim row1 As Long
Dim row2 As Long
Dim nameT1() As String
Dim nameT2() As String
Dim t1, t2 As Variant
t1 = Time
maxrow1 = Cells(Rows.Count, "A").End(xlUp).row '最大行取得
maxrow2 = Cells(Rows.Count, "B").End(xlUp).row '最大行取得
ReDim ...続きを読む

Q作業列なしで各行のA列とB列の数値の小さい方に、C列の数値をかけた値の和を求めたい

エクセルで、A列B列C列の1行目から100行目まで、それぞれ数値が入っているとします。
各行のA列とB列の数値の小さい方に、C列の数値をかけた値の和を求めたいです。
D列を作業列にするなら、D1に「=MIN(A1,B1)*C1」として、これをD100までコピーして、「=SUM(D1:D100)」で得られる数値を求めたいのですが、元となるデータが頻繁に追加されることも有り、作業列の追加が難しい状況です。
SUMPRODUCT関数を使おうにも、「=SUMPRODUCT(MIN(A1:A100,B1:B100),C1:C100)」では、A1からB100までの200セルのうちの最小値に、C1からC100の数値をそれぞれかけた値の和が返されてしまいます。
なにかよい方法があれば、お知恵を拝借できないでしょうか。

Aベストアンサー

こんにちは!

範囲を最初から多目にしておいてはダメですか?
SUMPRODUCT関数はどこかの列が空白の場合は「0」とみなされ合計しても結果に変化はないはずですので・・・

どうしても作業列を使用したくない場合の一例です。
表示したいセルに
=SUMPRODUCT(IF(A1:A1000<=B1:B1000,A1:A1000,B1:B1000),C1:C1000)

配列数式になりますので、Ctrl+Shift+Enterで確定!
この画面からコピー&ペーストする場合は上記数式をドラッグ&コピー! → 表示したいセルを選択 → 数式バー内に貼り付け  → そのまま(編集可能なまま)
Ctrl+Shiftキーを押しながらEnterキーで確定します。
数式の前後に{ }マークが入り配列数式になります。

※ SUMPRODUCT関数自体が配列数式になりますが、
配列数式内に配列数式を入れた感じになります。m(_ _)m

Q例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA

例えば、AさんからGさんまでがA列に縦に並んでいてB列に数字が入っています。B列にある数字の合計をA-Gさん別々に出したいんですが簡単なvbaの記述方法はないでしょうか?
お願いします。

Aベストアンサー

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A").AdvancedFilter Action:=xlFilterCopy, copytorange:=wS.Range("A1"), unique:=True
lastRow = wS.Cells(Rows.Count, "A").End(xlUp).Row
With Range(wS.Cells(2, "B"), wS.Cells(lastRow, "B"))
.Formula = "=SUMIF(Sheet1!A:A,A2,Sheet1!B:B)"
.Value = .Value
End With
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m

こんばんは!

A列のA~Gさんは複数存在しているのでしょうか?
そうであればSUMIF関数で対応できると思いますが、VBAをお望みだというコトですので
一例です。

元データはSheet1にあり、Sheet2に表示するとします。
尚、Sheet1の1行目は項目行でデータは2行目以降にあるという前提です。
標準モジュールにしてください。

Sub Sample1()
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
.Range("A:A...続きを読む

Qエクセル:A列とB列に同じ数値が合った場合に左側のA列の方を強調したい。

エクセル2000で

A1=12 A2=16 A3=24 A4=5 A5=6
B1=16 B2=23 B3=89 B4=6 B5=10

と入力されていたとします。この場合にA列とB列には16と6が共通の数として存在しています。

そこで、共通な数値が入力されているセルのうち、最も左側にある列(この例の場合はA列)を強調したいのです。関数を使う場合の数式をご存知の方がいらっしゃいましたら教えていただきたいと思います。


強調の仕方は、

1太字にする。
2セルを塗りつぶす
3文字の色を変える

などどんな手段でも結構です。

Aベストアンサー

(例データ)A1:B5
1216
1623
2489
56
610
(条件付き書式)
A1:A5を範囲指定
書式
条件付き書式
式が
=COUNTIF($B$1:$B$6,A1)>=1
書式設定(例えばセルの色を緑に)
OK
(結果)
16(A2)
6 (A5)
が緑になった。
A1:A5を範囲指定して、書式設定すると、A1をA2:A5に
コピーする必要はありません。
コピーと同じ効果になっています。


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

人気Q&Aランキング

おすすめ情報