Note: The other languages of the website are Google-translated. Back to English

Excelの複数の列から一意の値を抽出するにはどうすればよいですか?

複数の値を持つ複数の列があるとすると、いくつかの値が同じ列または異なる列で繰り返されます。 そして今、あなたはどちらかの列に一度だけ存在する値を見つけたいと思います。 Excelの複数の列から一意の値を抽出するための簡単なトリックはありますか?


配列数式を使用して複数の列から一意の値を抽出します

これは配列数式です。複数の列から一意の値を抽出するのにも役立ちます。

1。 範囲内の値を想定 A2:C9、セルE2に次の数式を入力してください。

=INDIRECT(TEXT(MIN(IF(($A$2:$C$9<>"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&""

注意:上記の式では、 A2:C9 一意の値を抽出するセルの範囲を示します。 E1:E1 結果を配置する列の最初のセルです。 $ 2:$ 9 行の前後に、使用するセルが含まれ、 $ A:$ C 使用するセルが列に含まれていることを示します。 自分のものに変えてください。

2。 次に、 Shift + Ctrl + Enter キーを合わせてから、塗りつぶしハンドルをドラッグして、空白のセルが表示されるまで一意の値を抽出します。 スクリーンショットを参照してください:


ピボットテーブルを使用して複数の列から一意の値を抽出する

ピボットテーブルに精通している場合は、次の手順で複数の列から一意の値を簡単に抽出できます。

1。 最初に、データの左側に新しい空白の列をXNUMXつ挿入してください。この例では、元のデータの横に列Aを挿入します。

2。 データ内のXNUMXつのセルをクリックして、を押します Alt + D キーを押してから、 P すぐにキーを押して開きます ピボットテーブルとピボットグラフウィザード、選択する 複数の統合範囲 ウィザードのステップ1で、スクリーンショットを参照してください。

3。 次に、をクリックします 次へ ボタン、チェック 私のために単一ページのフィールドを作成する ウィザードstep2のオプション。スクリーンショットを参照してください。

4。 クリックしてください 次へ ボタンをクリックして、セルの左側の新しい列を含むデータ範囲を選択し、をクリックします。 追加 データ範囲をに追加するボタン すべての範囲 リストボックス、スクリーンショットを参照:

5。 データ範囲を選択した後、クリックを続けます 次へ、ウィザードの手順3で、ピボットテーブルレポートを配置する場所を好きなように選択します。

6. 最後に、 終了 ウィザードを完了し、現在のワークシートにピボットテーブルが作成されている場合は、からすべてのフィールドのチェックを外します。 レポートに追加するフィールドを選択します セクション、スクリーンショットを参照してください:

7. 次に、フィールドを確認します または値をにドラッグします ラベル、これで次のように複数の列から一意の値を取得します。


VBAコードを使用して複数の列から一意の値を抽出する

次のVBAコードを使用して、複数の列から一意の値を抽出することもできます。

1。 を押し続けます Alt + F11 キー、そしてそれは開きます Microsoft Visual Basic forApplicationsウィンドウ.

2に設定します。 OK をクリックします。 インセット > モジュール、モジュールウィンドウに次のコードを貼り付けます。

VBA:複数の列から一意の値を抽出します

Sub Uniquedata()
'Updateby Extendoffice
Dim rng As Range
Dim InputRng As Range, OutRng As Range
Set dt = CreateObject("Scripting.Dictionary")
xTitleId = "KutoolsforExcel"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address, Type:=8)
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8)
For Each rng In InputRng
    If rng.Value <> "" Then
        dt(rng.Value) = ""
    End If
Next
OutRng.Range("A1").Resize(dt.Count) = Application.WorksheetFunction.Transpose(dt.Keys)
End Sub

3。 次に、 F5 このコードを実行すると、使用するデータ範囲を選択するように促すプロンプトボックスが表示されます。 スクリーンショットを参照してください:

4。 そして、 OK、結果を配置する場所を選択するための別のプロンプトボックスが表示されます。スクリーンショットを参照してください。

5. 【送信】ボタンをクリックします。販売者は原則としてXNUMX日以内に回答を返信します。XNUMX日を過ぎても回答がない場合は、Artisanaryまでお問い合わせください。 OK このダイアログを閉じると、すべての一意の値が一度に抽出されます。


驚くべき機能を備えた単一の列から一意の値を抽出します

場合によっては、単一の列から一意の値を抽出する必要があります。上記の方法では役に立ちません。ここでは、便利なツールをお勧めします-Kutools for Excelそのと 一意の値を持つセルを抽出します(最初の重複を含む) ユーティリティを使用すると、一意の値をすばやく抽出できます。

注意:これを適用する 一意の値を持つセルを抽出します(最初の重複を含む)、まず、ダウンロードする必要があります Kutools for Excel、次に機能をすばやく簡単に適用します。

インストールした後 Kutools for Excel、次のようにしてください。

1。 結果を出力するセルをクリックします。 ((注意:最初の行のセルをクリックしないでください。)

2。 次に、をクリックします クツール > フォーミュラヘルパー > フォーミュラヘルパー、スクリーンショットを参照してください:

3。 の中に 数式ヘルパー ダイアログボックスで、次の操作を行ってください。

  • 次の項目を選択します。: テキスト オプションから  種類 ドロップダウンリスト;
  • それから、 一意の値を持つセルを抽出します(最初の重複を含む) から fromulaを選択してください リストボックス;
  • 右にあります 引数入力 セクションで、一意の値を抽出するセルのリストを選択します。

4。 次に、をクリックします Ok ボタンをクリックし、空白のセルが表示されるまで、すべての一意の値を一覧表示するセルに塗りつぶしハンドルをドラッグします。スクリーンショットを参照してください。

今すぐExcel用のKutoolsを無料でダウンロードしてください!


より相対的な記事:

  • リストから一意で異なる値の数を数える
  • 重複するアイテムを含む値の長いリストがあるとします。次に、一意の値(リストに1回だけ表示される値)または個別の値(リスト内のすべての異なる値、つまり一意を意味する)の数をカウントします左のスクリーンショットが示すように、列内の値+ XNUMX番目の重複値)。 この記事では、Excelでこのジョブを処理する方法について説明します。
  • Excelの基準に基づいて一意の値を抽出する
  • 次のスクリーンショットのような結果を得るために、列Aの特定の基準に基づいて列Bの一意の名前のみを一覧表示する次のデータ範囲があるとします。 Excelでこのタスクをすばやく簡単に処理するにはどうすればよいですか?
  • Excelで一意の値のみを許可する
  • ワークシートの列に入力する一意の値のみを保持し、重複を防ぎたい場合、この記事では、このタスクを処理するための簡単なトリックをいくつか紹介します。
  • Excelの基準に基づいて一意の値を合計する
  • たとえば、次のスクリーンショットに示すように、[名前]列に基づいて[注文]列の一意の値のみを合計するために、[名前]列と[注文]列を含むデータの範囲があります。 このタスクをExcelですばやく簡単に解決するにはどうすればよいですか?

最高のオフィス生産性ツール

Kutools for Excelはほとんどの問題を解決し、生産性を80%向上させます

  • 再利用: すばやく挿入 複雑な数式、チャート および以前に使用したものすべて。 セルを暗号化する パスワード付き。 メーリングリストを作成する そしてメールを送る...
  • スーパーフォーミュラバー (複数行のテキストと数式を簡単に編集できます); 読書レイアウト (多数のセルを簡単に読み取って編集する); フィルター範囲に貼り付け...
  • セル/行/列をマージする データを失うことなく; 分割セルコンテンツ; 重複する行/列を組み合わせる...重複セルを防止します。 範囲を比較する...
  • [複製]または[一意]を選択します 行; 空白行を選択 (すべてのセルは空です); スーパーファインドとファジーファインド 多くのワークブックで; ランダム選択...
  • 正確なコピー 数式参照を変更せずに複数のセル。 参照の自動作成 複数のシートに; 箇条書きを挿入、チェックボックスなど...
  • テキストを抽出、テキストの追加、位置による削除、 スペースを削除する; ページング小計の作成と印刷。 セルの内容とコメントを変換する...
  • スーパーフィルター (フィルタースキームを保存して他のシートに適用します); 高度な並べ替え 月/週/日、頻度など。 特殊フィルター 太字、斜体...
  • ワークブックとワークシートを組み合わせる; キー列に基づいてテーブルをマージします。 データを複数のシートに分割; xls、xlsx、PDFをバッチ変換...
  • 300 以上の強力な機能. Office / Excel 2007-2021 および 365 をサポートします。すべての言語をサポートします。 企業や組織に簡単に導入できます。 フル機能の 30 日間無料トライアル。 60日間の返金保証。
kteタブ201905

Officeタブは、タブ付きのインターフェイスをOfficeにもたらし、作​​業をはるかに簡単にします

  • Word、Excel、PowerPointでタブ付きの編集と読み取りを有効にする、パブリッシャー、アクセス、Visioおよびプロジェクト。
  • 新しいウィンドウではなく、同じウィンドウの新しいタブで複数のドキュメントを開いて作成します。
  • 生産性を 50% 向上させ、毎日何百回もマウス クリックを減らすことができます!
officetab下部
コメントを並べ替える
コメント (31)
5の5を評価 · 1の評価
このコメントは、サイトのモデレーターによって最小化されました
Is this formula complete? =INDIRECT(TEXT(MIN(IF(($A$2:$C$9"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&"",
このコメントは、サイトのモデレーターによって最小化されました
これはまだ修正されていません:sad:
このコメントは、サイトのモデレーターによって最小化されました
なんて時間の無駄.....数式が機能しない
このコメントは、サイトのモデレーターによって最小化されました
ありがとうございました!!! 私はこれを実行し、ピボットウィザードに何が起こったのかを理解するために何時間も費やしてきました(他の記事)。
このコメントは、サイトのモデレーターによって最小化されました
私はあなたのVBAコードを使用していますが、ボックスがポップアップすることを望んでいません。 代わりに、毎回使用するセル範囲と出力を入れるボックスを正確に定義したいと思います。入力範囲と出力はXNUMXつの異なるシートになります。 VBAを更新するにはどうすればよいですか? ありがとうございました!!
このコメントは、サイトのモデレーターによって最小化されました
おい! この数式が行87の後にエラーを引き起こすように見える理由を誰かが知っていますか? 同様に、それは完全に機能し、ある時点ですべての行に対してエラーを返すだけです。これは最悪です。 私はここで必要なものにとても近いので...
このコメントは、サイトのモデレーターによって最小化されました
=INDIRECT(TEXT(MIN(IF(($A$2:$C$9"")*(COUNTIF($E$1:E1,$A$2:$C$9)=0),ROW($2:$9)*100+COLUMN($A:$C),7^8)),"R0C00"),)&"" It doesn't work
このコメントは、サイトのモデレーターによって最小化されました
こんにちは私はそれを別の列と比較するときに最初の列から一意のセルを抽出したい(私はXNUMXつの等しくない列を持っています)、どうすればそれを行うことができますか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちは私はXNUMXつの等しくない列を持っていて、最初の列の一意のセルを抽出したいと思います。 どうすればいいですか? 前もって感謝します
このコメントは、サイトのモデレーターによって最小化されました
わたしは愛しています

ピボットテーブルを使用して複数の列から一意の値を抽出する
このコメントは、サイトのモデレーターによって最小化されました
正しい数式を送信してください...VBA関数は正常に機能します。
私のプロジェクトのためだけに、私はむしろ正しい式を使用します。


感謝
このコメントは、サイトのモデレーターによって最小化されました
出力について、3行ではなく複数行にする方法を知っている人はいますか? (現在、worksheetfunction.transposeによって3行の結果が達成されますが、(結果として)達成したいのは、XNUMX列を選択すると、返される結果もXNUMX列ではなくXNUMX列になることです。
このコメントは、サイトのモデレーターによって最小化されました
この配列式は正しいです。 列AからCのデータ、セルD2の最初の結果の数式...これは他の配列数式とは異なり、後で数式をコピーしてCtrl + Shift+Enterですべての数式を入力します。 ただし、この配列数式は、最初のセルでCtrl + Shift + Enterを実行し、コピーダウンする必要があります。
このコメントは、サイトのモデレーターによって最小化されました
Muchas gracias por la macro !!! me fue muy util
このコメントは、サイトのモデレーターによって最小化されました
シートを調整しましたが、定義された配列の最初の値のみを返しています...何が欠けていますか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、コーディ、
上記の式は私のワークシートでうまく機能しますが、ここでデータの問題のスクリーンショットを提供できますか?
ありがとうございました!
このコメントは、サイトのモデレーターによって最小化されました
フォーミュラバージョンについて、この部分が何をしているのか、もう少し詳しく説明していただけますか? *100+COLUMN($A:$C),7^8)),"R0C00") 具体的には、 * 100, 7 ^ 8, 「R0C000」 やってる? 私は他のすべてを理解していますが、これらが何のためにあるのか理解できません。
このコメントは、サイトのモデレーターによって最小化されました
こちらからの返信が遅くなりましたが...
ROW($2:$9)*100 - これは行番号 *100 を乗算しているため、行 5 にある場合、数値は 500 になります。
COLUMN($A:$C) - これは行 * 100 の数値に追加されるため、行 5 列 2 の場合、数値は 502 になります。
7^8))、 - これは (私が思うに) 以前の min ステートメントの最大値を持つことです。
"R0C00") - 数値に基づいてテキストをフォーマットします。 この例では、502 だったので、R5C02 (行 5、列 02) が得られます。

列が多くて行が少ない場合は、ROW($2:$9)* に変更できます。1000+COLUMN($A:$C),7^8)),"R0C000")
このコメントは、サイトのモデレーターによって最小化されました
コードをありがとう。 このページのVBAコードを使用しています。 一意の値が抽出された後に並べ替えコードを追加して、自動的に並べ替える方法はありますか?
このコメントは、サイトのモデレーターによって最小化されました
マクロの代わりにuniqdata関数を作成できますか?
このコメントは、サイトのモデレーターによって最小化されました
こんにちは、イルハン、この問題を解決するための数式を作成するユーザー定義関数が必要な場合は、次のコードが役立ちます。コードを挿入した後、結果を配置するセルのリストを選択します。 次に、次の式を入力します。=一意(A1:C4)  数式バーでを押します。 Ctrlキー+ Shiftキー+ Enterキー 一緒にキー。 


Function Uniques(ByVal inputRange As Range)
Dim inputArray As Variant
Dim myColl As New Collection
Dim xVal As Variant
Dim outArray() As Variant
On Error Resume Next
With inputRange
inputArray = Application.Intersect(.Cells, .Parent.UsedRange).Value
End With
On Error GoTo 0
On Error Resume Next
For Each xVal In inputArray
myColl.*** Item:=xVal, Key:=(CStr(xVal) & TypeName(xVal))
Next xVal
myColl.Remove "String"
On Error GoTo 0
ReDim outArray(1 To Application.Max(myColl.Count, Application.Caller.Cells.Count))
For xVal = 1 To UBound(outArray)
outArray(xVal) = vbNullString
Next xVal
For xVal = 1 To Application.Min(myColl.Count, Application.Caller.Cells.Count)
outArray(xVal) = myColl(xVal)
Next xVal
If Application.Caller.Columns.Count = 1 Then
Uniques = Application.Transpose(outArray)
Else
Uniques = outArray
End If
End Function
このコメントは、サイトのモデレーターによって最小化されました
Czy tożart?
このコメントは、サイトのモデレーターによって最小化されました
上部の配列数式は、同じシートのデータで使用するとうまく機能しますが、別のシートの同じ正確なデータを参照するために使用しようとすると、数式は何も返しません。 理由がわかりません。 別のシートの範囲を参照できないようにする配列関数に制限はありますか?

あなたが提供できる洞察に感謝します。
このコメントは、サイトのモデレーターによって最小化されました
こんにちはエリン、

喜んでお手伝いします。 この式のINDIRECT関数は、他のワークシートのデータを参照するときに使用するのがより複雑です。 異なるワークシートの範囲を参照するときにこの機能を使用することはお勧めしません。

例:データがSheet1にあるので、Sheet2のSheet1のセルC2の内容を参照します。 まず、D2とD1などのSheet2の任意の1つのセルに、それぞれSheet2とC2と入力します。 この時点で、SheetXNUMXの空のセルに数式を入力します。
= INDIRECT( "'"&D1& "'!"&D2)の場合、Sheet2のセルC1の内容を返すことができます。

ご覧のとおり、これにより事態はさらに複雑になります。 私の説明がお役に立てば幸いです。 良い1日を。

敬具
マンディ
このコメントは、サイトのモデレーターによって最小化されました
こんにちはサー! VBAは驚異的に機能しました。ありがとうございました。 元のデータを変更した場合、一意の値で列を自動的に更新することはできますか?
5の5を評価
このコメントは、サイトのモデレーターによって最小化されました
こんにちはイオアニス、

喜んでお手伝いします。 元のデータを変更した後、VBAは結果を自動的に更新できません。 そして、私が考えることができる最も簡単な方法は、Ctrl + Alt + F9を押して、開いているすべてのブックのワークシートのすべての結果を更新することです。 良い1日を。

敬具
マンディ
このコメントは、サイトのモデレーターによって最小化されました
この素晴らしい記事をありがとう。

をご利用中の方へ 英語以外の Excel の配列数式 テキスト形式の文字列には特別な注意を払う必要があります。例では「R0C00」です。
ドイツ語の場合、これは「Z0S00」に変換されます。 ただし、「S」は、時刻の書式設定で秒を表す特殊文字です。 この文字はエスケープする必要があるため、ドイツ語 Excel の正しい書式文字列は "Z0\S00" です。

これが将来誰かに役立つことを願っています:-)
ここにはまだコメントが投稿されていません
もっと読む
あなたのコメントを残す
ゲストとして投稿
×
この投稿を評価:
0   文字
推奨される場所

フォローする

著作権©の2009 - WWW。extendoffice.com。 | | 全著作権所有。 搭載 ExtendOffice。 | サイトマップ
MicrosoftおよびOfficeのロゴは、米国MicrosoftCorporationの米国およびその他の国における商標または登録商標です。
SectigoSSLで保護