- ベストアンサー
エクセルでこんな数列を記入したい
エクセルでこんな数列を記入したいのですが、どのようにすればよいでしょう? A列 B列 1 1 1 2 1 3 1 4 2 2 2 3 2 4 3 3 3 4 4 4 要するに1~4の総当たり表の結果を縦(行)に記載します。 実際は100までありますので、手作業は非常に苦痛です。 何か簡単な方法はありませんでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
このマクロを実行すれば良いです。 Sub test() Const x = 100 Dim a As Long, b As Long, r As Long r = 1 For a = 1 To x For b = 1 To x If a <= b Then Cells(r, 1).Value = a Cells(r, 2).Value = b r = r + 1 End If Next b Next a End Sub ところで、総当たりということですが、それなら、A列とB列が同じ数字にならないと思うのですが、同じ数字になっても大丈夫なのでしょうか? 同じ数字にならないようにするなら、 If a <= b Then を If a < b Then に変えてください。
その他の回答 (4)
極めて原始的な方法ですが… Fig-1 A B C D E F 1 1 2 3 4 5 2 1 001,001 3 2 001,002 002,002 4 3 001,003 002,003 003,003 5 4 001,004 002,004 003,004 004,004 6 5 001,005 002,005 003,005 004,005 005,005 1.Sheet1 のセル A2 から下方に、および、セル B1 から右方に数値 1、2、…、5 を入力(5 まででなく、100 以上でも構わないが、簡 単のためにここでは 5 までとしておく) 2.セル B2 に次式を入力して、これを右および下にドラッグ&ペース ト(その結果を Fig-1 に示している) =IF($A2<B$1,"",TEXT(B$1,"000")&","&TEXT($A2,"000")) 3.範囲 B2:F6 に table という名前を付ける。 以降、Sheet2 における作業です。 4.セル A1 に次式を入力して、これを下方に(数値 0 が現れるま で)ズズーッとドラッグ&ペースト(その結果が Fig-2 のA列) =OFFSET(INDIRECT(CELL("address",table)),MOD(ROW(A1)-1,ROWS(table)),(ROW(A1)-1)/ROWS(table)) 5.範囲 A1:A26 を[コピー]して、これをセル B1 に[値の貼り付け]を 実行した後で、B列を[昇順]に[並べ替え](その結果が Fig-2 の B列) Fig-2 A B 1 001,001 0 2 001,002 3 001,003 4 001,004 5 001,005 6 7 002,002 8 002,003 9 002,004 10 002,005 11 12 001,001 13 003,003 001,002 14 003,004 001,003 15 003,005 001,004 16 001,005 17 002,002 18 002,003 19 004,004 002,004 20 004,005 002,005 21 003,003 22 003,004 23 003,005 24 004,004 25 005,005 004,005 26 0 005,005 6.範囲 B1:B11 を選択してマウスの右クリックから[削除]を選択した 後“上方向にシフト”にチェックを入れて「エイヤッ!」と Enter キーを叩き付け 7.B列を選択して、[データ]→[区切り位置]を実行 8.“カンマやタブなどの…区切られたデータ”にチェックを入れて [次へ]をクリック 9.“カンマ”にチェックを入れて[完了]をクリック 10.お好みでA列を削除
- _Kyle
- ベストアンサー率78% (109/139)
いまさらな気もしますが、「簡単な方法」ということなので。 ■1~100の数字から, 重複を許し, 順序を考慮せず,2つ選ぶ総ての組合せ。 甲案 : 数式で A1セル : 1 B1セル : 1 A2セル : =IF(B1=100,A1+1,A1) B2セル : =IF(B1=100,A2,B1+1) として、A2:B2セルを下方にフィル。 ※毎回端からカウントしなくても、直上行のみ見れば足ります。 --------------------------------------------------- 乙案 : マクロで '============↓ ココカラ ↓============ Sub Sample() Dim m As Long, r As Long, i As Long, j As Long m = 100 r = 1 For i = 1 To m For j = i To m Cells(r, 1).Value = i Cells(r, 2).Value = j r = r + 1 Next j Next i End Sub '============↑ ココマデ ↑============ ※内ループをiから始めれば判定は不要です。 以上ご参考まで。
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
話がシンプルになるのは、A列を1からじゃなくて100から始めるパ ターンですね。まずはA1に100って入力します。 A2: =if(countif($A$1:A1,A1)<A1,A1,A1-1) これで組み合わせの数だけ下にドラッグ。100~1なら101*50の5050 行ですね。B列はシンプルに B1: =countif($A$1:A1,A1) これだけ。とはいえ5000行以上もあると再計算に意外な時間がかか るので、全体を選択してコピー→形式を選択してペーストで値にし ちゃった方がいいかも。しかもそうすればB列優先の昇順で並べかえ て列を入れ替えれば、希望どおりの並び方になっちゃう特典付き。
- maron--5
- ベストアンサー率36% (321/877)
お礼
皆様丁寧にありがとうございました。 結論から言うと、マクロを自作して解決しました。 ありがとうございました。