• ベストアンサー

エクセルでこんな数列を記入したい

エクセルでこんな数列を記入したいのですが、どのようにすればよいでしょう? 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までありますので、手作業は非常に苦痛です。 何か簡単な方法はありませんでしょうか?

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

  • ベストアンサー
  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.3

このマクロを実行すれば良いです。 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 に変えてください。

pugera542
質問者

お礼

皆様丁寧にありがとうございました。 結論から言うと、マクロを自作して解決しました。 ありがとうございました。

その他の回答 (4)

noname#204879
noname#204879
回答No.5

極めて原始的な方法ですが… 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)
回答No.4

いまさらな気もしますが、「簡単な方法」ということなので。 ■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から始めれば判定は不要です。 以上ご参考まで。  

回答No.2

話がシンプルになるのは、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)
回答No.1

B1=IF(A1="","",A1+COUNTIF($A$1:A1,A1)-1) ★下にコピー

pugera542
質問者

お礼

ありがとうございます!大変参考になりました。 もしよろしかったら、A列の方もお教えいただけると幸いです。

関連するQ&A