- ベストアンサー
同じ末尾数字にまとめる方法
どなたかご存じでしたらご教授願います。 下記の様に数字が、1~43迄の最大43個の数字があるとします。 1 2 3 4 5 6 7 8 9 10 11 12 13 18 19 20 33 37 43 これらを、同じ末尾の数字で下記のようにまとめる方法が知りたいです。 末尾1:1 11 末尾2:2 12 末尾3:3 13 33 43 末尾4:4 末尾5:5 末尾6:6 末尾7:7 37 末尾8:8 18 末尾9:9 19 末尾0:10 20 使用しているエクセルは2007です。 以上、よろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
返す値が文字列数字でもよいなら、以下の数式を入力し、右方向に適当数、下方向に10行オートフィルコピーしてください(データが100個までの場合)。 =INDEX($A:$A,SMALL(INDEX((RIGHT($A$1:$A$100,1)<>RIGHT(ROW(A1),1))*1000+ROW($A$1:$A$100),),COLUMN(A1)))&""
その他の回答 (5)
1.範囲 A2:A11 に上から数値 1、2、…、9、0 を入力 2.範囲 A2:A11 に次の“ユーザー定義”を設定 "末尾"G/標準 3.お示しの「1~43迄の最大43個の」数値をセル B1 から右へコピー 4.セル B2 に式 =IF(MOD(B$1,10)=$A2,B$1,"x") を入力して、これを右方および下方へズズーッとドラッグ&ペースト 以上の結果を添付図に示す。 5.範囲 A1:T11 を選択して、[コピー]→[値の貼り付け]を実行 6.範囲 A1:T11 を選択して、文字 x を空白に一発で[すべて置換]を実行 7.範囲 A1:T11 を選択して、[編集]→[ジャンプ]→[セル選択]を実行 8.“空白セル”に目玉を入れて、[OK]をパシーッ 9.[編集]→[削除]を実行 10.“左方向にシフト”にチェックを入れて、[[OK]をパシーッ] 11.1行目を削除
お礼
回答ありがとうございます。 マトリクス方式もありですね。
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! VBAの方が簡単なような気がしますが・・・ 関数で無理矢理やってみました。 Sheet1のデータ(A列)をSheet2に表示するようにしてみました。 ↓の画像でSheet2のB1セルに =IF(SUMPRODUCT((MOD(Sheet1!$A$1:$A$50,10)=MOD(ROW(A1),10))*(Sheet1!$A$1:$A$50<>""))<COLUMN(A1),"",INDEX(Sheet1!$A$1:$A$50,SMALL(IF(MOD(Sheet1!$A$1:$A$50,10)=MOD(ROW(A1),10),ROW($A$1:$A$50)),COLUMN(A1)))) これは配列数式になってしまいますので、この画面からコピー&ペーストする場合は B1セルに貼り付け後、数式バー内で一度クリック! 編集可能になりますので、Shift+Ctrlキーを押しながらEnterキーで確定! 数式の前後に{ }マークが入り配列数式になります。 これを列方向と行方向にオートフィルでコピーすると 画像のような感じになります。 ※ 数式は50行目まで対応できるようにしています。 参考になれば良いのですが・・・m(_ _)m
お礼
回答ありがとうございます。 また、私が結果のサンプルとして提示した結果をつけて頂き判りやすい内容です。
- keithin
- ベストアンサー率66% (5278/7941)
A1からA43に最大43個の数字を並べ, どこかてきとーなセルに =IF(COLUMN(A1)>COUNT(1/$A$1:$A$43/(MOD($A$1:$A$43,10)=MOD(ROW(A1),10))),"",SMALL(IF(($A$1:$A$43<>0)*(MOD($A$1:$A$43,10)=MOD(ROW(A1),10)),$A$1:$A$43),COLUMN(A1))) と記入してコントロールキーとシフトキーを押しながらEnterで入力し, 右にてきとー数,下にあと9行,コピーします。
お礼
回答ありがとうございます。 関数の使用方法を示して頂き参考になります。
- imogasi
- ベストアンサー率27% (4737/17070)
珍しい、面倒な質問だ。VBAで無いと関数とソート操作では面倒かも。 ソートして0が一番下に行ってくれないので、工夫が必要だった。 質問の例しかテストしてないので、十分テストしてみて。 (1)修正ソートキーをB列に作る Sub test01() d = Range("A65536").End(xlUp).Row MsgBox d For i = 1 To d s = "" x = Cells(i, "A") For j = Len(x) To 1 Step -1 If Mid(x, j, 1) = "0" Then s = s & "a" Else s = s & Mid(x, j, 1) End If Next j Cells(i, "B") = "'" & s Next i End Sub (2)B列で(A列もつれ持って)ソートする。VBAでも出来るが、手操作でやる。 中間結果 1 1 11 11 2 2 12 21 3 3 13 31 33 33 43 34 4 4 5 5 6 6 7 7 37 73 8 8 18 81 9 9 19 91 10 a1 20 a2 (3)望みの表に編集する Sub test02() d = Range("A65536").End(xlUp).Row x = Cells(1, "B") j = 5 k = 1 Cells(k, j) = Cells(1, "A") m = Left(x, 1) For i = 2 To d x = Cells(i, "B") If Left(x, 1) = m Then j = j + 1 Cells(k, j) = Cells(i, "A") Else k = k + 1 j = 5 Cells(k, j) = Cells(i, "A") m = Left(x, 1) End If Next i End Sub ーーーー 結果 E列より右列に 1 11 2 12 3 13 33 43 4 5 6 7 37 8 18 9 19 10 20
お礼
早速のご回答ありがとうございます。 VBAではこうなるんですね。 早速試してみます。
「まとめる」の定義が不明。 とりあえず末尾の取得は 「数字」の場合:RIGHT関数 「数値」の場合:10で割った余り でできます。
お礼
早速のアドバイスありがとうございます。
お礼
回答ありがとうございます。 前までの方と比べると とてもシンプルな回答を頂き これならいつでも、コピー&ペーストで使用できそうですね。