• 締切済み

並び替え

宜しくお願いします。写真の様に、B列からM列O列からY列まで、N列を境に2種類のデータがあり、F列とS列に共通のcodeがあるのですが、並びがバラバラで行で比較出来ないのです。各codeのデータが各列記載されてるのですが、S、F列を端に持って言ってブイルックでやって元に戻すとか、ブイルックとインデックスで、2回やるのも時間がかかってしまうので、マクロで1回で出来ないでしょうか?助けてください

みんなの回答

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.7

回答No.2の補足に「F列とS列はF列の方が若干コード数が多いのでそれぞれ並び替えすると横並びに見れなくなるのでS列に無くF列にあるコード他データは下の方に集めるとかにしたいのです。」とありますが、B列からM列までの並び順がF列をキーに昇順でソートされているように見えます。 F列のコードを対象にO列からY列の並びを合わせる方法で良ければ未使用列(例えばAB列からAL列へ抽出することはExcelに標準で組み込まれた関数のみで可能です。(O列からY列をそのままの位置で関数でのソートは不可能なので未使用の列へ数式を組み込んで目的の配列を抽出します) 貼付画像はExcel 2013での検証結果です。 AB1セルに次の数式を設定してAL1までオートフィルコピーし、そのまま下へ20行目までオートフィルコピーしたものです。 =IFERROR(INDEX($O$1:$Y$20,SMALL(INDEX(($S$1:$S$20=$F1)*ROW(AB$1:AB$20)+($S$1:$S$20<>$F1)*ROW(AB$21),0,0),COUNTIF($F$1:$F1,$F1)),COLUMNS($AB1:AB1)),"") F列に有ってS列に無いコードは4、6、10、13を模擬データとして追加してあります。 尚、VBAでも可能ですが失敗すると元データを壊すことも考えられますのでテストする場合はファイル(ブック)をコピーして実行するようにしてください。 参考のためにコードを貼付します。(結果の画像は添付しません) Sub sort() Dim myArray myArray = Range("O1:Y20") Dim i, j, k, l, m(), n For i = 1 To 20 For j = 1 To 11 myArray(i, j) = Null Next j Next i For i = 1 To 20 j = 0 k = 0 ReDim m(k) Do j = j + 1 If Cells(j, 19) = "" Then Exit Do If Cells(i, 6) = Cells(j, 19) Then k = k + 1 ReDim Preserve m(k) m(k) = j End If Loop Until j = 21 If k > 0 Then For n = 1 To k For l = 15 To 25 myArray(i, l - 14) = Cells(m(n), l) Next l If k > 1 Then i = i + 1 Next n End If Next i Range("o1:y20") = myArray End Sub

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.6

回答No.5の追加です。 回答No.2の補足で「F列とS列はF列の方が若干コード数が多いのでそれぞれ並び替えすると横並びに見れなくなる」と言うことですが、S列に有るコードはF列に必ず有るのですか?、無い場合はどのように対処しますか? また、最終目的はどのような結果にしたいのですか? VBAでセルの値を順次入れ替えたとき元の配列に戻せなくなりますがそれでも良いのですか? 結果の配列はB:Mを基準にしてF列と同じコードのS列のデータが同じ行になれば良いのでしたらINDEX関数とMATCH関数の組み合わせで数式を組めばAA列以降の未使用列へ抜き出せます。但し、F列のコードとS列のコードの重複は2件までとし、検出順位は上から順に宛がうことになります。 具体的な数式は補足説明を待って検証してからになります。 尚、当方のExcelは2013なので2007以降のバージョンが対象になります。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.5

>写真の様に、B列からM列O列からY列まで、N列を境に2種類のデータがあり、F列とS列に共通のcodeがあるのですが、並びがバラバラで行で比較出来ないのです。 N列を境に左右の列数が異なるようです。(B:Mは12列、O:Yは11列) また、F列とS列のコード(数値?)は何れも11が2個ありますので他の要素と組み合わせないと判別できません。 比較する対象はB列とO列、C列とP列、D列とQ列、・・・・のようにしたときM列に対しては対象がありませんがそれでよろしいですか? >ブイルックとインデックスで、2回やるのも時間がかかってしまうマクロで1回で出来ないでしょうか? 前述のようにF列とS列の共通コードが複数の場合は区別ができませんのでVLOOKUP関数やINDEX関数で行の抽出ができません。 勿論、VBAでも同様です。 もう1度、質問の要件を整理して不足している要件を補足(追加提示)してください。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.4

ごく簡単な方法ですが・・・ O1のセルからV16のセルを選択し、エクセルのメニュ~でホ~ムの『並び替えとフィルタ~』選択して『ユ~ザ~設定の並べ替え』選択し、出てきたパネル で最優先されるキ~に列Sを選択し、順序を昇順でOK返すと左側の表と同じに 並び替えられませんか?

回答No.3

一般論ですが、 VLOOKUP関数は「キーが重複している場合」には 思う答えを返してくれないことが多いですよ。 INDEX関数もまた然り、VBAを使っても困難な要件です。 VBAを使っても、キーが重複している以上、 おそらくお望みのものは出来上がりません。 「重複しないキー」を用意できるのであれば、 INDEX関数とMATCH関数でマッチングはできるかもしれません。 「左の表にはあるけど、右の表にはない」を確認する程度なら おそらくCOUNTIF関数で事が足ります。 A1セル辺りに式   =COUNTIF(S:S,F1) を仕込んで、行方向にフィル。 これでF列に値がS列に存在しなければ「0」が返ります。 存在するなら、その数を返してきます。 あとはコレの内「0」を下に持って行くのであれば降順で 並べ替えてやればお望みのものに近いものが出来るような気がします。 VBAで組むのは造作無いですが、オススメはしません。 どうしてもソレがお望みなら、 現在やっている一連の作業を「マクロの記録」してみると良いです。 記録されたものに少し手を加えるだけなら簡単ですから。

  • msMike
  • ベストアンサー率20% (363/1772)
回答No.2

「ブイルックでやって元に戻す」とは、その結果、どうなって欲しいことなんですか? マクロをご希望のようだけど、貴方自身のマクロ操作レベルは如何ほどなんでしょうか?

nafun0404
質問者

補足

ご回答ありがとうございます。遅れてすいません。自分が扱ってるブックは色々あり、F列とS列はF列の方が若干コード数が多いのでそれぞれ並び替えすると横並びに見れなくなるのでS列に無くF列にあるコード他データは下の方に集めるとかにしたいのです。データによっては同じなのもあるかもしれませんがそれを防ぐためにマクロで解決できないかと思いました。よろしくお願いいたします!

  • f272
  • ベストアンサー率46% (7998/17099)
回答No.1

B列からM列を選択して,F列をキーにして並び替え O列からY列を選択して,S列をキーにして並び替え とすればよいのでは?

関連するQ&A

  • Excel2007 マクロで並び替えをしたい

    エクセルシートに、A列から順に 部-課-担当-氏名コード-氏名-年齢 というデータが入っています。 部・担当にはデータが入っていますが、課は空白の方も居ます。 このデータを、こちらが決めた規則によって並び替えるマクロを作りたいと思っています。 (1)まず、A部⇒B部⇒C部⇒D部の順で並べる (2)次に、E課⇒F課⇒G課⇒H課の順で並べる (3)さらに、I担当⇒J担当⇒K担当⇒L担当⇒M担当の順で並べる (4)最後に、特定の人物の氏名コード(数字)を指定して並び替える。O⇒P⇒Q⇒R(管理者を各担当の一番上に持ってきたい為) 要するに、(1)⇒(2)⇒(3)⇒(4)の優先度で、ユーザー設定リストによる並び替えを行いたいです。 初めは「マクロの記録」を利用しようと思ったのですが、 ・並び替えを行うシートの列の並びが毎回同じではない ・見出し行の名称も微妙に違う場合がある ・データの数(行数)が毎回違う よって、できれば毎回並び替えを行う列を、部分一致による検索で指定できればと思います。 (例:見出しは必ず1行目にあるものとし、部分一致検索で「部」が該当したセルの列を優先度(1)として並び替える。以降同じように課⇒担当⇒氏名コード順で検索を行い、並び替える) その際考えられる問題点として、「課」が空白になっている場合、並び替えが思い通りにならないという事です。(確か空白行は一番最後になりますよね。) よって、まずは「課」の列にある空白セルに何らかの文字・・例えば-等を入力する必要があると思います。 以上の事をマクロで行えるでしょうか? マクロ初心者なのですが、職場にマクロを使える方がいない為どこから手をつけていいか悩んでいます。 こういう方法使ったらいいんじゃない?とか大体でもいいので教えていただければ幸いですm(_ _)m

  • 配列の並び替え

    下のように5つの配列がA~E列まであって、2、3行目にデータが入っています。このときに、2行目の値が3行目の値より小さい配列で、かつ、2行目の値が小さい順に並べる。その後に、3行目より、2行目の値の方が大きい配列を3行目の値が大きい順に並べるマクロコードを教えてください。   A B C D E←列      1  1 2 3 4 5←配列番号 2  4 9 8 6 2 3  1 5 7 10 3      ↑ 行    ↓     A B C D E 1  5 4 3 2 1 2  2 6 8 9 4 3  3 10 7 5 1

  • SQLでの並び替え

    以下のデータがあるとき 結果のような並びで一回のSQL文で取得したい のですが、どのような方法がありますか? ・列2が1時は 列1の昇順 ・列2が1以外の時は、列2の降順 列1  列2 20060501 1 20060502 1 20060506 1 20060508 1 20060501 2 20060502 2 20060506 2 結果としての並び 列1  列2 20060501 1 20060502 1 20060506 1 20060508 1 20060506 2 20060502 2 20060501 2

  • EXCELデータの並び替え

    1データ10項目ありますが (行→1データ,列→10項目) 大量のデータがあります。  ここで質問ですが、10項目(10列)の内の1項目を 並び替えして時、1項目(1列)のみが、並び替わって しまいます。  残りの項目も、並び換える1項目と同様に(関連 して)並び換えたいのですが、どの様にしたら良い のでしょうか?  よろしくお願いします。

  • VBの初心者。 セルの削除について教えてください

    まったくの初心者なもので、なかなか上手く動いてくれず困っています。 毎月前月のファイルをコピーして新たにデータを貼り付けして データ処理を行っているのですが、前月のデータを削除するマクロを作成したいと思っております。 1行目のデータは共通なので削除せず、2行目以降のA列~Y列のデータを削除したいのですが 月によって、削除する行の最後が違っております。 どのようにマクロを設定すればいいのかわからず、悪戦苦闘しております。 初心者の私にぜひ教えていただきたく投稿させていただきました。 宜しくお願いいたします。

  • エクセルでデータの並び替え

    エクセルでデータの並び替えを使い、 A列に入っている数字を最優先して 並び替えをしたいのですが、後半部分 うまく並び替えができません。 行が、2134行目までは、うまくいったのですが、 それ以降が並び替わらないのです。 もしかして、行があまりに多いとできないのでしょうか。。。限界があるのでしょうか? それか、ほかに原因があるとしたらわかりません。 わかる方、教えてください。

  • マクロでの並び替え

    V列の2行目からDATAが入っています。 DATAには、ブランク、L221、L222があります。 DATAの並び替えを下記のようにしたいのですが、 教えてください。   ブランク   L221   L222 マクロで記述したい。                

  • エクセルマクロで並び替えを行いたい。

    エクセルマクロで以下の並び替えを行いたいのですが、可能でしょうか。 「I列~O列」データ「A列~G列」の下に並ぶようにし、 かつ、複数シートも同様に処理したいと思います。 【元データ】 「A列~G列」 「I列~O列」 ※行数はシートによる異なる。 ※シート数もファイルごとに異なる。 【並び替え後】 「A列~G列」 「I列~O列」 よろしくお願いします。

  • excel2000マクロ記述

    シート名JISEKIの中のF列には2行目から4桁のコードが入っています。 X列の2行目から数値データが入っています。 条件としてF列のコードがA310又はA505で、X列の数値がマイナスの場合は、 R列からW列の数値データを非表示にしたい。 これをマクロ化したいのですが、記述の仕方を教えてください。

  • 隣の列の最終行と同じ行までコピーしたい

    Excel2013 使用です ※私はVBAは使えませんが、マクロの記録は出来ます。   記録したマクロに、ネットで見つけたコードを加えたりします。   今回は、それで上手く行かなかった所についての質問です。 画像を元に説明します。 【目的】 元々はU列までしか無いデータに、マクロを使ってW列以降に集計を出したい。 【作ったマクロ】 Q列とR列の重複を削除した物をX列とY列に表示 SUM IF関数を使って、W列を元にS列を集計した数をY2セルに表示 セル「AA2」に、「Z2」-「Y2」列の数式を入れる …ここまでは上手く行きました。 問題は、Y2に入れたSUMIF関数と、AA2に入れた引き算を 「W列の最終行と同じ行」までコピーしたい」という所です。 (元になるU列までのデータの行数は、つど増減があるため) そこで、ネットで見つけた以下のコードを使ってみました。 Range("Y2").Select ActiveCell.FormulaR1C1="=SUMIF(C17:C19,R23,C19)" Range("Y2").Select With Cells(Rows.Count,"X").End (xlUp) Selection.AutoFill Destination:=Range(Selection,Cells(.Row,"Y")),Type:=xlFillCopy 上のコードを使うと、画像で言うと6行目までは正しい数が表示されます。 が、何故かその下に0000・・・と続き、更に下の方によく分からない表示が 出てしまいます。 恐らく、Y列はS列を元に集計しているせいだと思うのですが、VBA自体の意味は さっぱり分からないのでどう直したら良いのか分かりません。 (ちなみに、R列の商品名はQ列の商品コードを元にvlookupで出していますが、 R列は上記のコードを使って正常にQ列と同じところまでコピー出来ています) どなたかご教示いただけたら助かります。

専門家に質問してみよう