エクセル複雑な処理の解決法とは?

このQ&Aのポイント
  • エクセルで複雑な処理を行う方法について教えてください。エクセルのバージョンや操作レベルについても教えてください。
  • エクセルで重複した数値にインデックスされた文字列を昇順に並び替える方法について教えてください。
  • 具体的な使用例として、任意の文字列と数値をセットにして昇順に並び替え、さらに文字列も一緒に並び替える方法について教えてください。
回答を見る
  • ベストアンサー

エクセルのかなり複雑な処理の解決法を教えて下さい!

エクセルでこのような複雑な作業を組み込むことが可能なのかどうか教えてください。 重複した数値にインデックスされた文字列の昇順に関わる問題です。 任意の文字を並べた列の直下に(※ここでは<0>~<9>)、それぞれ数値を配置しているとします。 <0> <1> <2> <3> <4> <5> <6> <7> <8> <9> 17 , 14 , 15 ,14 , 10 , 16, 17 , 11 ,10 , 17 <0>と17、<5>と16など文字列と数値は上下セットとして考えます。 このセットを、数値の大きい順番に並び替え、さらにその並び替えた先で文字列も自動で一緒に並び替えるというのが目的です。 私なりに少ない頭を使って考えて、LARGE関数とINDEX関数&MATCH関数をなんとか用い、値を昇順させ並び替え、さらに値を呼応させて文字列も並び替えるようにしてみたのですが、 ここでどうしても『数値の重複問題』という壁が出てきてしまいます。。 先の関数を用いるとこのように値が出力されます。 17 , 17 , 17 ,16 , 15 , 14, 14 , 11, 10, 10 <0> <0> <0> <5> <2> <1> <1> <7> <4> <4> 数値がすべて、重複せずに済めば事足りるのですが、数値が重複している場合、『<0> <0> <0> 』のように呼応している文字列も重複してしまいます。。これ以上はこの関数では自動で並び替えることができません。 ここからなのですが、このように数値が重複した場合、さらにここから重複している数値同士の間でさらに昇順を行い、文字列が<0>に近い順(セル上ならより左側にある文字列の順)で並び替えたいと思っています。 17 , 17 , 17 , 16 , 15 , 14, 14, 11, 10 , 10 <0> <6> <9> <5> <2> <1> <3> <7> <4> <8> このような並び替えを自動でさせるにはどうしたら良いでしょうか?そもそも可能なのでしょうか。。 私のエクセルレベルは、関数をネットで調べてきてそこそこいじって組み込む程度のレベルです。 どなたか教えて下さると助かります。 所持しているエクセルは『Excel2010 windows7 版』です。よろしくお願いします。

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

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

分かり易い方法は作業のための行を作って対応する方法です。 例えばA1セルからJ1セルにかけて<0>,<1>,<2>……が入力されており、A2セルからJ2セルにかけてお示しの数値が有るとします。 作業のための行を3行目に作るとしてA3セルには次の式を入力してJ3セルまで横にドラッグコピーします。 =A2+0.1/COLUMN(A1) そこでお求めの2行目の数値を5行目に並べて表示させるとしたら次の式をA5セルに入力してJ5セルまでドラッグコピーします。 =INDEX($A2:$J2,MATCH(LARGE($A3:$J3,COLUMN(A1)),$A3:$J3,0)) また、1行目にデータを並べるとしたらA6セルには次の式を入力してJ6セルまで横にドラッグコピーします。 =INDEX($A1:$J1,MATCH(LARGE($A3:$J3,COLUMN(A2)),$A3:$J3,0))

timber2657
質問者

お礼

回答してくださってありがとうございます! すごいです!まさに求めていた通りの結果になりました!ありがとうございます。2回にかけて同じ種類の式を適用させるんですね、なるほど…

その他の回答 (3)

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

こんにちは! 一例です。 ↓の画像で元データは2・3行目にあるとします。 A5セルは単に =LARGE($A3:$J3,COLUMN(A1)) A6セルに =INDEX($A2:$J2,,SMALL(IF($A3:$J3=A5,COLUMN($A1:$J1)),COUNTIF($A5:A5,A5))) A6セルは配列数式になってしまいますので、Shift+Ctrl+Enterで確定! この画面からコピー&ペーストする場合は、 上記数式をドラッグでコピー → A6セルを選択 → 数式バー内でクリック → 貼り付け → そのまま(編集可能のまま)Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 最後にA5・A6セルをオートフィルでコピー! これで画像のような感じになります。m(_ _)m

timber2657
質問者

お礼

ご回答ありがとうございます! tom04さんの方法や、KURUMITOの方法でも両方とも自分の求めていた処理ができました!動いた時はもう、、感動です…! わざわざ大変わかりやすい画像も添付してご指導くださり、ありがとうございました!

回答No.2

少しずれるかも知れませんが。 EXCELで複雑な処理を行う際、EXCELの関数ではなくEXCEL VBAという物も利用でき、これは制約のあるプログラム言語(VB)のような物ですので、配列の計算程度であれば十分可能です。 もしプログラマの方でしたら、VBAの方がとっつきやすいかも、という話です。 関数での実装方法は分かりません。

timber2657
質問者

お礼

回答していただいてありがとうございます! はい、確かにおそらく配列のような本格的なプログラムを組んでいけば可能かな…という考えはあったのですが、それほど自身はプログラムに長けていません^^; なのでパッチのような扱いやすい関数が無いものかと探しておりました。 VBAですか??いまPHPを勉強中の身なので、ちょっと調べてみようと思います。 ありがとうございました!

  • LHS07
  • ベストアンサー率22% (510/2221)
回答No.1

どのような結果にしたいのかわかりませんが 各セル A2に<0>, B2に<1>、C2に<2> A3に17, B3に14、C3に15 となっていて 3列の順番にならべてかえたときに2列の数字も対応させたいのでしょうか?

timber2657
質問者

お礼

説明が下手でごめんなさい。^^; 『tom04』さんと『KURUMITO』さんがご指導してくださったような変わった処理がしたかったのです^^ 回答してくださって、ありがとうございました!

関連するQ&A

  • エクセルの関数

    VLOOKUP関数とINDEX+MATCH関数の使い分けが良く分かりません。 VLOOKUP関数が検索値と完全一致するものを検索         検索値と一致する値がない時データを昇順に並べ替えて検索値未満を検索 INDEX+MATCH関数もMATCH関数があるから似た事ができると思うのですがどうでしょうか? この2つがいまひとつ理解ができません。分かりやすい説明をいただければ幸いです。 よろしくお願いします。

  • エクセルのデータ処理についてアドバイス下さいませ

    A列に不規則なデータの並びがあり(昇順) そのデータが変わるごとにB列に数値を1づつ 増やしていきたいのですが、どのような手順(関数?)を 使用すれば良いのか判りません。 よろしくお願いいたします。excelを使用しています A列 B列 101 1 101 101 103 2 105 3 105 106 4 107 ? 107 107 110 ? 110 110 110

  • エクセルのMATCH関数について

    エクセルのMATCH関数を使って“E18:E23”の表から125以下の1番目の値相当する”“E11:E16”の値を取り出す計算式を作成しています。(“E18:E23”表のそれぞれの行の数値が“E11:E16”の表のそれぞれの行の数値のリンクしています。そのときの数式が“=INDEX(E11:E16,MATCH(125,E18:E23,1),1)”です。この場合は上手くいくのですが、条件を“125以上の1番目の値相当するを作成して、”=INDEX(E11:E16,MATCH(125,E18:E23,-1),1)“の様にMATCHの式の最後を-1にするんですが、”#N/A“のエラーメッセージが表示します。どうすればいいのでしょうか?(*なお表“E18:E23”は数値が小さい順ですが、表“E11:E16”そうとは限りません)  それと、125以上の1番目だけでなく、2番目、3番目を拾い出す計算式はないでしょうか? 宜しくお願いします。関数に関しては初心者でいろいろ検索しましたが、ぴったり来ません。

  • エクセルの一番下の文字

    エクセルで、A列に毎日文字を打ち込み、常に一番下の文字(一番新しいセル)を別のセルに表示出来るようにするにはどうしたらよいでしょうか? =INDEX(A:A,MATCH(10^15,A:A,1)) でやったところ数値は表示されるのですが、文字はエラーになってしまいます。

  • EXCELでSUMIFがうまく出来ない

    EXCELでSUMIF関数を使って、集計したいのですが以下の2つの文字列(数字)が認識できず正しい結果になりません。 2つのセルでそれぞれ ”88505180000200200”と”88505180000200250”を入力しているのですが、関数では同じ値とみなして集計してしまうようです。 該当セルの書式設定は文字列で、!の「数値が文字列として保存されています」が出て、 「数値に変換する」を選ぶとどちらも”88505180000200200”になってしまいます。 何かよい方法がないでしょうか?

  • エクセル関数でこんな検索

    A1:A10にリストがあります。 表示されているのは文字列としての数字です。 このリストの中に、010,090,130,190,20Aの5つの値のいずれかが一つでも入っているか、いないかを判定する関数はないでしょうか? =MATCH("010",A1:A10)などという式を5個つくり、一つでも数値が返ってくれば存在することはわかりますが、もっとスマートな方法があるのではないかと思い質問いたします。

  • エクセル関数で、正負の数字を2つのグループに振り分ける関数はありますか。

    エクセル関数で、正負の数字を2つのグループに振り分ける関数はありますか。 ゼロの数字は読まないで、かつ重複しないで振り分ける方法を教えてください。 下に、データがあります。それぞれの回と点数のデータがあり、それを新たにプラスとマイナスで分けたいと思います。 =IF(COUNTIF(B1:B6,"<0"),INDEX(B2:B6,MATCH(-1,INDEX(SIGN(B2:B6),0),0)),"") で、最初に現れるマイナスの数字を拾ってみましたが、ゼロを無視できなかったり、同じ数字を拾ってしまい、うまくいきません。宜しくお願いします。 データ: 回  点数 1  -10 2  300 3  0 4  -400 5  500 6  600 下のように自動で振り分けたい (B列) (C列) 点数がマイナス     点数がプラス -10     300 -400     500     600

  • エクセルの使い方を教えてください。複雑です。

    エクセルを使っています。 A列、B列に、RAND関数によって、それぞれ100行分くらい、ランダムな数字を入れます。 (数字は、0~1の間の数字です。) 行の上からみていって、A列とB列、どちらが先に0.9以上の数字が入るか、チェックしていきたいと思います。 先に0.9以上の数字が入ったら、入った方の列に1点とします。 これを30回繰り返した場合、結果として、A列とB列、それぞれ、何点になるかを知りたいと思います。 確率的には五分五分ですが、実際にやってみて、結果がどうなるかという事を、いちいち自分で数えなくても、計算する方法が知りたいです。 何か方法はありますでしょうか? 補足 もしくは、A列とB列、C列とD列、E列とF列・・・と30セット分、同様なものを作る方法でもかまいません。 30セット分同様なものを作り、先に1点入るのは、それぞれのセットの左側の列か、右側の列か、トータルでは、左側の列、右側の列の点数は何点になるか。それを自動で計算したいです。 エクセルに詳しい方いらっしゃいましたら、どうぞよろしくお願いいたします。

  • エクセルのVBAで並べ替えの処理

    1つの表に日付、数値、文字列のデータがあります。 優先順位を(1)日付(2)数値(3)文字列とし、全て昇順での処理を書きたいのですが、お分かりの方がいらっしゃいましたら、処理方法をご教授下さい。よろしくお願いします。

  • エクセル関数の範囲指定を、座標数値で指定したい

    address関数とindirect関数で、行・列を数値で指定して、セルの値が求められますが、同じように行・列の数値を4つ使って範囲の指定をしたいのですが、どのような関数を使えばよいでしょうか? 具体的には、=MATCH(A1,範囲,1)の範囲を、2組の座標の数値で指定したいのです。

専門家に質問してみよう