これからの季節に親子でハイキング! >>

エクセルのリストのプルダウン内に重複する数字がある場合はひとつだけ表示するようにしたいです。

たとえば、

A列
1000
1000
1000
1000
1001
1001
1005
1008 とある場合

プルダウンを押すと、1000、1001、1005、1008が表示されるようにしたいです。

すいませんが、誰か知恵をお貸しいただけないでしょうか?

宜しく御願いいたします。

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

A 回答 (1件)

数値なので


C1セルに
=MIN(A:A)
C2セルに
=IF(OR(C1="",C1=MAX(A:A)),"",SMALL(A:A,1+COUNTIF(A:A,"<="&C1)))
下へオートフィル

[Ctrl]+[F3]名前の定義
名前 : 桜
参照範囲:
=$C$1:INDEX($C:$C,COUNT($C:$C))

上記を入力規則のリストで =桜
    • good
    • 2
この回答へのお礼

CoalTar 様

回答いただきましてありがとうございます。

ばっちりでした!!

2回も助けていただいて本当にありがとうございます!!

お礼日時:2016/05/11 18:34

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

Q別シートデータからの重複のない入力規則リスト作成

エクセルで、入力規則のリスト作成に関してご教示ください。
別シートにて、以下のようにC列にデータがあります。
データ数は可変です。

A列 B列 C列
No 種別 データ
1 A データA
2 A データA
3 A データA
4 A データB
5 C データC
6 A データB
7 C データB
    :
    :

上記データを使用して、入力規則で、リスト作成をしたいのです。

=OFFSET(シートA!$A$2,0,0,COUNTA(シートA!$A:$A)-1,1)
上記式を名前定義して、リストに設定した場合には、重複したリスト表示が
されてしまします。

名前定義を使ってどう設定すれば、重複をしないリストづくり可能でしょうか。

Aベストアンサー

>別途重複のないリストを作ること(セル上に新たに表を作成)「なし」でリストを作りたい(入力規則に設定したい)

という事は、回答No.2様の方法の様な別シートに重複のないリストを作る方法も駄目だという事でしょうか?
(因みに、別シートにリストを作っても良いのでしたら、マクロなど使わずとも、回答No.1の方法で重複の無いリストを作ってから、E列~G列の全体を切り取り、別シートの適当な列の所に、[切り取ったセルの挿入]で挿入するだけで事足ります)
 もし、別途にリストを作る事が一切駄目だと仰るのでしたら、マクロを使うより他に方法は無い様に思います。

 以下は、別途にリストを作成する事無く、重複の無い入力規則のドロップダウンリストを設定するVBAのマクロの一例です。
 但し、御質問文には、「どのセルに入力規則を設定すれば良いのか」という事に関する情報が御座いませんでしたので、取り敢えずとして、入力規則を設定するセルがどのセルであるのかを、毎回訊いて来る様なマクロとしております。
 それから、シートAのC列のデータが変更されて、入力規則のドロップダウンリストに表示すべき内容が変わった場合であっても、マクロを再起動させない間は、シートAのC列の最新の状態がドロップダウンリストに反映される事はありませんから、シートAのC列のデータを変更する度に、マクロを再起動させる必要があります。(入力規則を設定すべきセルがどのセルであるのか不明なため、仕方がありません)


Sub 重複の無いドロップダウンリスト()

Dim c As Range
Dim a As Variant
Dim LR As Long
Dim l As String

LR = Application.Evaluate("=MAX(IF(COUNT(シートA!C:C),MATCH(9E+307,シートA!C:C ),0),IF(COUNTIF(シートA!C:C,""*?""),MATCH(""*?"",シートA!C:C,-1),0))")
If LR <= Range("C1").Row Then Exit Sub
Cells(2, Rows.Columns.Count).Value = Sheets("シートA").Range("C2").Value
Cells(3, Rows.Columns.Count).Resize(LR - Sheets("シートA").Range("C2").Row).FormulaR1C1 = _
"=R[-1]C&IF(OR(シートA!RC3="""",COUNTIF(シートA!R2C3:R[-1]C3,シートA!RC3)),"""","",""&シートA!RC3)"
l = Cells(LR, Rows.Columns.Count).Value
Columns(Rows.Columns.Count).Clear
On Error GoTo label1
label2:
Set c = Application.InputBox(Title:="入力規則の設定対象", prompt:="入力規則を設定するセル或いはセル範囲を選択して下さい。" & Chr(10) & "  (複数選択可)", Default:=Selection.Address(ReferenceStyle:=xlA1), Type:=8)
c.Select
a = MsgBox("以下のセル" & Chr(10) & Chr(10) & c.Address(ColumnAbsolute:=False, RowAbsolute:=False, ReferenceStyle:=xlA1) & Chr(10) & Chr(10) & "に対して入力規則を設定します。" & Chr(10) & "宜しいですか?" & Chr(10) & Chr(10) & "[はい]⇒入力規則の設定を実行" & Chr(10) & "[いいえ]⇒入力規則を設定するセルの選択をやり直し" & Chr(10) & "[キャンセル]⇒マクロの終了", vbYesNoCancel)
Select Case a
Case Is = 2
GoTo label1
Case Is = 7
GoTo label2
Case Is <> 6
GoTo label1
End Select
With c.Validation
.Delete
.Add Type:=xlValidateList, Formula1:=l
End With

label1:
End Sub

>別途重複のないリストを作ること(セル上に新たに表を作成)「なし」でリストを作りたい(入力規則に設定したい)

という事は、回答No.2様の方法の様な別シートに重複のないリストを作る方法も駄目だという事でしょうか?
(因みに、別シートにリストを作っても良いのでしたら、マクロなど使わずとも、回答No.1の方法で重複の無いリストを作ってから、E列~G列の全体を切り取り、別シートの適当な列の所に、[切り取ったセルの挿入]で挿入するだけで事足ります)
 もし、別途にリストを作る事が一切駄目だと仰る...続きを読む

Qエクセル、ドロップダウンリストで空白セルを非表示

エクセル2013です。

Sheet1にドロップダウンリストを作成し、Sheet2のC列を参照したいです。
Sheet2のC列は日々入力され行数が増えていくのでリストの範囲を多めにしたいです。

入力規則
リスト-元の値
=Sheet2!$C$3:$C$20000

にしましたが
Sheet2のC列はまだ1,000行くらいしか入力されていない為
ドロップダウンリストでリストを表示すると
リスト内にて空白の部分の方が多く、検索が大変です。

NETで調べて

入力規則
リスト-元の値
=OFFSET(Sheet2!$C$3,0,0,SUMPRODUCT((Sheet2!$C$3:$C$20000<>"")*1))

としたのですが
ドロップダウンリストには
Sheet2のC列のセルC863までしか表示がされません。
Sheet2のC列はC1003まで値が有ります。

この関数のどこがわるいのでしょうか?
よろしくお願いします。

Aベストアンサー

参考までに

データのある最終行を検索する数式で設定したいなら、以下のような名前定義を使用します。
(元データがA1セル以下にある場合)

=$A$1:INDEX($A$1:$A$20000,MAX(($A$1:$A$20000<>"")*ROW($A$1:$A$20000)))

Qプルダウンで選択すると隣のセルに自動で入力される方法

プルダウンで選択すると隣のセルに自動で入力される方法
エクセル2003でシート1に「会社名」と「住所」を一覧を作成。シート2でプルダウンで「会社名」を選択すると隣のセルに自動で「住所」が出るようにしたいのですが、何か良い方法(関数)はありますか。教えてください。宜しくお願いいたします。

Aベストアンサー

プルダウンで確定した値を使ってVLOOKUPで検索したら。

例えば、Sheet1のA1~B10に会社名と住所の一覧があって、
Sheet2のA1でプルダウンで会社名を選択した場合、
B2を
=VLOOKUP(A1,Sheet1!A1:B10,2,FALSE)
とすれば、会社名に対応した住所が表示されます。

QExcel 入力規則_リスト 連続しないデータの空白行削除

お世話になります。
Excel2003を使用しています。
あるブックのSheet1に"リストデータ"と名前のついている範囲があります。
Sheet2の任意のセルで、リストデータを基に入力規則から
リスト選択をさせています。
このリストデータにはユーザが任意でデータを入力するのですが
必ずしも連続するデータにはならず
データの途中に空白セルが生じたり
データの最下行が人によって異なってしまいます。
そこで、不要な空白を削除したいのですが
VBAを使わない方法で何かいいアイディアはありますでしょうか。
皆様のお知恵を拝借いたしたく、よろしくお願いいたします。

Aベストアンサー

No.2です。補足拝見しました。

> Sheet2の空いている列(たとえばB列)を作業列として使います。
失礼しました。この記述がSheet1の誤りでした。名前を定義する数式の方は質問文に書いたとおりです。

> 名前を定義し、入力規則のリストを設定する際
> "数式はエラーと判断されます。続けますか?"
> のメッセージが出てしまいます、どうしたらよいでしょうか。

あれ、おかしいですね。エラーになってしまいましたか。
そのままコピーして貼り付ければ、私の環境ではエラーにはならないのですが…。

いろいろパターンを変えて試してみたのですが、こちらではそのようなエラーが出ないので、ちょっと原因がわかりません。もう一度コピーした数式を見直していただけますでしょうか?数式の入力中に矢印キーなどを使うと、カーソルが移動せずに移動先のセル番地が入力されてしまい、数式が狂ってしまいますが、そのようなことはないでしょうか。

どうしてもエラーが出るようでしたら、名前「リストデータ」の定義は
=Sheet1!$B:$B
だけでも空白を削除したリストを利用できます。ただし、リストの一番下の項目の下に空白行がたくさんついてきてしまいますが…。

No.2です。補足拝見しました。

> Sheet2の空いている列(たとえばB列)を作業列として使います。
失礼しました。この記述がSheet1の誤りでした。名前を定義する数式の方は質問文に書いたとおりです。

> 名前を定義し、入力規則のリストを設定する際
> "数式はエラーと判断されます。続けますか?"
> のメッセージが出てしまいます、どうしたらよいでしょうか。

あれ、おかしいですね。エラーになってしまいましたか。
そのままコピーして貼り付ければ、私の環境ではエラーにはならないのですが…。
...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

Qドロップダウンリストで空白の数式セルの非表示化方法

以下の数式を入力したセルを参照して、氏名をドロップダウンリストから選べるようにしたいと考えております。しかし、下記の方法ですと、空白のセル(参照セルに値が無かった場合に空白""が返されたセル)が空白のままドロップダウンリストに表示されてしまい、目的の氏名をリストから探す時に手間がかかってしまいます。

<想定しているシート>

   A       B       C        D
1                          

3 氏名     物品     帳票氏名  重複判定
4 A川B男   ○○     A川B男     1
5 A川B男   ××                0
6 C田D夫   ▽      C田D夫      1
7 C田D夫   ◆                 0
5 C田D夫   □                 0

※C4の入力数式: =if(D4=1,A4,"")
※C1セルの入力規則の元の値に =offset(C4,0,0,counta(C4:C1000),1)

上記の方法でも、C1セルのドロップダウンリストには空白を伴って氏名が表示される形となってしまいます。

このように、数式が入力された結果空白になっているセルを、ドロップダウンリストで非表示にする方法はないでしょうか?

どうぞよろしくお願い申し上げます。

以下の数式を入力したセルを参照して、氏名をドロップダウンリストから選べるようにしたいと考えております。しかし、下記の方法ですと、空白のセル(参照セルに値が無かった場合に空白""が返されたセル)が空白のままドロップダウンリストに表示されてしまい、目的の氏名をリストから探す時に手間がかかってしまいます。

<想定しているシート>

   A       B       C        D
1                          

3 氏名     物品     帳票...続きを読む

Aベストアンサー

>このように、数式が入力された結果空白になっているセルを、ドロップダウンリストで非表示にする方法はないでしょうか?
D列の重複判定の数式を以下のように変更して、C列の帳票氏名の数式も変更すると空白行を詰めることができます。
D4=IF(COUNTIF(A$3:A4,A4)=1,ROW(),"")
 最初に登場した氏名のときに行番号をセットする。
 2回目以降は""をセットする。
D4セルを必要数下へコピーします。
C4=IFERROR(INDEX(A:A,SMALL(D$4:D$8,ROWS(A$4:A4))),"")
 行番号の小さい順に氏名をセットする。
C4セルを必要数下へコピーします。
IFERROR関数はExcel 2007以降のバージョンに組み込まれています。
Excel 2003以前の場合は次の数式で対処してください。
C4=IF(ROWS(A$4:A4)<=COUNT(D$4:D$8),INDEX(A:A,SMALL(D$4:D$8,ROWS(A$4:A4))),"")

貼付画像はExcel 2013で検証した結果です。
提示された模擬データの範囲だけで処理していますので、実際のデータに合わせて対象範囲を変更してください。

>このように、数式が入力された結果空白になっているセルを、ドロップダウンリストで非表示にする方法はないでしょうか?
D列の重複判定の数式を以下のように変更して、C列の帳票氏名の数式も変更すると空白行を詰めることができます。
D4=IF(COUNTIF(A$3:A4,A4)=1,ROW(),"")
 最初に登場した氏名のときに行番号をセットする。
 2回目以降は""をセットする。
D4セルを必要数下へコピーします。
C4=IFERROR(INDEX(A:A,SMALL(D$4:D$8,ROWS(A$4:A4))),"")
 行番号の小さい順に氏名をセットする。
C4セルを必要数下...続きを読む

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む


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

人気Q&Aランキング