エクセルで似た数字を同じ行に並びかえる方法

このQ&Aのポイント
  • エクセル初心者です。文章だけで説明できるか自信がないですが、隣接した列に時間とそれに対応した数値が打ち込まれた100行ほどのデータで、時間に対応した数値を似た数字でそろえる方法が知りたいです。
  • 具体的なデータ例を示し、A列とB列、C列とD列の組み合わせで説明しています。時間に対応した数値はそのままで、時間を似た数字でそろえるためにどのような操作が最も簡便なのか教えてください。
  • 実際には時間と数値の組み合わせが20パターンほどあり、似た時間で並べて解析したいですが、一つずつ合わせるのには膨大な時間がかかりそうです。効率的な方法をご教示いただければ幸いです。
回答を見る
  • ベストアンサー

エクセルで似た数字を同じ行に並びかえる方法

エクセル初心者です。文章だけで説明できるか自信がないですが、どなたか助けてください。 隣接した列に時間とそれに対応した数値が打ち込まれた100行ほどのデータが2つある。 EX、A列(時間:秒)1行=2.003、2行=4.05、3行=8.002…(行が進む  ほど大きくなる)    B列(数値)1行=10、2行=5、3行=4(ランダム)      C列(時間:秒)1行=1.001、2行=2.2、3行=7.9…(行が進む   ほど大きくなるがA列と一緒とは限らない)    D列(数値)ランダム  このような場合に、時間に対応した数値はそのまま(AとB,CとDは連 動)で、時間を似た数字でそろえる(少数点1桁くらいの精度)場合  どのような操作が最も簡便でしょうか?  EX、  A列1行=空欄、C列1行=1.001  A列2行=2.003、C列2行=2.2  A列3行=8.002、C列3行=7.9  イメージがつきにくいと思いますが、補足で説明させていただきます ので、どなたか、私に付き合って、上記のファイル処理を達成させて ください。 実際には、時間と数値の組み合わせが20パターンほどあり、 似た時間で並べて解析したいのですが、一つずつ合わせていくのでは 膨大な時間がかかってしまいそうです。。。 何卒よろしくお願いします。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

4組のデータに対応した修正版を紹介します。 使い方は2組の場合と同じように、インデックスの列を追加して、 それぞれ1、2、3、4の数値を入力してください。 カット&ペーストで<A,B>列にして、昇順で並び替えてください。 test3()を実行すれば、希望の結果が得られると思います。 データ組の数は変数にしています。2以上であれば問題なく動作するはずです。 注意点 1)検証が十分ではないので、プログラムに間違いがあるかもしれません。   データ保存後、希望どおりの結果になっているか確認してください。 2)例えば、4組のデータの場合、24列(A~X)を作業列として使いますので、   4組(A~H)以外は空白セルにしておいてください。 3)列幅が足りず、表示が狂う(見かけ上桁落ちする)場合があります。   最終的に列幅を調整してください。 4)前準備も自動化が可能です。興味があれば勉強して、   自動化を試みてください。 Sub test3()  '4組データ対応版  Dim k As Integer  Dim k0 As Integer  Dim m As Integer  Dim p As Integer  Dim r As Integer  Dim s As Integer  Dim DATA_Set As Integer  Dim threshold As Double  DATA_Set = 4 'データの組の数  threshold = 0.1 '閾値を変更するときはココを変えてください  k0 = 1 'データ探索開始行です。見出し行がある場合は2にしてください '近似データの抽出  k = k0  Do   If Cells(k + 1, "A").Value < Cells(k, "A").Value + threshold Then    r = Application.WorksheetFunction.CountA(Range(Cells(k, "A"), Cells(k, "A").End(xlToRight)))    For p = 1 To 3     Cells(k, p + r).Value = Cells(k + 1, p).Value    Next p    Rows(k + 1).Delete   Else    k = k + 1   End If  Loop Until Cells(k + 1, "A") = "" 'データ位置の復元  For m = 1 To DATA_Set   For s = 1 To DATA_Set    k = k0    Do     If Cells(k, m * 3).Value = s Then      For p = 1 To 3       Cells(k, 3 * DATA_Set - 3 + 3 * s + p).Value = Cells(k, m * 3 - 3 + p).Value      Next p     End If     k = k + 1    Loop Until Cells(k, "A") = ""   Next s  Next m '作業カラムの削除  Range(Cells(1, 1), Cells(k - 1, DATA_Set * 3)).Columns.Delete  For m = DATA_Set To 1 Step -1   Range(Cells(1, m * 3), Cells(k - 1, m * 3)).Columns.Delete  Next m End Sub

dgdsdhk
質問者

お礼

早速の修正版作成ありがとうございます。 無償でここまで、やっていただいてホントに恐縮です。 実行してみましたが、完璧です。 これを機会に、マクロを勉強してみようと思います。 また、ほかの質問を投稿するかもしれませんが、 その時は、またお世話になるかもしれません。 よろしくお願いします。 これまで、このサイトを活用していて、一番助かりました。 ポイント20点では足りないです。。。 ホントにありがとうございました。

その他の回答 (4)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.4

#2です。 うまくいって幸いです。 >近似データを4つにできれば完璧なのですが、4つに修正する方法もご教授願えないでしょうか? A列とC列の中に0.1以内の近似するデータが3つ以上存在するのでしょうか? それとも、別の列、例えば <A,B><C,D><E、F><G、H>というようにデータが複数あるという意味でしょうか? 補足説明をしていただけないでしょうか? 今日は用時があるので、回答は明日以降になるかもしれません。

dgdsdhk
質問者

補足

また、曖昧な文章を書いてしまってすみません。 >>近似データを4つにできれば完璧なのですが、4つに修正する方法もご教授願えないでしょうか? は、回答者様のご指摘の後者 >それとも、別の列、例えば ><A,B><C,D><E、F><G、H>というようにデータが複数あるとい>う意味でしょうか? です。つまり、A,C,E…列には時間データが、B,D,F…には数値データ が並んでおり、<A,B><C,D>の組み合わせで構成されています。 >今日は用時があるので、回答は明日以降になるかもしれません。 わざわざ、明記していただいてありがとうございます。 懇切丁寧なご対応、誠に感謝しております。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

#2です。 >似た時間で並べて解析したいのですが、 ということは、やはりデータの左右の場所が変わると都合が悪いですね。 前準備が多い方法で申し訳ありませんが、方法を紹介します。 1)新たに<C>列を挿入して、データのある全ての行に数値で「1」を入力   同様に<F列>には数値で「2」を入力。    (データのインデックスとして使います) 2)<A,B,C>列のデータの下に<D,E,F>列のデータをカット&ペーストする。 3)<A,B,C>列を選択し、上部のメニューから、   「データ」→「並べ替え」を選択   「最優先されるキー」を「A列」、「昇順」にチェックを入れて「OK」 4)以下のマクロを標準モジュールに登録して実行   (登録・実行方法が分からなければ、解説します) Sub test2()  Dim k As Integer  Dim m As Integer  Dim val_A As Double  Dim val_B As Double  Dim val_C As Double  Dim threshold As Double '近似データの判定閾値  threshold = 0.1  '閾値を変更するときはココを変えてください  k = 1       'データ探索開始行です。見出し行がある場合は2にしてください  m = k '近似データの抽出  Do   If Cells(k + 1, "A").Value < Cells(k, "A").Value + threshold Then    Cells(k, "D").Value = Cells(k + 1, "A").Value    Cells(k, "E").Value = Cells(k + 1, "B").Value    Cells(k, "F").Value = Cells(k + 1, "C").Value    Rows(k + 1).Delete   End If   k = k + 1  Loop Until Cells(k + 1, "A") = "" '左右データ位置の復元  Do   If Cells(m, "C").Value = 2 Then    val_A = Cells(m, "A")    val_B = Cells(m, "B")    val_C = Cells(m, "C")    Cells(m, "A") = Cells(m, "D")    Cells(m, "B") = Cells(m, "E")    Cells(m, "C") = Cells(m, "F")    Cells(m, "D") = val_A    Cells(m, "E") = val_B    Cells(m, "F") = val_C   End If   m = m + 1  Loop Until Cells(m, "A") = "" '作業カラムの削除  Columns("F").Delete  Columns("C").Delete End Sub あくまで、100行程度のデータで使うことを前提にしていますので、 大規模なデータでは、遅くて使えないと思います。 なお、近似データは2つまでと仮定していますので、 3つ以上ある場合は修正が必要です。

dgdsdhk
質問者

お礼

駄文に付き合っていただき、ありがとうございます。 回答者様のマクロ文?をコピペして、実行してみたら、 できました!!!感動です。ホントに助かります。 >なお、近似データは2つまでと仮定していますので、 >3つ以上ある場合は修正が必要です。 とのことですが、近似データを4つにできれば完璧なの ですが、4つに修正する方法もご教授願えないでしょうか? やり方のヒントだけでも結構ですので、よろしくお願いします。 ただ、これだけでも大満足です。ホントにありがとうございました!!!

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

こんにちは。  A列1行=1.001、C列1行=空欄  A列2行=2.003、C列2行=空欄  A列3行=2.2、C列3行=空欄  A列4行=4.05、C列4行=空欄  A列5行=8.002、C列5行=7.9   (最後の行のデータ偏差は0.1以上ありますが・・・) という結果でもよいでしょうか?(重複しないデータは左寄せ) 良ければ方法を紹介します。

  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.1

>時間を似た数字でそろえる 最終目的である、ここが解りません。 似たような数字とは、どういう定義ですか? 数字は、同じor異なるしかあり得ず、似たような・・・という抽象的な表現では他人には理解出来ませんよ。 また、”そろえる”とは、具体的にどうしたいんでしょ? 後半の例は、前半の例を操作した(あなたの言うところの”そろえた”)結果ですか? A1が空欄であったり、前半例のA2=4.05が無くなったりしていますが、そのルールがさっぱり解せません。 こういう並びの数列を、こういう並びの数列に並び替えたい。 並び替えのルールは、こうこうである。 という風に具体的に質問して下さい。 エクセル初心者以前の問題です。

dgdsdhk
質問者

補足

何とか理解しようと試みていただいて ありがとうございます。 補足させていただきます。 計時時間毎に検出される成分の量を解析したいというのが目的で、 検出時間と検出量が、それぞれA列、B列となっています。 ですが、検出時間には、ずれが生じており、小数点1ケタ(ほどの範囲 で時間をそろえて、各検出量を比較したいのです。 EX、  A列1行=空欄、C列1行=1.001  A列2行=2.003、C列2行=2.2  A列3行=8.002、C列3行=7.9 についてですが、適当に書きすぎました。小数点1ケタなので、 正しくは、下記のようになります。  A列1行=空欄、C列1行=1.001  A列2行=2.003、C列2行=空欄  A列3行=空欄、C列3行=2.2  A列4行=4.05、C列4行=空欄  A列5行=8.002、C列5行=7.9 です。 数値が小数点1ケタで合わない場合は、下の行にずれていき、 他列の数値と合うところで、表示される。ようにしたいです。 ご指摘のように、簡潔に説明できなくてすみません。 質問を変えて、 数値の幅を決めて(例えば、2から4)、行列の範囲を指定した のち、特定の行に、その数値をかえすという方法だけでも ご存じでしたら、教えてください。 もちろん、上の解決法があれば、ベストです。

関連するQ&A

  • Excelについての質問です。

    エクセルについての質問なのですが、 A列の数値だけをB列から選び出して、そこから更に選び出したBと同じ行にあるCをDに代入したいのですが、どのようにすればよいでしょうか?    A   B   C   D 1  0.1  0.1  5 2  0.5  0.3  10 3  1.2  0.4  20 4  2.3  0.5  40 5  3.7  0.7  80 6  4.7  1.0  160 7  5.9  1.2  320 わかりにくい表ですが、この場合 A1の「0.1」、B列で「0.1」といえばB1になります。それをBと同じ行のC1の数値「5」をD1に代入。 A2の「0.5」、B列で「0.5」といえばB4になります。それをBと同じ行のC4の数値「40」をD2に代入。 A3の「1.2」、B列で「1.2」といえばB7になります。それをBと同じ行のC7の数値「320」をD3に代入。    D 1  5 2  40 3  320 4  ・ 5  ・ 6  ・ という結果にしたいのですが・・・。 これは可能なのでしょうか? わかりづらい質問ですが、宜しくお願いします。

  • エクセルで換算表を利用したいのですが。。。

    お忙しいところをすいませんが、便利な方法をご存じの方がおられましたら、ご教授願います。 A列のランダムデータにたいして、 B列の整列されたデータと、そのそれぞれに対応したC列のデータ(換算表)を 利用したいと考えています。 具体的には 1=0.23 2=0.26 3=0.30 などの換算表があるのですが、(B.C列) A列の数字に対応するB列の数字を探し出し (検索) その横(C)の換算値を表示(Dに)させたいのです。 つまり、 A1に“3”とあったとします、 この数値に対して、イコール(=)である数値をB列から探し、 その横にある換算値“0.30”をできれば、D列に表示(呼び出し?)したいのです。 できるだけ、簡便に行いたいと考えています。 換算値も元データも膨大なので、なんとか、手数を減らしたいのです。 達人の皆様に、お力を拝借できればと思います。 どうぞ宜しくお願いいたします。

  • エクセル 複数行ある同一商品を1行にまとめるには?

    同一内容が入力された複数行の合計を出す方法を教えてください。     エクセルの表でA列に商品名、B列に色の種類、C列~E列にサイズごとの個数がある、まったく同じ商品が、複数行にランダムに掲載されています。 A列、B列で同一の情報を持つ商品について、C列~E列のサイズごとの合計を出したいのです。 例)商品名、色、サイズ個数(C列:Sサイズ、D列:Mサイズ、E列:Lサイズの順です。) A1:Tシャツ B1:ホワイト C1:5 D1:4 E1:3   A2:Tシャツ B2:ブラック C2:3 D2:5 E2:5 A3: Tシャツ B2:ホワイト C3:3 D3:3 E3:2 A4: Tシャツ B2:ブラック C4:3 D4:2 E4:3 各商品が300行程あり、オートサムではやりきれません。 すべての各商品(A列、B列が一致するもの)を1行ごとにまとめたシートを作成するにはどうしたら良いでしょうか?

  • エクセルの参照先(仕事で困ってます。)

      A1 B1 C1 D1 1 ■ - - - 2 ■ - - - 3 ■ - - - 4 ■ - - - 5 ■ - - - 6 - - - ● 7 ■ - - - 上の図の様にA列には1~6行にかけて■があるところに数値が入っています。 その時により1行から何行はいるかわからないのですが、 最後の行は空白にして、また次の行から数値が入るようになっています。 空白から空白までの行を合計して(今回はA1~A6)をD6に表示させたいのですが、なにぶんA列には何行入力されるか、空白が来るかなどはランダムです。 このような場合に、D列にはどのような関数を貼り付けたりしたら いいでしょうか? 入力するのはA列の数値だけにしたいということです。                                                                                        

  • エクセル、行のランダムについて

    エクセル、行のランダムについて エクセルで行のランダムについて教えてください。 仮にエクセルシートに以下のようなデータがあるとします。  |  A  |  B  |  C  |  D  |  E  | 1|    |今日は |昨日は |明日は |    |  2|    |良い  |悪い  |普通の |最悪な |  3|    |1日  |日   |    |    |  4|    |でした。|だった。|    |    |  このようなデータがあるとして、各行、ランダムに1つ選び、A列に入れて文章を作成したいのですが、どのようにすればいいでしょうか?

  • エクセルで 2つの数値(整数)をそれぞれ列と行に対応させ、クロスするセルを指し示したい

    エクセルで、例えば A1 の数値(1,2,3...)を列番号(A,B,C...)に対応させて A2 の数値 (1,2,3...)を行番号(1,2,3...)に対応させて、クロスするセルを指し示したり、内容(数値)を参照するにはどうすればいいのでしょうか。 例をあげると、A1=4, A2=5 のときには D5 となり、A1=26,A2=10 のとき Z10 となるようにしたいのです。 やりたいことは、A1=3,A2=5,B1=26,B2=10 のときに C2 には D5からZ10までの合計を入れたい( C2=SUM(D5:Z10) )というようなことです。   上記のようなことをしたいのですがどうすれば良いのでしょうか。教えていただけないでしょうか。お願いします。

  • エクセルで行頭にある数字で行を揃えたい

    エクセルの使い方で質問です。 エクセルにのA列にID(01~10)が10行入っており、B列に01黒、04白、10赤、C列と4行、さらにC列には02大、05小、06中、08中、09小、と5行入っている状態です。 この表にはは空白がなく上に詰まっている状態です。 つまり1行目には 01 01黒 02大 2行目には 02 04白 05小 と入っている状態です。これらの表を先頭の数値に合わせて整理したいのですが、どのような方法がいいでしょうか? つまり1行目には文字列の先頭が「01」のものが、2行目には文字列の先頭が02のものがならび、該当する文字列がない場合は空白にしておきたいです。 よろしくお願いします。

  • EXCELで予測値を導き出す方法(複合バージョン)

    複雑になってしまいますが、みなさま、よろしくお願いします。 A列1~9行 50 70 30 60 10 90 50 60 20 A列10行 75もしくは76 以上のような数値とします。 (列はアルファベット、行は数字) B10 [式] =AVERAGE(A1:A10) C10 [式] =STDEVP(A1:A10) D10 =B10+C10 と式を入れ、 A列10行に「75」を入れますと、D10に表示される数字は75.38です。 A列10行に「76」を入れますと、D10に表示される数字は75.58です。 つまり、76で、はじめてD10の数字を超えます。 現在のやり方ですと、少しずつ数字を増減させて数字を導き出しているのですが、 このはじめて超える数字、この場合だと76を一発で出す関数式はどのようにすればいいのでしょうか? ○参考までに 昨日、同じような質問をしました。 http://oshiete1.goo.ne.jp/qa3270906.html 前回は、A列10行が空欄で数値が出るのですが、 今回は、A列10行に仮想的に数値を入れ、B10を出しておかないとD10が導き出せないことに気づきました。 B11 =ROUNDUP(AVERAGE(A1:A9),0) C11 =ROUNDUP(STDEVP(A1:A9),0) D11 =B11+C11 という感じに作ってみたのですが、B11の時点で49(B10では51.6)となり、最終のD列が一致しませんでした。

  • エクセルで三行ごとのデータを1行ごとに表示させたい

    下のように三行ごとにあるセルを参照し、他のセルに一行ごとに表示する方法(関数、もしくはマクロなど)   A B C D 1 あ     あ 2       い 3        4 い 5 6 7 う 8 あるいはあるセルに入力されている数値を数式内の行、または列として指定する方法を探しています。 (たとえばA1に4、A2に3と入力されていたとき、B2でその数値を取得しC3の内容を表示する、といった感じです) 簡単そうなきがするのですが私の検索が悪いのか、見つけることが出来ませんでした。ご存知の方お願いします

  • エクセルマクロで条件に該当する数値を探す

    エクセル初心者です。 シート1のA1~A18に1~18の数値がランダムに入っています。(重複した値は無し) シート2の3行目C3~T3にも1~18の数値がランダムに入っています。(空欄あり、重複した数値は無し) シート2の2行目C2~T2までは左から順に1~18の数値が入っています。(順位表示) 以上の条件下で下記の作業をマクロで実行させる式を教えてください。 シート1のA1~A18の値と同じ値を、 シート2の3行目C3~T3の中からどのセル(列)に入っているかを確認して、さらに該当する列の2行目C2~T2の値を、シート3の1行目A1~R1に表示させる。 例:シート1のA1=3、A2=2、A3=1の時、 シート2のC3=3、D3=1、E3=2でした。 シート2のC2=1、D2=2、E2=3です(この行の数値は毎回同じ) 上記の時シート3にはA1=1、B1=3、C1=2となります。 *シート1のA列A1~A18とシート3の1行目A1~R1の位置関係はリンクしています。(列→行) シート1 A列 1 3 2 シート2   A列 B列 C列 D列 E列 2行見出し見出し1  2  3 3行見出し見出し3  1  2 シート3 A列 B列 C列  2  1  3 ご理解頂けたでしょうか? 初心者ですので分かりやすい回答を宜しくお願いいたします。

専門家に質問してみよう