• ベストアンサー

Excel2007で組み合わせの計算

Excel2007で記号の組み合わせの計算がしたいです。パターンの出力と言うんですかね?ちょっとその辺の単語力に乏しいのですが…。 質問させていただきます。 A列、B列、C列、D列の10行目までにアイウエオカキクケコのいずれかがが各セルに入ってます。A列×B列×C列×D列 この場合は全部で1万通りになります。 できたパターンをF列に一通りずつ(できるならまとめて一発ででもいいのですが)上から入れていき、 F列のパターンの入った先頭セルの隣のセルGに10000通りと表したいたいです。 教えて下さい。

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

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>できたパターンをF列に一通りずつ F列に1万通りのパターンを書き出してみました。 Sub Test()   Dim v(1 To 10000, 0)   Dim Kana As Variant, i As Long   Dim a As Long, b As Long, c As Long, d As Long   Kana = Array("ア", "イ", "ウ", "エ", "オ", "カ", "キ", "ク", "ケ", "コ")   For a = 0 To 9     For b = 0 To 9       For c = 0 To 9         For d = 0 To 9           i = i + 1           v(i, 0) = Kana(a) & Kana(b) & Kana(c) & Kana(d)         Next d       Next c     Next b   Next a   Range("F1:F10000").Value = v End Sub

961awaawa
質問者

お礼

おはようございますwatabe007さん。引き続きのヘルプありがとうございます。ですがまた私の説明不足に気付きました。 A列、B列、C列、D列に自ら好きな記号等を入れてマクロボタンを押して計算結果をF列に並べたいんです。 必ずしも10000通りではなく、好きな記号を好きな数だけ入れてその計算結果をF列に、という訳なんです。 いつも何度もすみません。

その他の回答 (2)

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

VBA向けの課題だと思って、VBAで。 標準モジュールに下記を貼り付け Private Sub test00() Dim rSrc As Range Set rSrc = Range("B2").CurrentRegion MsgBox rSrc.Address PrintCombi Range(rSrc.Address) End Sub Sub PrintCombi(ByVal rSrc As Range) Dim tnFld As Long Dim nRc As Long Dim nConti As Long Dim nRow As Long Dim i As Long Dim j As Long tnFld = rSrc.Columns.Count nConti = 1 With rSrc(1, rSrc.Columns.Count + 2) .CurrentRegion.Clear For i = tnFld To 1 Step -1 nRc = Cells(Rows.Count, i).End(xlUp).Row nRow = 1 For j = 1 To nRc Cells(j, i).Copy Destination:=.Cells(nRow, i).Resize(nConti) nRow = nRow + nConti Next j nConti = nConti * nRc Next i With .Resize(nConti / nRc) For i = 3 To tnFld Range(.Cells(1, i), .Cells(1, i).End(xlDown)).Copy Destination:=.Columns(i) Next i End With End With End Sub ーーー Private Sub test00()を実行。 F、G、H、I列の最初の13行だけ表示してみると、 ア ア ア ア ア ア ア イ ア ア ア ウ ア ア ア エ ア ア ア オ ア ア ア カ ア ア ア キ ア ア ア ク ア ア ア ケ ア ア ア コ ア ア ア ア ア ア ア イ ア ア ア ウ ・・ 以下略。 Sub PrintCombi(ByVal rSrc As Range) 以下のコードは https://oshiete.goo.ne.jp/qa/8315974.html をそっくり借用。Private Sub test00()以下は、わかりやすい方法に改変。 言いたいことは、「ありふれた課題は、WEBをさがせば、コードが見つかることが多い」ということ。

961awaawa
質問者

お礼

imogashiさん。色々なやり方があることがわかりました。ありがとうございました。

  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.1

分かりやすくするため あえて、A,B,C,D列に使う文字種を変えてみました。 添付画像のようなイメージでしょうか。 =INDEX($A$1:$A$10,MID(TEXT(ROW()-1,"0000"),1,1)+1,1) &INDEX($B$1:$B$10,MID(TEXT(ROW()-1,"0000"),2,1)+1,1) &INDEX($C$1:$C$10,MID(TEXT(ROW()-1,"0000"),3,1)+1,1) & INDEX($D$1:$D$10,MID(TEXT(ROW()-1,"0000"),4,1)+1,1) ↑がF1に埋める計算式です。 ざっくり説明すれば、F1~F10000のそれぞれ、 行番号-1を求め、4桁固定長の数字に変換。 1文字目から4文字目までの4つの数値にそれぞれ1を加える。 その数値で A,B,C,D列を縦方向に引き、文字を求め それらを文字連結しました。

961awaawa
質問者

お礼

一番最初の解答ありがとうございます。HohoPapaさん。私はこういったことに全くなれてないんですが、HohoPapaさんならこういったことをどの様な形だとやり易いと思われるんでしょうか? 私は私自身が質問した形が決して良いとは思っておりません。 例えば、競馬の三連単になるんですがご自身で見やすく扱いやすくするには何か推奨とかは有りますかね?(笑。 (お礼に変な質問を乗っけて失礼なんですが…)(笑

961awaawa
質問者

補足

こんにちはHohoPapaさん。 4桁固定ができてないんですがどの様にすれば良いでしょうか。 何か足らないんでしょうか?

関連するQ&A

  • Excel2007で組み合わせ

    Excel2007で記号の組み合わせの計算がしたいです。パターンの出力と言うんですかね?ちょっとその辺の単語力に乏しいのですが…。 質問させていただきます。 A列、B列、C列、D列の10行目までにアイウエオカキクケコのいずれかがが各セルに入ってます。 この場合は全部で1万通りになるんですがそのパターンをF列に並べてからそのパターンの数をF列の先頭で隣のG列に表したいたいです。 誰か教えて下さい。お願いします。

  • Excelで組み合わせ

    Excel2007で記号の組み合わせの計算がしたいです。パターンの出力と言うんですかね?ちょっとその辺の単語力に乏しいのですが…。 質問させていただきます。 A列、B列、C列、D列の10行目までにアイウエオカキクケコのいずれかがが各セルに入ってます。A列×B列×C列×D列 4個×5個×3個×6個=360通り 何通りでもいいのですが できたパターンをF列に一通りずつ(できるならまとめて一発ででもいいのですが)上から入れていきたいです。全部4文字固定です ご協力お願いします。

  • [数学] 記号の組み合わせについての質問です。

    組み合わせについての質問です。皆さん一緒に考えてください。お願いします。 A B C D E 以上の4つの記号の1つ以上の組み合わせは A B C D A B C A B D A C D B C D A B A C A D B C B D C D A B C D の15通りで、15の記号列の記号が(順を問わず)連続して存在する「一列の最も少ない記号列」は B D A B C D C A になると思います。 これをA B C D E F G H Iの9つの記号で行うと、一列の最も少ない記号列はどのような並びの記号列になるでしょうか?

  • エクセル(excel)の計算式(関数)について

    エクセル(excel)の計算式(関数)でよいアイディアがありましたら教えてください。 1行目は項目行です。 セルA1から右に15列=セルO1まで、 a | b | c | d | e | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 と入っています。 2行目からデータとして、 セルA2から右に5列=セルE2まで、 4 | 2 | 2 | 1 | 1 と入力したとします。(データ例(1)) あるいは、 セルA3から右にセルE3まで、 6 | 3 | 0 | 0 | 0 と入力したとします。(データ例(2)) 1つのデータの5個の数字のルールは2つで、 「合計で10以下である。」 「左から順に小さくなるか、同じ数字となる。」 です。 (目的は、) このとき、F列からO列にかけて、 データ例(1)のケースでは、 a | a | a | a | b | b | c | c | d | e データ例(2)のケースでは、 a | a | a | a | a | a | b | b | b | と表示されるように、 つまり、項目行の下にある数だけ、その列の1行目の記号を 1(F列)から右に向かって順に埋めていくような、 F列からO列までの2行目以下に入れる適当な計算式(関数)は ないでしょうか。 拙い説明で申し訳ありません。どなたかよい考えをお持ちの方がいらっしゃいましたらと存じます。 どうぞよろしくお願い致します。

  • エクセルでの計算式を教えて下さい。

    エクセルでの計算式を教えて下さい。 概要はある列のセルの数値と別のセルの数値の組合せによって、特定のセルの数値をコピーして別のセルにそれを表示させる。 具体的には、A列に入ってる数値と同じ行のB列に入ってる数値の組合せパターンにより、予め設定しておいたパターン別の数値をコピーしてそれをC列に表示させます。 つまりA列に1、B列に2という数値が入った時には、1と2の組合せパターンですよね。 Aが1、Bが2の組合せの時には33.5という数値が予めどこかのセルに用意してあり、それをコピーしてC列に表示する。 Aが5、Bが3の組合せの時には27.4という数値があり、それをC列に表示するといった具合です。 A列の数値は1~18、B列の数値も1~18のいずれかです。 組合せパターンは最大で324通りあり、組合せ別の数値には規則性はないので、予めどこかに記入しておきます。 この様な作業を出来る式を教えて下さい。

  • 組み合わせの計算

    6人の中で4人組を作る場合、何通りの組み合わせができるのでしょうか? (A-B-C-DとD-C-B-Aのようなものは同じ組み合わせとします) 書き出したところ、15通りになりましたが、合っているかどうかわかりません。 また、組み合わせの計算方法がありましたら教えてください。 よろしくお願いします。

  • イベントの組み合わせ

    こんにちは。 団体さん同士のイベントの組み合わせの作成方法について困っています。 全10団体、1日に2団体1組で5日工程を決めたいのですが何通りもありキリがありません。 例えば仮に下記の組み合わせのパターン1だとして ・パターン1 1/1 a & b 1/2 c & d 1/3 e & f 1/4 g & h 1/5 i & j ・パターン2(cとdを入れ替えました) 1/1 a & c 1/2 b & d 1/3 e & f 1/4 g & h 1/5 i & j というように若干ずらしつつ全パターンを作りたいと思っています。 今のところ順列や組み合わせでは思った結果を得ることができず、手作業では途方もないです。 何か良い方法はないでしょうか? どうぞお力お貸しください。 よろしくお願いします。

  • 「○○通りのパターンがある」の計算のしかた

    よくこの組み合わせは全部で1万通りのパターンが存在するというようなことを聞きますが、 あれの方程式などはあるのでしょうか。 以下の例で説明をお願いします。 1. [a,b,c]の3つだけの文字列を作った時のパターン数 2. 英数字のみのパスワード4桁のパターン数 3. [a,b,c,d,e,f,g]の中から4文字をつかった文字列のパターン数。

  • エクセル セルの組み合わせ

    エクセル表の中で目的の数値になるセルの組み合わせを探したいです A列  B列に a  210 b  80 c  403 d  196 e  221 f  307 g  325 h  233 i  237 j  307 k  487 L  267 のようにあります。 これを組み合わせて980に近い組み合わせをいくつかさがしたいのですが、 どうしたらできるでしょうか。重複はできないのです。 ソルバーで挑戦しようと思いましたが、使い方がわかりません。 だれか教えてください。おねがいします。

  • 組み合わせの計算に関する難題

    こんにちは. かなり難しい問題に苦しめられています. 回答者のみなさんの知恵をお貸しください. よろしくお願いします. nを20以上の任意の整数とします. 次の5つの条件(1)~(5)を同時に満たすような整数a,b,c,dについて考えます. (1)a+b+c+d=n (2)a>1 (3)b-a>1 (4)c-b>1 (5)d-c>1 この5つの条件を同時に満たすような整数の組(a,b,c,d)の各々に対して, 積a*b*c*dを考え,次にそうしてできた積をすべて足し合わせます. このようにしてできた和はnの関数なのでこれをF(n)とします. F(n)をnの式で表すことはできるのでしょうか? 実際の例を挙げて説明しておきます. n=24のときを考えてみます. n=24のときには,上記の5つの条件を同時に満たすような整数の組(a,b,c,d)は 次の5組だけです. (a,b,c,d)=(2,4,6,12),(2,4,7,11),(2,4,8,10), (2,5,7,10),(3,5,7,9). これら5組の各々に対して積a*b*c*dを考え,それらの積を すべて足し合わせます.そうすると, (2*4*6*12)+(2*4*7*11)+(2*4*8*10)+(2*5*7*10)+(3*5*7*9) =3477 となります. したがって,F(24)=3477ということになります. n=20~25に対するF(n)の値は, F(20)=384,F(21)=432,F(22)=984,F(23)=1718,F(24)=3477,F(25)=4620. となります. オンライン整数列大辞典でこの数列(384,432,984,1718,3477,4620)を検索して みましたが,登録されていませんでした. [ ]をガウス記号とします. Σ記号を3つ重ねることによってF(n)は, F(n)=Σ{a=2 to [(n-12)/4]}Σ{b=a+2 to [(n-6-a)/3]}Σ{c=b+2 to [(n-2-a-b)/2]}(a*b*c(n-a-b-c)) とかくことができます. この式を簡略化できないものかと考え,maxima(Maxima-5.25.1)に計算させてみました. XMaximaを起動させて, load("simplify_sum")$ sum(sum(sum(a*b*c*(n-a-b-c),c,b+2,fix((n-2-a-b)/2)),b,a+2,fix((n-6-a)/3)),a,2,fix((n-12)/4)); simplify_sum(%); と打ち込んで様子をみると,nだけでなく変数a,bが混じった式が表示されます. nだけの式で表すことには失敗しているようです. 現在私は10^18(10の18乗)程度のnに対してのF(n)の正確な値を求める必要性に 迫られています.先のΣ記号を3つ使ったF(n)の式の計算量はnの多項式オーダー なのですが,この式でF(10^18)の値を計算するのは時間がかかりすぎてどうにも なりません.なにか良い計算法はないものでしょうか.

専門家に質問してみよう