• ベストアンサー

VBA 組み合わせ表示

(例)セルB2からB7にランダムな数字が6個入ってます。(たとえば5・15・29・39・48・68 など。数値はB2からB8の7個等にその都度増減します)この数値から4個を取り出し、その組み合わをすべてセルK1から下に列挙したいのですが! できれば初心者用にわかりやすコードでお願いできれば助かります!!

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

  • ベストアンサー
  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.1

以下の条件で、簡単にコードを組んでみました。 ・B2セルから下に、最低4個の数が連続して並んでいる。 ・K列~N列に、4個の数字の組を抽出する。 ・順列によるソートは行っていません。単純に抽出しただけです。  再帰呼び出しを使えば、抽出する数も汎用化できると思います。 Sub test() Dim i1 As Integer, i2 As Integer, i3 As Integer, i4 As Integer Dim myRange As Range '抽出元範囲 Dim myCell As Range '出力先起点 Dim myRow As Integer '出力先行数 Set myRange = Range(Cells(2, 2), Cells(2, 2).End(xlDown)) Set myCell = Cells(1, 11) myRow = 0 For i1 = 1 To myRange.Count - 3 For i2 = i1 + 1 To myRange.Count - 2 For i3 = i2 + 1 To myRange.Count - 1 For i4 = i3 + 1 To myRange.Count - 0 myCell.Offset(myRow, 0).Value = myRange(i1) myCell.Offset(myRow, 1).Value = myRange(i2) myCell.Offset(myRow, 2).Value = myRange(i3) myCell.Offset(myRow, 3).Value = myRange(i4) myRow = myRow + 1 Next i4 Next i3 Next i2 Next i1 End Sub

minmin1960
質問者

お礼

とてつもなくありがとうです!! わかりやすいコードで助かりました!!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

作ってみました。 B列の数値の個数が18個まで対応出来ます。 取り出す個数を変える時は、コード中の「nSel = 4」の部分を変えてください。 Sub Sample()   nSel = 4  '取り出す個数   nRow = 1  '結果列挙の開始行   nDat = Range(Range("B2"), Range("B2").End(xlDown))   nCount = UBound(nDat)   For i = 1 To ((2 ^ nCount) - 1)     nUi = Int(i / 2 ^ 9)     nDi = i Mod 2 ^ 9     sBin = WorksheetFunction.Dec2Bin(nUi)     sBin = sBin & Right("000000000" & WorksheetFunction.Dec2Bin(nDi), 9)     sBinw = Replace(sBin, "0", "")     If Len(sBinw) = nSel Then       nCol = 11 '結果列挙の開始列(K)       nDCount = 1       For j = Len(sBin) To 1 Step -1         If Mid(sBin, j, 1) = "1" Then           Cells(nRow, nCol) = nDat(nDCount, 1)           nCol = nCol + 1         End If         nDCount = nDCount + 1       Next j       nRow = nRow + 1     End If   Next i End Sub

minmin1960
質問者

お礼

ありがとうございます!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA教えて下さい

    VBA教えて下さい。 初心者です。 例えば A1セルに数値を入力して コマンドボタンを押すと B1~B20のセルに全てその数値が反映される その反映された数値は赤色にする これだけならば private sub commandbutton_click() range("B1:B20")=range("A1") range("B1:B20").font.color=vbred でいけますが 私がやりたいのは更に A1に数値を入力して コマンドボタンを押すと B1~B20のセルに全てその数値が反映される その反映された数値は赤色にする しかし、B1~B20のセルのどれかのセルが背景色黄色にした場合 黄色背景色より上のセルはA1に入力された数値は無視し 黄色背景色より下のセルはA1に入力された数値を反映する といった内容です。 どうしてもできません コードを書いてもらえるとすごく助かります。 回答お願いします。

  • 組み合わせがあった時その隣の数値を表す関数を教えて欲しいのですが?

    何時も色々教えて頂き有難うございます。   A      B     C      D      E       F 1  2      3     12     5or8     8or5      16 2  5      8     16                 3  6      1     8              4  7      4     5.2      4      7          5.2 5  3      9     4.6       ・      ・         ・ 上記のように範囲A1からC5に(同様にB1、C1、・・・)から縦にランダムな数字 横にもランダムな数字が入っている表が有ったとします。 この時、D1のセルに5(又は8) E1のセルに8(又は5)と数値を入れた時F1にはCの11を表示させたいです。 (横軸で5と8の組み合わせをA1からB5の範囲で探し、その組み合わせがあった時、C列の対応する数値をFのセルに入れたいです) 上手く説明できてないかも知れませんが、その場合には再度補足を入れますので、どなたか教えて頂けないでしょうか? (エクセルの知識は独学で、初心者レベルです)。 宜しくお願い致します。

  • AccessDB VBA

    お世話になります ■Excel C5以下行から社員コードを入力するとK5以下行に社員名がジャンプしてくる(Accessから)VBAを作成させたい ワークシートは増減あります、名前もランダムです book内のワークシートすべてに適用させたい おそらくADO接続?? 初心者なのでコード等よろしくお願いします

  • EXCELでの日付表示の方法

    初心者ですみません。 EXCELで日付を表示する方法の質問です。 例えば、同一ブックの別のシートのあるセル(例えばB2)に6桁の日付の数字(例211229  和暦)が入力されているとして、その数値の下4桁のみを別のシートの例えばC2セルで12月29日と表示させるにはどうしたらよいのでしょうか? MODで6桁の数字を10000で割れば、余りとして1229が得られますが・・・。 よろしくお願いいたします。

  • VBAのコード forを使用した処理

    おはようございます。 どうしてもコードが思いつかないので質問させていただきます。 やりたいこと 例 A1~A5セルにランダムに『今日』や『明日』の文字が入っている として B1セルに『1』、B2セルに『2』、B3セルに『3』Bセルに『4』 とそれぞれ数字が入力されているとします。 例えばもし A2セルとA4セルに『今日』という文字が有れば、C1セルに B2セルの値とB4セルの値を足したものを反映させたいのですが どうしてもfor文を使用すると最後の数字 (このパターンだとB4の数字を張り付けられるだけになります。) どうしたらSUM関数みたいに連続してB2とB4セルの値を 足せるようなコードをかけるのでしょうか? すいませんが下記にコードを記載します。 出来ましたらこうしたらうまく計算できるよ! というコードを記載していただけないでしょうか? 宜しくお願い致します。 Sub test() Dim i As Long For i = 1 To 5 If Cells(i, "A").Value = "今日" Then Range("C1") = Cells(i, "A") ←ここの処理コードが間違っていますよね End If Next i End Sub

  • VBA特定セルの条件で同じ個数ずつ文字入力

    Excel VBAの初心者です。    A   B   C 1  011       0.5 2  012 3  013 4 行の総数は下に向かって700行くらいありますが、64行ごとにひとかたまりであることが分かって いるデータがあります。隙間はありません。またB列は空白です。 このB列にC1の数値を元に64行ごとに一定のステップで数値入力できるコードを作りたく思って います。例として、B列はB1から0,0~と同じ数字が縦に64個つながり、B65からは0.5,0.5~と縦に 同じ数字が64個つながり、A列がなくなるまで繰り返し自動で入力したいのです。 何分初めてなものでよく分かりません。どなたかサンプルコードを教えて頂けないでしょうか。 よろしくお願いします。

  • 【VBA】ハイパーリンクでセルに文字を正しく表示できない。

    【VBA】ハイパーリンクでセルに文字を正しく表示できない。 ハイパーリンクを設定しセルに数値を表示させる場合、 セルにもともと文字が入力されていれば、数値に置き換わります(a)が、 もともと入力されているのが数値の場合、別の数値に置き換わりません(b)。 例) (a)A1セルに「十」という漢字が入力されていたとします。   その時、下記コードを実行すればA1セルの値は「1」に変わります。   Sub test()    ActiveSheet.Hyperlinks.Add _    Anchor:=Range("A1"), _    Address:="http://www.yahoo.co.jp/", _    TextToDisplay:="1"   End Sub (b)一方、A1セルに「10」という数値が入力されていたとします。   その時、上記コードを実行してもA1のセルの値は「10」のままです。 なぜなのでしょうか? お分かりの方、教えてください。 尚、当方Excel2003を使用しております。 よろしくお願いします。

  • 【Excel VBA】特定の列で時間を入れているセルだけ合計して数式をセルにいれたい

    Excel VBA初心者です。 特定の列の各セル(B列とします)に時間(数字)、件数(数字)、文字列(○や×)が入っています。 この中でランダムな位置に入っている時間(数字)のみ拾い出し、合計欄(セルB20とします)に「数式(例)=sum(b3,b6,b8,b13,b18)」を入れたいのですが、マクロの組み方がわかりません。上記の特定のセルを抽出するところまではできたのですが。 マクロの組み方をご教授願えますか。

  • EXCEL VBA (変更セル値の値をとる)

    「A1セルからJ1セル」にランダムに数字が入っていたとします。 A1セルからH1セルのどこかの数字を変更した場合、その数字が変更したセルからJ1セルまで同じ数字になるようにしたいです。 たとえば、A1からJ1セルに1~10の数字をいれ、B1セル値の2を5に変更した場合、B1セルからJ1セルまでの値が全て5になるようにしたいです。 これはVBAで可能ですか? すいませんが宜しくお願いします。

  • VBA if文とfor文の使用方法

    初歩的なことで質問します。 まず A1からA31セルに 連続した数値A1セル➡1、A2➡2・・・A31➡31と 数値が入力されております。 やりたいこと D1セルに適当な数字(例えば5)を入力しマクロを起動すると A5セルの5と書かれた数値を探し当て 隣のB5セルに別シートの数値を持ってくるといった処理ですが ここまではコードできています。 ここからわからないのですが さらに、D1セルに適当な数字(例えば5)を入力し マクロを起動すると A5セルの5と書かれた数値を探し当て すでに、B5セルに数字があれば処理しないといった内容を 追加したいのですが、やり方が分からないです。 途中からのコードですいません。 For i= 1 To 31 If range(”D1”).Value = .Cells(i, 1).Value Then ここまではできるのですが、その次の処理 すでに、B5セルに数字があれば処理しないといった処理 のif文がわかりません。 すいませんがコード記載してくれると助かります。 回答よろしくお願いします。

このQ&Aのポイント
  • EP-883AWが突然無線LANに接続できなくなりました。アクセスポイントとパスワードを登録しても繋がらない状態です。スマホやPCは同じアクセスポイントで接続できており、ルータ設定も変更していません。
  • 自宅の無線LANルータ(docomo HR01)のソフトが更新された可能性があります。しかし、2.4G帯の無線LANはプリンタ以外接続できているため、どこに問題があるのか分かりません。
  • EP-883AWの無線LAN接続が突然切れた問題について、解決方法をご存じの方がいらっしゃれば教えてください。
回答を見る

専門家に質問してみよう