• 締切済み

エクセル 数値の抽出方法

どなたか教えて下さい エクセルで沢山の数値(同数値含む)が入っている表から同数値を除く 数字の種類を抽出したいのですが、その方法が判りません 例)   A   B   C 1 0.20 0.20  0.15 2 0.15 1.00  0.15 3 0.33 0.40  0.10 4 1.00 0.20  0.15 上記の例の場合抽出結果を 0.10 0.15 0.20 0.33 0.40 1.00 と表示させたいのですが、どなたか教えて下さい よろしくお願いします。 

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

> できればA列のみでは無くA~AE列(31列程度)のマクロは 挿入された新しいシートのA列に並べたデータのことですね? できると思いますが、A列からB列へ列を変えるのはどのような基準ですか?

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

A列からC列にデータがあるとしてD1セルには次の式を入力します。 =MIN(A:C) D2セルには次の式を入力して下方にオートフィルドラッグします。 =IF(MAX(D$1:D1)=MAX(A:C),"",SMALL(A:C,COUNTIF(A:C,"<="&D1)+1)) これでD列にはお望みの答えが表示されます。

nenchi921
質問者

お礼

KURUMITO様 回答ありがとう御座います 抽出がうまく行きました、大変助かりました ありがとう御座いました。 他に回答された方々もご教授ありがとう御座いました m(_ _)m

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

データ量が多いとのことなのでVBAによる手法を考えてみました。 データはA1から連続した一連の範囲にあるものとします。 重複を除いたデータを、別シートを挿入してA列に昇順で表示します。 以下の手順をお試しください。 1.Altキー+F11キーで Visual Basic Editor画面を呼び出します。 2.画面上部のメニューバーから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。 '*****ここから下をコピペ***** Sub test01()   Dim myDic As Object '変数宣言   Dim c As Range '変数宣言   Dim ns As Worksheet   Set myDic = CreateObject("Scripting.Dictionary") 'myDicを用意   Set myRng = Range("A1").CurrentRegion '範囲指定   For Each c In myRng '範囲内の各セルごとに     If Not myDic.exists(c.Value) Then 'myDicになければ       myDic.Add c.Value, "" '追加する     End If   Next   Set ns = Worksheets.Add(After:=ActiveSheet) 'シートを追加   ns.Range("A1").Resize(myDic.Count, 1).Value = _   Application.WorksheetFunction.Transpose(myDic.Keys) 'A列にデータ   ns.Range("A1").Resize(myDic.Count, 1).Sort _   Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo '並べ替え   Set myDic = Nothing '後処理   Set myRng = Nothing   Set ns = Nothing End Sub '*****ここより上までをコピペ***** 3.Alt+F11キーでワークシートへもどります。 4. Alt+F8キーでマクロを呼び出し「test01」を実行します。

nenchi921
質問者

お礼

merlionXX様 回答ありがとう御座います 早速試してみました、数値の抽出がうまく行きました! できればA列のみでは無くA~AE列(31列程度)のマクロは 可能でしょうか? お手数ですがご回答よろしくお願いします。。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 参考になるかどうか判りませんが・・・ 作業用の列を2列使用しますので、あまりスマートな方法とは言えないと思います。 D・E列を作業列として、F列が結果になります。 とりあえず、画像のように元データが3列だとして、 D1セルに =IF(COUNT($A$1:$C$100)<ROW(A1),"",SMALL($A$1:$C$100,ROW(A1))) E1セルに =IF(COUNTIF($D$1:D1,D1)=1,ROW(A1),"") F1セルに =IF(COUNT($E$1:$E$100)<ROW(A1),"",INDEX($D$1:$D$100,SMALL($E$1:$E$100,ROW(A1)))) として、D1~F1セルを範囲指定し、F1セルのフィルハンドルで下へずぃ~~~!っとコピーします。 これでF列に結果が表示されると思います。 尚、数式は100行目まで対応できるようにしていますが、 データ量によって範囲指定の領域はアレンジしてみてください。 そして、作業用の列が目障りであれば非表示にしても良いかと思います。 以上、参考になれば良いのですが、 他に良い方法があれば読み流してくださいね。m(__)m

nenchi921
質問者

お礼

tom04様 回答ありがとう御座います 早速 例)の数値で試して見ましたが(コピペで) うまくF列に表示されませんでした・・・ もう少し関数内容を確認してみます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 (1)別シート列(仮にsheet2のA列)の先頭セルに見出し名、2行目以下にデータを貼り付け→sheet2のA列を選択→データ→フィルタ→フィルタオプションの設定 (2)「重複するレコードは無視する」を選択→OK

nenchi921
質問者

お礼

mu2011さま 早速の回答ありがとう御座いました 重複するレコードを考えましたが、2行目以下に貼り付けるデータが 多すぎるため、何か良い方法が無いものかと、質問させていただきました。 (データ数が多いことを記載していませんでしたすみません) データ数の目安 1時間当たりで5年間分あります。