• ベストアンサー

エクセルの関数について

たとえば、列Aに甲120または150列Bに500列Cに甲120-500と表示させているんですが、データを昇順に並べ替えるとき、甲が入っているとうまく並べかえることができません。甲120→甲1200→甲200→甲2000とういふうになってしまいます。これを解消する方法ありますか?または、いったん甲と数字をばらばらにして(その関数も教えてください)甲と本番と枝番を各々結合させることはできますか?(甲がない大字の分と枝番がない場合もあります) よろしくお願いします。 列A  列B  列C 本番  枝番  地番 甲120  50   甲120-50 1500   25   1500-25 2540       2540 甲1352      甲1352

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.2

=IF(AND(LEN(A2),LEN(B2)),A2&"-"&B2,A2&B2) で本番+枝番=地番にできます。 並べ替えを考えるなら1列追加 列A  列B  列C  列D 甲  本番  枝番  地番 甲  120   50  甲120-50    1500   25  1500-25    2540      2540 甲  1352      甲1352 の様にすればいいのでは? こちらの場合は =IF(AND(LEN(B2),LEN(C2)),A2&B2&"-"&C2,A2&B2&C2)

francede
質問者

お礼

LEN関数とIF関数を組み合わせればいいのですね。参考にさせていただきます。ありがとうございました

その他の回答 (4)

回答No.5

#3の補足です。 列A、列Bを結合して列Cをつくる =A1&IF(ISBLANK(B1),"","-"&B1) 説明:まずAはそのまま表示、Bに何もなければそれで終わり、Bが空セルじゃなければ"-"とBを表示。 文字の連結は、CONCATENATEでも&でもいいです。。。

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

失敗の記。 漢字がある列はA,C列で、B列は通常の数字ですね。 普通は甲123を桁を合わせて甲   123とか 甲0000123のようにデータをそろえてつくり、ソートするのです。やって見ました (例データ)A列とB列 丙23455 丙0023455 甲123 甲0000123 甲1 甲0000001 乙3456 乙0003456 123455  0123455 1245  0001245 123  0000123 12  0000012 B列は =IF(ISNUMBER(A1)," "&MID("0000000",1,7-LEN(A1))&A1,LEFT(A1,1)&MID("0000000",1,8-LEN(A1))&RIGHT(A1,LEN(A1)-1)) で出しました。スペースにするときは゛0000000゛をスペース7桁にすれば良い。 しかしこれをソートすると 12  0000012 123  0000123 1245  0001245 123455  0123455 乙3456 乙0003456 甲1 甲0000001 甲123 甲0000123 丙23455 丙0023455 となって、甲乙丙の順に並ばない。降順にしても同じ。 ですからこの順に並べたいなら、甲=1,乙=2、丙=3 と置換えた列をソートキー用の列として作らないといけない(注)。甲乙丙の3つならまだなんとかなるが、多くなると大変。それにしてもC列用にもう1列必要です。 このケースは面どくさい例ですね。 (注)1列に甲、乙、丙だけの列を作り、ソートのオプションの「甲、乙、丙、丁・・」を指定してソートする方法がある。これがベターかも。しかしA列で2列、C列で2列になってしまう。 なお上記B列はP付きの書体「以外」 を使って見てください。すっきり並びます。 (結論) 第1文字が数字出なければ、1文字だけある列にセットする。 残りを数字にするか、上記のように0かスペースを先頭部に埋めて桁ぞろえする列を作る。C列も同じ。 最後に下3桁でソートし上2桁でソートする。 A1+A2+B+C1+C2の5列です。

回答No.3

甲+数字を別々のセル(セル1とセル2)に分ける ・セルが数字じゃなかったら、セル1に最初の文字、セル2には2文字目以降を入れる ・セルが数字だったら、セル1は空欄、セル2は数字を入れる セル1 =IF(ISNUMBER(A1),"",LEFT(A1,1)) セル2 =IF(ISNUMBER(A1), A1, RIGHT(A1,LEN(A1)-1)) 二つのセルをつなぐ =A1&A2

francede
質問者

お礼

IFとLENにCONCATENATE関数を組み合わせればいいのですか?

  • elmclose
  • ベストアンサー率31% (353/1104)
回答No.1

D1に次の数式を入れてみてください。 =VALUE(RIGHT(A1,LEN(A1)-1)) そして、これをD列の各セルにコピーしてください。 これは、つまり「甲」を分離して、数値のみを取り出しています。従って、D列をキーとして昇順に並べ替えを行なえば、甲の本番順に並べることができます。 甲が入っているものと入っていないものとが混在している場合や、甲のほかに乙とか丙も入っている場合は、頭の一文字によって場合わけする(=if()を用いる)などして、所望の順序を得ることができます。 さらに質問があれば、書いてください。

francede
質問者

お礼

VALUE関数とLEN関数の使用方法がいまいち分からなかったので、参考になりました。まだまだ関数初心者なので一から作ってみます。ありがとうございました

関連するQ&A

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

    たとえば、A列に50B列に100と入力したら、C列に50-100と表示させるときに、=CONCATENATE()を使用して50-100と値をかえすことができますが、A列に100B列には値がないときは、C列には100とだけ表示させるにはどういった関数を使えばいいですか? 例A列 本番(100)B列 枝番(50)のときは、C列は100-50 もし、A列 本番(1200) B列 枝番 (なし:入力なし)のときは、C列 1200のみ表示です。 よろしくお願いします。

  • アクセスの並べ替えについて

    現在アクセスで6万近くのデータを処理しています。 大字名と小字名及び地番(本番と枝番あり)を随時入力しています。 アクセス終了時に、並べ替えをしたいのですが、フィルタを使用して並べ替えの優先順位をつけました。コード(大字名で並べ替えるためにもともとある番号)→本番→枝番の順番で並べ替えするように設定しました。けれど、本番には500といった数字以外に500・520合併といった数字以外のものも含まれるため本番と枝番はプロパティをテキスト型にしています。そして並べ替えを実行すると、たしかにコード順にはなっているのですが、地番が100→1000→200→2000→というふうに必ずしも昇順になりません。どのように設定しなおしたらよろしいでしょうか?教えてください。

  • エクセルの関数

    A列に数字が数字が入っています  B列にもA列に近い数字が入っています たとえば A2に51 B2に50  の場合 C2には51と表示 A3に32 B3に34  の場合 C3には34と表示 したいのです。 ようするに 同じ横の数字で C列に関数を入れて A列とB列を比べて 大きな数字の方を入どんな関数をいれたらいいでしょうか?

  • エクセル関数のことで困っています。

    今、簡単な表計算の表を作っていますが、先に進まず困っています。 A1~A200のセルに1~200の番号が昇順で入っています。そしてデータとして,B2,C2,D2,E2 に各々a、b、c、dが入っており,,B3,C3,D3,E3 にa1、b1、c1、d1・・・・・・・・・・・・B200,C200,D200,E200にw,x,y,zのようにB,C,D,E列に適当な数が入っています。 そこで、E列の値で昇順  SMALL(D$1:D$200,A1)  に並べ替え、同時にB,C,D,Eの値も返したいのです。つまりエクセルの並べ替え機能を関数で自動で行いたいのです。 今は、関数の、ROW,SUMPRODUCT,COUNT,INDEX,LARGE,COUNTIF,COLUMN,などを使い関数バーに5行ほどになり、処理にとても時間がかかります。 何とか、簡単で早い計算式はないでしょうか。 よろしくおねがいします。

  • Excelの関数で悩んでいます。

       A   B   C  1 1  A君   3  2 2  B君   6  3 3  A君   9  4 4       12  5 5       15  6 6  B君   18  と、あるとき 「B3」にはA列の数字とC列の数字が一致するB列の値を入れたいのですが、 index関数とかmach関数を使ってもうまくいきません。 どなたか、ご指導よろしくお願いします。

  • エクセルの関数について教えていただけたらうれしいです。

    エクセルの関数について教えていただけたらうれしいです。 例> A B C 01 70 1 01 20 01 10 02 20 02 50 1 02 30 03 80 1 03 20 04 60 1 04 20 04 20 上記のように、A列内に同じ文字(数字など)がある場合、それぞれのB列にある値の最大値がある、C列へ「1」などのフラグが立つような関数はどうしたらよいのでしょう? 説明が下手ですみません。 A列の「01」が3つあるうち、B列の「70」が最大値なので、C列に「1」が付く。 A列の「02」が3つあるうち、B列の「50」が最大値なので、C列に「1」が付く。 A列の「03」が2つあるうち、B列の「80」が最大値なので、C列に「1」が付く。 A列の「04」が3つあるうち、B列の「60」が最大値なので、C列に「1」が付く。 このようになるようにC列に入れる関数が知りたいです。 よろしくお願いいたします。

  • エクセルの関数を教えて下さい。

    エクセルの関数の質問です。 例えば、A列に1~10までの数字があったとします。 そしてB列に、偶数(2、4、6、8、10)を入力したとします。 そしてC列に、A列にはあって、B列には無いものを抜き出す関数は何になりますでしょうか? (B列を入力した時点で、C列には1、3、5、7、9が自動で入るようにしたい) 宜しくお願い致します。

  • 並び替え機能を使わずに関数で並び替える

         A列 B列 C列  1行目 甲  9  商品G 2行目 乙  4  商品F 上の表をB列の昇順で並びかえ、下のように再配置するにはどのような関数を書けば良いでしょうか。並び替え機能を使わず、関数で上の表の下に下の表を配置します。      A列 B列 C列  1行目 4  乙  商品F 2行目 9  甲  商品G

  • エクセルの関数についての質問です

    エクセル2010で A1のセルに「○」が入力されると +3 A2・A3・A4 のセルはどこか一箇所にでも○が入れば、1を足します。 二箇所、三箇所に入っても 1しか足しません。 その合計数をBの列に表示させるようにしたいのです。 Bの1~4のセルは結合されています。 すべてに○が入った場合は、B列の数字は 3+1=4 A1にしか○が入らなかった場合のB列の数字は3になります。 3+0=3   A   B   1 ○ 2 ○ 3     4 4 ○   ○が入れば、3を足す  一箇所にでも入れば1を足す それぞれ別の関数は出来たのですが ふたつの条件の合計を出す式が出来ません。 非表示の列を作って、そこにまずは別々に数字を出して それを合計させる手もあると思うのですが 列を増やしたりせずに、関数だけで、B列に数字が入るようにしたいのです。 うまく伝わりますでしょうか どうぞよろしくお願いします。

  • エクセルの関数

    A列に約500行に渡ってランダムに5桁の数字(10000~99999でこの間抜けている数字はある)があります。(重複する数字はありません。)  ここで、例えばB列にA列にある30000~39999までの該当する数字をB1、B2、B3・・・・と該当する数字だけ昇順に全部抽出したいのですが、この場合の式を教えて下さい。

専門家に質問してみよう