- ベストアンサー
エクセルで順列の列挙
例えば 1 と 2 という2個の数字(文字)がある場合, A列 B列 1 2 2 1 1 2 3 という3個の数字(文字)がある場合, A列 B列 C列 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 1 2 3 4 という4個の数字(文字)がある場合, A列 B列 C列 D列 1 2 3 4 1 2 4 3 ~ 省略 ~ 4 3 2 1 という具合に n 個の数字(文字)がある場合,過不足無く列挙させるマクロ(VBA)を教えてください。 Excelの仕様上65,536行までしかないので,「8個の場合」とかいう限定された個数でもかまいません。 また,123,132,213,…,321 という具合に数値として1列に並べる方法でもかまいません。 また昇り順でなくてもかまいません。 よろしくおねがいします。
- オフィス系ソフト
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 学校の宿題とかではありませんよね。 以下は、再帰を使った、順列生成のアルゴリズムです。 たぶん、大丈夫だと思います。後は、65536を超えないようにしてください。 Const N As Integer = 3 '生成する順列数 Dim k As Long Dim p(1 To N) Sub perm_test() Dim i As Long ActiveSheet.Cells.ClearContents k = 0 For i = 1 To N p(i) = i Next i perm 1 End Sub Private Sub perm(i As Long) Dim j As Long, t As Long If i < N Then For j = i To N t = p(i): p(i) = p(j): p(j) = t perm i + 1 t = p(i): p(i) = p(j): p(j) = t Next j Else For j = 1 To N Cells(k + 1, j).Value = p(j) Next j k = k + 1 End If End Sub
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
過去に似たような質問がありました (セルを分けていませんが) http://okweb.jp/kotaeru.php3?qid=1126322 http://okweb.jp/kotaeru.php3?qid=1128457
お礼
回答ありがとうございました。 実際に2つとも実験させていただきました。 特に「質問:EXCELのマクロ :再帰的式を使って書き換える」は参考になりました。 JavaScriptの方ではよくお名前を拝見しておりましたが,実は何でもプログラムできる方だったのですね。 今後ともよろしくおねがいします。
関連するQ&A
- エクセルで有効データのみ列挙する方法について
A列とB列は数字が列挙、C列に『=if(A1>0,A1*B1,""』が入力されています。 C列に表示されている数字のみD列に列挙される関数のような物ってありますか? フィルタ機能使ったりしないでA列とB列にデータを入力したら瞬時にD列にデータが集まる方法があれば教えて下さい。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- エクセルかマクロで・・・
エクセル関数かマクロで作りたいのですが、 A列に数字B列に個数を入力していくとします。 A列の数字をB列の個数分だけC列に表示したいのです。 例えばA1に300、B1に5、A2に500、B2に6と入力した場合、 C1からC5に300、C6からC11に500、と表示するにはどうしたらよい でしょうか。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- ■エクセル■ PRODUCT関数で「~ではない」。
早速ですが、例えば、 ・A1~A10の範囲に1~5が入っている。 ・B1~B10の範囲に文字列「あ」~「お」までが入っている。 ・C1~C10の範囲に個数が入っている(1~99の数字)。 この場合で、D1のセルに「A1~A10の数字が5で、「お」以外の個数の合計」を求めるときはどういった関数を使えばいいのでしょうか?? =SUMPRODUCT((A1:A10=5)*(B1:B10<>"お")*(C1:C10)) と、入力してもエラーが出てしまうので、困ってます。どうしたらできますか?? よろしくおねがいします。
- ベストアンサー
- オフィス系ソフト
- エクセルの関数について
エクセルのシート1で1行目には見出しがあります。 A1には「店名」の文字 A2には、A店 A3にはC店 A4にはB店 A5にはA店とA2~A200には、ランダムにA店~C店の文字がランダムに入っています。 B2には、「個数」の見出し文字。B2には 3 B3には 201 B4には 42 などとB2~B200まで色々な数字が入っています。 ちなみに B列には 0~300までのランダムな数字。 これをシート2に、B列の数の区分けをしたいのです B列の区分け 0~30 31~50 50~300 よって、シート2のA1には「店名」という文字。B2には 0~30 C2には 31~50 D2には50~300という文字が入っています・ シート2のA2には、A店 シート2のA3には B店 シート2の A4には C店 という文字が入っています。 シート2のB2にはシート1のA店のB列にある B2~B200に入ってる文字の 0~200までに入ってる数字 0~30の セルの個数を出したいのですが どうやってシート2に関数を入れたらいいのですか?教えてください
- ベストアンサー
- Windows 7
- エクセルで教えてくだいSUMPRODUCT
A列B列に文字と数字が混ざって並んでいます A列で7かつB列で0以上の個数を調べたいのですが SUMPRODUCTを使うと文字を0と認識するようでうまくできませんどうしたらいいですか A B 7 9 7 5 7 みかん この場合2個ですが文字のおかげで3になってしまいます
- ベストアンサー
- オフィス系ソフト
- エクセルで同じ数字が連続している個数を関数でセルに出力
A列に1かー1かいずれかの数字が入力されているとき、その行から上方に数えて、B列には1の連続している個数を、C列にはー1の連続している個数を出力したいのです。例えば A列 B列 C列 1 1 0 1 2 0 -1 0 1 -1 0 2 -1 0 3 といった具合です。 この時、B列、C列にはどのような関数を入力すればよいでしょうか。
- ベストアンサー
- その他MS Office製品
- エクセル マクロ 足し算
いつもお世話になります。マクロ勉強中の初心者です。 マクロの足し算を教えてください。 A列 B列 C列 ・・・・ 1 2 3 4 5 6 7 8 9 という数字のデータがあります。 これらのA列の合計、B列の合計・・・など列の合計を出すマクロはわかるのですが、 作成したVBA Range("a4") = Application.WorksheetFunction.Sum(Range("a1:a3")) A列の合計(A1~A3)とB列の合計(B1~B3)とC列(C1~C3)の合計を、D4に合計させる方法を 教えてください。 どうぞよろしくお願いします。
- ベストアンサー
- その他MS Office製品
- エクセルマクロに詳しい方
すいません教えて下さい。 例えば、A1のセルに30、A2のセルに5 A3のセルに7 といった感じで数字があるとして どこかの列のある位置 を基準として 例えば C列の先頭から A1のセルにある 数字の分だけ色分けるマクロってどのようになるのでしょうか この場合 C1からC30までが黒 C31~35までは緑 といった具合にしたいのです。 A列に入る数字は必ずしも 一定ではありません。 できましたら、 マクロを簡単に書いて頂けると大変うれしいです。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルでの連番の処理
お世話になります。 1行目に入力されたデータをルールに沿って2行目以下にどんどん追加していきたいと思っています。 まずD1、E1のセルに数字を入れます。 例:D1に3、E1に25 を入れてマクロを実行するとD列の2行目以下に3,4,5,6…25と連番で入力出来るようにしたいのです。 この例ではD列は24行目まで入力されています。そこで2行目から24行目までのA,B,C列にはそれぞれ1行目のA,B,C列と同じデータを入力します。なおA,B,C列は数字、文字列どちらもあります。空白の場合もあります。 この状態でA~E列の1行目のデータを変更し、仮にD1を2、E1を15としたとします。ここで再度マクロを実行すればD25に2、そして順に連番が入りD38に15が入るようにします。 同時に25行目から38行目までのA,B,C列にはそれぞれ1行目のA,B,C列と同じデータを入力します。 これの繰り返しです。 つまり2行目以下のD列で空白の行以下にどんどん連番を入れていく具合です。 前提としてD1、E1は整数しか入りません。またE1の数字はD1より大きいです。ただD1,E1に同じ数字が入った場合、その数字の1行分だけが入力されるようにします。 以上の処理が自動化できるマクロはできますか? アドバイス願います。
- ベストアンサー
- オフィス系ソフト
- エクセルの関数について
エクセルについてご教授をお願い致します。 C列のセルに入っている文字列があります。 (例えばA-111やB-111Gなど) D列のセルの中から、C列の文字列を検索して、 C列の文字列の次の文字が数字だった場合のみ、 その数字1文字だけを削除する場合はどのようにしたら宜しいでしょうか。 (例えばA-1113の3の部分や、B-111G1の1の部分です。 数字じゃない場合や、次の1文字以降(2文字目)に数字があっても 削除対象ではありません。 あくまで、C列の文字列の次の数字1文字のみです。 (例えばA-11131の場合は3だけ削除でA-1111となります。 Bー111G1Gの場合は、1だけ削除でB-111GGとなります。) 説明がわかりにくいとは思いますが、 この説明でわかって頂ける先生がおられましたら ご教授お願いします。
- ベストアンサー
- Excel(エクセル)
お礼
えっ,し・し・し…宿題… バレたか… というような歳ではないのですよ,残念ながら。 宿題はイヤですけど,2~3日くらいなら宿題があったころにもどってみたい気もします。 回答ありがとうございました! 8桁までならハングアップすることもなかったです。完璧です。すごい。