• ベストアンサー

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/17069)
回答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% (455/693)
回答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