• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの表で条件を指定しての整列)

エクセルの表で条件を指定しての整列

このQ&Aのポイント
  • エクセルの表で条件を指定して整列させようとしています。A列の商品名に、B列、C列の2つの条件が付いた商品があり、D列に在庫数を入れています。
  • 行のバラバラになってしまった表を元のように並べ直す方法について教えてください。
  • 実際の商品数は10,000程あり、焦っていますが、確実に元に戻せる方法を教えてください。

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

  • ベストアンサー
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.3

A表のD列に作業列を挿入 D1セルに =CONCATENATE(A1,B1,C1) データ最終行までコピー B表のD列に =VLOOKUP(CONCATENATE(A1,B1,C1),A表シート!D:E,2,0) データ最終行までコピー B表シートを全選択してコピー、新しいシート(C表)に値のみの貼付け

fishman55
質問者

補足

ご回答感謝いたします。 皆様からお教えいただきました方法を参考にさせていただき、私の状況に合った簡単な方法にて何とか並べ替える事に成功致しました。 方法は次の通りです。 バラバラになっている「画像A表」にて、D列に一列追加し、列名をD1にABCとし、D2に「=A2&B2&C2」として3条件をくっつける。 D2をクリック選択してD列の一番したまでドラッグしてコピー。  D列に対してcountif関数にて重複が無い事を確認。(「=COUNTIF(D:D,D2」とし一番下までドラッグ。全て1である事をチェック) 正常な並びの画像B表にsheet1を追加し、sheet1に上での作業で得たデータを全てコピー&ペースト。 B表のシートを最初の表示にもどし、D2に「=VLOOKUP(A2&B2&C2,Sheet1!D:F,3,FALSE)」と記入し、ENTER。それを一番下までドラッグ。 得た値をコピーし、E列に条件を「値」でペースト。 E1を「在庫数」とし、作業に使ったD列を削除。 このような方法で元に戻しております。 胸をなでおろしています。ありがとうございました。

その他の回答 (3)

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

こんばんは! 一案です。 ↓の画像のように別Sheetに各列の並び順のデータを作成しておきます。 今回はSheet2に作成したとして・・・ 元データのあるE2セル(作業用)に =MATCH(A2,Sheet2!A:A,0)*10^4+MATCH(B2,Sheet2!B:B,0)*10^2+MATCH(C2,Sheet2!C:C,0) という数式を入れE2セルのフィルハンドルでダブルクリック! E列の昇順に並び替えてみてはどうでしょうか? 最後のE列すべてを削除して完了です。 ※ 各列99種類のデータまで対応できるようにしていますが、データの種類がもっと多い場合は 10の○乗で調整します。m(_ _)m

fishman55
質問者

補足

細かくお教えいただきありがとうございます。参考にさせていただきました。 皆様からお教えいただきました方法にて試行し、私の状況に合った簡単な方法にて何とか並べ替える事に成功致しました。 方法は次の通りです。 バラバラになっている「画像A表」にて、D列に一列追加し、列名をD1にABCとし、D2に「=A2&B2&C2」として3条件をくっつける。 D2をクリック選択してD列の一番したまでドラッグしてコピー。  D列に対してcountif関数にて重複が無い事を確認。(「=COUNTIF(D:D,D2」とし一番下までドラッグ。全て1である事をチェック) 正常な並びの画像B表にsheet1を追加し、sheet1に上での作業で得たデータを全てコピー&ペースト。 B表のシートを最初の表示にもどし、D2に「=VLOOKUP(A2&B2&C2,Sheet1!D:F,3,FALSE)」と記入し、ENTER。それを一番下までドラッグ。 得た値をコピーし、E列に条件を「値」でペースト。 E1を「在庫数」とし、作業に使ったD列を削除。 このような方法で元に戻しております。 胸をなでおろしています。ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 今仮に、A表がSheet1に存在していて、そのA列に入力されている番号の文字数は必ず6文字以内(必要に応じてもっと多い文字数を入力可能になる様に設定し直す事も可能です)であるものとして、B列に入力されている項目1の文字数は必ず4文字以内であるものとします。  そして、Sheet3のA3セルとA7セルを作業用のセル、Sheet3のC列~E列を作業列として使用して、Sheet2のA列~C列にC表を表示させるものとします。  まず、Sheet3のA3セルにA表の番号に入力する文字列(或いは数値)の文字数が何文字以下であるのかを示す数値(ここでは仮に6文字以内であるものとして6を入力する事にします)を入力して下さい。  次に、Sheet3のA7セルにA表の項目1に入力する文字列(或いは数値)の文字数が何文字以下であるのかを示す数値(ここでは仮に4文字以内であるものとして4を入力する事にします)を入力して下さい。  次に、Sheet3のC2セルに次の関数を入力して下さい。 =IF(OR($A$3<1,$A$7<1,ISERROR(1/(INT($A$3)&""=$A$3&"")/(INT($A$7)&""=$A$7&"")),SUBSTITUTE(SUBSTITUTE(ASC(INDEX(Sheet29!$A:$A,ROW())),"‐",),"-",)="",SUBSTITUTE(SUBSTITUTE(ASC(INDEX(Sheet29!$B:$B,ROW())),"‐",),"-",)=""),"",REPT(0,$A$3-LEN(INDEX(Sheet29!$A:$A,ROW())))&INDEX(Sheet29!$A:$A,ROW())&"★"&IF(ISNUMBER(MATCH(JIS(UPPER(INDEX(Sheet29!$B:$B,ROW())))&"a",{"a","La","LLa","Ma","Sa","SSa","フリーa"})),LOOKUP(JIS(UPPER(INDEX(Sheet29!$B:$B,ROW())))&"a",{"a","La","LLa","Ma","Sa","SSa","フリーa"},{"z","d","e","c","b","a","f"})&REPT(CHAR(1),$A$7-1),"y"&INDEX(Sheet29!$B:$B,ROW())&REPT(CHAR(1),$A$7-(LEN(INDEX(Sheet29!$B:$B,ROW())))))&"☆"&INDEX(Sheet29!$C:$C,ROW()))  次に、Sheet3のD2セルに次の関数を入力して下さい。 =IF(COUNTIF($C2,"*?★*?☆*?"),COUNTIF($C:$C,">"&$C2),"")  次に、Sheet3のE2セルに次の関数を入力して下さい。 =IF(ISNUMBER($D2),RANK($D2,$D:$D)+COUNTIF($C$1:$C2,$C2)-1,"")  次に、Sheet3のC2~E2の範囲をコピーして、同じ列の3行目以下に(A表の行数を上回るのに十分な行数となるまで)貼り付けて下さい。  次に、Sheet2のA2セルに次の関数を入力して下さい。 =IF(ROWS($2:2)>COUNT(Sheet3!$E:$E),"",INDEX(Sheet1!$A:$D,MATCH(ROWS($2:2),Sheet3!$E:$E,0),COLUMNS($A:A)))  次に、Sheet2のA2セルをコピーして、Sheet2のB2~C2の範囲に貼り付けて下さい。  次に、Sheet2のA2~C2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。  これで表Aのデータを順序良く並べ替えた表がSheet2に自動的に表示されます。  そして、新しいデータを追加する際には、Sheet2の表のどこに入力すれば良いかを一々確認する事無く、単に、Sheet1のA表の中で、空欄となっている行に順不同で入力して行くだけで、Sheet2の表は自動的に新たに並び替えられて行きますので、規則を気にせずに入力する事が可能となります。  尚、A表に入力したデータを書き換える必要が生じた場合には、順不同に入力されているためにどこを書き直せば良いのか判り難いと思われるかも知れませんが、その様な場合にはExcelのフィルター機能を使用して、該当項目が入力されている行のみを表示させる事で、書き換えねばならない箇所を簡単に表示させる事が出来ます。 【参考URL】  よねさんのWordとExcelの小部屋 > Excel(エクセル)講座の総目次 > Excel(エクセル)基本講座の目次 > オートフィルタ(データ抽出) > オートフィルタ   http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter.htm#autofilter  よねさんのWordとExcelの小部屋 > Excel2007(エクセル2007)基本講座の総目次 > Excel2007(エクセル2007)基本講座:オートフィルタの使い方 > 文字列データで抽出する   http://www.eurus.dti.ne.jp/~yoneyama/Excel2007/excel2007-filter.html#autofilter

fishman55
質問者

補足

ご回答感謝いたします。 皆様からお教えいただきました方法を参考にさせていただき、私の状況に合った簡単な方法にて何とか並べ替える事に成功致しました。 方法は次の通りです。 バラバラになっている「画像A表」にて、D列に一列追加し、列名をD1にABCとし、D2に「=A2&B2&C2」として3条件をくっつける。 D2をクリック選択してD列の一番したまでドラッグしてコピー。  D列に対してcountif関数にて重複が無い事を確認。(「=COUNTIF(D:D,D2」とし一番下までドラッグ。全て1である事をチェック) 正常な並びの画像B表にsheet1を追加し、sheet1に上での作業で得たデータを全てコピー&ペースト。 B表のシートを最初の表示にもどし、D2に「=VLOOKUP(A2&B2&C2,Sheet1!D:F,3,FALSE)」と記入し、ENTER。それを一番下までドラッグ。 得た値をコピーし、E列に条件を「値」でペースト。 E1を「在庫数」とし、作業に使ったD列を削除。 このような方法で元に戻しております。 胸をなでおろしています。ありがとうございました。

  • shintaro-2
  • ベストアンサー率36% (2266/6245)
回答No.1

図が小さくてよく判らないのですが、 A列を最優先 B列を第二優先でソートをかけて直りませんか?

fishman55
質問者

補足

ご回答ありがとうございます。 A列に共通の値が多数、B列に共通の値が多数、C列に共通の値が多数なので当方では上手くいかないようなのですが、優先させるソートの方法で上手くできるものなのでしょうか。 おっしゃるとおりA列の値とB列の値とC列の値が共通のものを探して並び替えればできると思いますが、並び替えの条件が昇順や降順でできるような規則的なものでないというところでも苦慮しております。 具体的な方法がございましたらよろしくお願い致します。