• ベストアンサー

Excelで並べ替え

添付の表のようなデータを並べ替えたいのです。 B列の出現順に同じものをまとめます。 データは同じものがない場合もあります。 関数では無理と思いますがVBAではどのような書き方をすればよいか教えてください。

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (725/1505)
回答No.3

関数なら、D列をワークエリアに使います。 D2: =INT(IFERROR(INDEX(D$1:D1,MATCH(B2,B$1:B2,0)),ROW()))+ROW()/1000 下へコピペ。 G2: =INDEX(B:B,MATCH(SMALL($D:$D,ROW()-1),$D:$D,0)) 右下へコピペ。 VBA でもD列をワークエリアに使います。 Option Explicit ' Sub Macro1() Dim RInp As Long Dim What As String ' Application.ScreenUpdating = False ' For RInp = 2 To Cells(Rows.Count, "B").End(xlUp).Row What = Cells(RInp, "B") Cells(RInp, "D") = Application.Match(What, [B:B], 0) Next RInp Range("B2:D" & RInp - 1).Sort Key1:=[D2] [D:D].ClearContents End Sub

mocodne
質問者

お礼

ありがとうございました。とても勉強になりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

データ例 B1:C12 質問画像の通り。 種類 データ 東京01 E 東京01 A 神奈川01 B 神奈川01 I 東京02 C 東京03 D 千葉AA F 千葉AA H 千葉BB G 千葉BB J 千葉BB K ーー B1:B12範囲指定して、 データーフィルターー詳細設定ー指定した範囲ー抽出する範囲ーF1:F12ー重複するレコードは無視する。 F列に 種類 東京 01 神奈川 01 東京 02 東京 03 千葉 AA 千葉 BB B列の出現順を保存しつつ、ユニークなデータを出す ーー B2セルに 関数 =VLOOKUP(B2,$F$2:$G$7,2,FALSE) を入れて、下方向に式複写。 結果 種類 データ インデックス 東京01 E 1 東京01 A 1 神奈川01 B 2 神奈川01 I 2 東京02 C 3 東京03 D 4 千葉AA F 5 千葉AA H 5 千葉BB G 6 千葉BB J 6 千葉BB K 6 並び替えで範囲はB2:C12 キーは 第Ⅰが「インデックス」、第2キーが「種類」 結果 種類 データ インデックス ー>B,C,D列 東京01 E 1 東京01 A 1 神奈川01 B 2 神奈川01 I 2 東京02 C 3 東京03 D 4 千葉AA F 5 千葉AA H 5 千葉BB G 6 千葉BB J 6 千葉BB K 6 D列は不要だろうから、D列削除。 上記をVBA化も易しいが、関数を得意な人は、関数でもできると思う

mocodne
質問者

お礼

ありがとうございます。 リストの作業列に=MATCH(B2,B:B,0)+COUNTIF(B$2:B2,B2)/100 と入れて、昇順で並び替えできました。

全文を見る
すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (363/1780)
回答No.1

添附圖參照(Excel 2019) ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

mocodne
質問者

お礼

なるほど、べつに順番用のリストを作成しておくのですね。 ありがとうございます。

mocodne
質問者

補足

リストの作業列に=MATCH(B2,B:B,0)+COUNTIF(B$2:B2,B2)/100 と入れて、昇順で並び替えできました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルの並び替えについて

    A列からC列に表AがありE列からG列に表Bがあります。 表Bの品番順に表Aのデータを並べたいのですがどのようにしたらよいでしょうか。 サンプルの表を添付しますのでよろしくおねがいします。

  • Excelでのデータ検索関数について

    Excelでのデータ検索について悩んでいます。 例えば、A列では「あ~お」、B列では「A~H」でC列ではデータが入っている場合でA列の「い」、B列の「C」のデータを検索したいときはどのように関数を組み合わせれば良いでしょうか?色々試したのですがなかなかうまくいきません。vlookup、index関数で組み合わせてできるのでしょうか?やはりVBAでしか無理なのでしょうか? どなたかご存知の方、ご教示ください。

  • エクセルのVBAマクロについて

    エクセルのVBAマクロについて、添付のような物を考えているのですが、宜しくお願いします。 B3~E15に関数を入れて、TRUE となったデーターを表示 させるまでは出来たのですが、このデーターをF~I列へ上から順に (空白行は詰めて)順次記録して行きたいのです。 B3~E15に表示させるデーターは、別シートから抽出し、 切り替えますので、結果を表示させたら、ボタンを押して記録し、 再度別データーを入れたらその下に記録して行くような仕組み を考えております。 宜しくお願いします。

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

    検索に使用する関数についてお伺いいたします。 表を二つ作成しました。 シート1には特に項目の指定がなく、番号の若いものから順に左から右に並べた24×8の表があります(表1とします)。 シート2にはいろいろな項目を指定した表があり、B列にランダムに数値が入っています(表2とします)。 表1の範囲に表2のB列の値が入っている場合、表2のA列に◎や*などのなんらかのしるしをしたいのですが、どのような関数を使用すればよいでしょうか? わかりにくい文章で申し訳ありませんが、よろしくお願いいたします。

  • エクセル、VBA、抽出複数検索について

    エクセル、VBA、VLOOKUP、MATCH関数等について出来る方法があれば教えてください。 インチごとに分けてあるシートがあり、(在庫表です) これを参照して、別ブックへVLOOKUP等を使って、サンプルデータのシート4のように表示させたいのですが、 何か方法を使って出来ることは可能でしょうか? 問題点が複数あります 1、VLOOKUPの範囲について、B列が結合されていて、C列は複数行あるため、商品名が入ってきません。 C列については、何千件とデータがあるため、結合することは不可能です。 一致している条件としては商品コードが必ずあり、商品名には「/」が入っております。 =CONCATENATEとVLOOKUPは一緒に使うことは可能ですか? もしくはINDEX関数やIF、SUMPRODUCT等を使うのでしょうか? シート4のような形に出来る方法があれば、教えてほしいです。 VBAは詳しくはないのですが、VBAで出来るのであれば、教えてほしいです。 在庫表はとても作り方が悪いのですが、これを作り直すと言うことは、不可能です。 グループ会社で使っているため、なんとかこの在庫表を使いたいです。 VBAでA列をA5からA100にコードのみ入れた場合、B列に商品名が入るようにVBAで作ることは可能でしょうか? もしくは、検索条件を2つ使って、一つは商品コード完全一致+あいまい検索で【/】で商品名を入れることは可能でしょうか? 関数は調べたのですが、関数では難しいのかなと思います。 宜しくお願い致します。

  • 表のばらばらの文字列を1列にまとめたい 関数

    添付の左の表を右の表にしたいです。 (1)左の表には数式が入っていて、この他にもう一つある表のデータに該当すると1列ごとにSMとかNPとか表示されるようになっています。 (2)この左の表は実際には136列あるので、結果を印刷すると一枚に収まりきらないのです。なので、右の表のように、1列に表示したいのです。 (3)1行のうち、2個以上文字列が入ることもありますが、その可能性は低いので、とりあえず1行に1個ずつ出現すると考えてもらっていいです。(2個以上文字列が出現する場合も分かれば教えてください。) (4)関数でできませんか? またはマクロでもいいです。

  • (エクセル)表から1列の別表をつくりたい。

    表に入力されたものを1列に並び替えをしたいのです。(エクセル関数) エクセルの表から、セルに入力された情報を抜き出し、並び替えたいのですが、行き詰ってしまい質問させていただきます。 (やりたいこと) 添付資料のように、事業所ごとに購入した物品が日付ごとに入力されていきます。この表を一列で並び替えることを したいのですが、現状の表の形で1列に抜き出すやり方が思い浮かびません。ひとつずつリンクを設定していけばいいですが、 それですと、空白のセルができてしまうこともあり、空白を消すためにフィルタをやらなくてはいけず、なんとか関数でどうにかできないと質問させていただきました(つまり空白のセルは飛ばし、隙間のない1列の表に変換したいです)。 (試したこと) (1)vlookup関数を使うために、日付の横に検索列を作ってもみましたが、同じ行に複数の抜き出すべくものがあると、 if関数のネストをいれるにも「if(c5="","",vlookup(v5,b5:r10,2,fasle)」みたくやってみましたが、c5までは取り出せても、 d5,e5,f5・・・と右にずらしていく関数式が思い当たりません。 (2)種類、数量データ入力されている全てのセルの横に(1.2.3.4.5.6.7.8.9.・・・)と数字をいれて検索列をつくり、vlookupとmatch関数の 組み合わせも試しましたが、vlookup関数の性質上、複数列に検索値(「vlookup(検索値,範囲,列番号,検索の型)」)が存在しているとこれも出来ず。 説明が不十分な点もあると思いますが、よろしくお願いいたします。もし、VBAでなければ難しいとのことでしたら、どのようなVBAを組めばいいかもお願いいたします。

  • Excelでのカウントについて。

    B列とC列の1~300行にそれぞれランダムに数値が入っているとします。 そこで、C>Bとなる行が何行あるのかを調べたい場合は、どのような方法がありますでしょうか。 アドバイスよろしくお願いしますm(_ _)m関数で無理な場合はVBAをコピペするくらいの知識はあります。

  • excelの操作について

    まず、A列に時刻の「時」として9~21まで、B列に時刻の「分」として0~59まで、そしてD列に「項目」として商品が入力規則のリストとして設定されています。 C列に =time(a2,b2) を設定して時刻を表示させるようにしています。(1行目は項目行となっています) ですので「表1」は時刻順となっています。 表1は40行まで作られており、状況によって何行入力されるは未定となっています。 この表を「表1」とします このようにしているのは入力担当にキーボード操作をさせない意図があります。 ここからがご質問の中身になります。 表1の隣に、表1にデータが入力されると瞬時に実績の高い順に並び替えて表示させる、「表2」を作成しようとしています。 rank関数、count関数、vlookupなどを組合すなど試行錯誤しているのですが、表2に「0値」が入ってしまったりし、どうもうまくいきません。 何か良い方法をご存知の方、お教えいただけますでしょうか?

  • エクセルの関数でアンケートのクロス集計をしたいです

    以下、表(1)のような表があるとき、表(2)のように算出できる関数を教えてください。 ※表(1)、(2)の画像を添付しました。 【表(1)】 A列 →回答者ID B~F列 →回答者の属性(性別、部署等を数値化) J~R列以降 →I1行の質問番号ごとに回答した選択肢番号 【表(2)】 属性ごとの回答を集計したもの。 (属1-1の場合、B2~G2に選択肢番号を設定しています) 以上の場合で、例えば、 表(1)の属1(B列)で1を選び、かつ、質問1(J列)で1を選んだ回答者の数について、 表(2)の表に入れる式(この場合、表(2)の属1-1)が知りたいです。 実際(2)は、シートを分けて作成したいと考えています。 また、こちらの都合で、今回、ピボットテーブルやマクロ、VBAでなく、 関数で作成する必要があり困っています。面倒なことになり大変恐縮ですが、 ぜひお知恵を拝借願えればありがたいです。 よろしくお願いいたします。

インク残量が認識されない
このQ&Aのポイント
  • スターターインクから純正のインクに交換したら黄色のみ認識されなくなった。残量の少ないスターターインクに戻しても認識されない!
  • お使いの環境については不明です。
  • 関連するソフト・アプリや電話回線の情報も不明です。
回答を見る

専門家に質問してみよう