人に聞けない痔の悩み、これでスッキリ >>

Excelについて全くの初心者で、教えて頂きたい質問があります。

Excelの文字列の全通りの組み合わせを出力がしたいのですが、その方法が分かりません。
例えばセルAに
・りんご
・みかん
・いちご

セルBに
・だいこん
・キャベツ
・トマト

があり、別のセルにその全通りの組み合わせを出力
(文字と文字の間はスペース)

りんご だいこん
りんご キャベツ
りんご トマト
みかん だいこん
みかん キャベツ
みかん トマト
いちご だいこん
いちご キャベツ
いちご トマト

この様に出来る方法はあるでしょうか?
また出来ればその裏(だいこん りんご)も出力したいと考えており、キーワードは3つまで出来るようになりたいです。

どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

A 回答 (2件)

A列B列は1行目からデータがあるものとします。


C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行からB列最終行まで繰り返し
x = x + 1
Cells(x, "C") = Cells(i, "A") & " " & Cells(n, "B") 'C列に結合して転記
Next n
Next i
End Sub

3.Alt+F11キーでワークシートへもどります.

4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行

これでできます。
これがわかれば「裏」というのも簡単ですよね。
以上はVBAでの回答ですが、外していたらごめんなさい。
    • good
    • 14
この回答へのお礼

ありがとうございます。
私自身はどういう仕組みで動いているのか全然わかりませんが出来ました!(^^;;

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

お礼日時:2008/06/23 14:19

やりたいこととは少し違うかもしれませんが、



B1:りんご
C1:みかん
D1:いちご

A2:だいこん
A3:キャベツ
A4:トマト

とした場合に、

B2に「=B$1&" "&$A2」と入力して、B2をコピーしてB2:D4の範囲にペーストすると、似たようなことができます。
    • good
    • 14
この回答へのお礼

ありがとうございます。
こうやれば簡単に出来るんですね。
VisualBasicが全然出来なかったので、お教え頂いた方法は目から鱗でした。

ありがとうございました。

お礼日時:2008/06/23 14:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QExcelでデータ全通り組み合わせ出力方法

Excelでデータ全通り組み合わせ出力方法について教えて頂けますと助かります。

セルA~Eに、数がまちまちのアイテム名が入っています。
(セルA~Eというのは例で、変則的に全てのアイテム数は増減します。)

全ての組合せをセルG~Kに各々書き出してくれる方法はあるでしょうか?
(イメージ添付あり)

できればセルに入力すれば自動的に組合せが追加されていくのが理想です。
Excel2010を使用しており、VBAは初心者です。


どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

Aベストアンサー

#1、2、cjです。#1、2、補足欄へのレスです。

取り急ぎ、コードのみ修正しました。
#2を元に書き換えています。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rSrc As Range
  Application.EnableEvents = False
  Set rSrc = Range("B2").CurrentRegion
  Application.EnableEvents = True
  If Intersect(Target, rSrc) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  Call PrintCombi(rSrc)
  Application.EnableEvents = True
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 + 3)
    .CurrentRegion.Clear
    Cells(1).Resize(, tnFld).Copy .Cells(1)
    For i = tnFld To 1 Step -1
      nRc = Cells(Rows.Count, i).End(xlUp).Row
      nRow = 2
      For j = 2 To nRc
        Cells(j, i).Copy Destination:=.Cells(nRow, i).Resize(nConti)
        nRow = nRow + nConti
      Next j
      nConti = nConti * (nRc - 1)
    Next i
    With .Cells(2, 1).Resize(nConti)
      For i = 2 To tnFld
        Range(.Cells(1, i), .Cells(.Cells.Count + 1, i).End(xlUp)).Copy Destination:=.Columns(i)
      Next i
    End With
  End With
End Sub

#1、2、cjです。#1、2、補足欄へのレスです。

取り急ぎ、コードのみ修正しました。
#2を元に書き換えています。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rSrc As Range
  Application.EnableEvents = False
  Set rSrc = Range("B2").CurrentRegion
  Application.EnableEvents = True
  If Intersect(Target, rSrc) Is Nothing Then Exit Sub
  Application.EnableEvents = False
  Call PrintCombi(rSrc)
  Application.EnableEvents = True
...続きを読む

QExcelですべての組合せ(重複組合せ)を出力するには?

Excelですべての組合せ(重複組合せ)を出力するには?

次の条件のような場合、Excelですべての組合せ(重複組合せ)をVBAで出力するにはどうしたらいいのでしょうか?

10種類のお菓子の中から、好きなものを3個選んでセットにするとします。
同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓子A」は選んだ順が違うだけで同じ組合せなので、どちらか片方だけにします。

この場合、すべての組合せの数は Excelの関数で求めることができるようで COMBIN(10+3-1,3) = 220 通りあることまではわかりましたが、このすべての組合せの一覧をどのようにして出力したらいいのかがわかりません。

いろいろ検索した結果、順列という方法は見つかりましたが、重複組合せでの方法は見つけることができませんでした。
また、Accessを使っても似たようなことができるのでしょうか? 直積?

できれば、3個固定ではなく5個の場合も出来るとうれしいです。
よろしくお願いします。

Aベストアンサー

>同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓
つまり「菓子A、菓子A、菓子A」も「菓子A、菓子A、菓子B」もあり ですね。
№2さんのコードをお借りして
Sub Test()
  Dim myStr As Variant
  Dim rowX As Long
  Dim i As Long, j As Long, k As Long
  Const MaxNum = 10

  myStr = Split("A B C D E F G H I J")
  rowX = 1
  For i = 0 To MaxNum - 1
    For j = i To MaxNum - 1
      For k = j To MaxNum - 1
        Cells(rowX, 1).Value = myStr(i)
        Cells(rowX, 2).Value = myStr(j)
        Cells(rowX, 3).Value = myStr(k)
        rowX = rowX + 1
      Next k
    Next j
  Next i
End Sub

>同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓
つまり「菓子A、菓子A、菓子A」も「菓子A、菓子A、菓子B」もあり ですね。
№2さんのコードをお借りして
Sub Test()
  Dim myStr As Variant
  Dim rowX As Long
  Dim i As Long, j As Long, k As Long
  Const MaxNum = 10

  myStr = Split("A B C D E F G H I J")
  rowX = 1
  For i = 0 To MaxNum - 1
    For j = i To MaxNum - 1
      For k = j To MaxNum - 1
       ...続きを読む

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

よくこの組み合わせは全部で1万通りのパターンが存在するというようなことを聞きますが、
あれの方程式などはあるのでしょうか。

以下の例で説明をお願いします。

1. [a,b,c]の3つだけの文字列を作った時のパターン数
2. 英数字のみのパスワード4桁のパターン数
3. [a,b,c,d,e,f,g]の中から4文字をつかった文字列のパターン数。

Aベストアンサー

ちゃんと中学で確率を勉強しましたか?
方程式というか中学生で習う確率の授業をちゃんとやればわかります。難しいとこは
全くなく基本です。

(1)(a.b.c)の3つだけの文字列を作った時のパターン数

▼3つだけを使うので同じものは2回使えない
▽最初にa.b.cの3つのうちのひとつが選べる
▽次に最初に選んだもの以外の2つのうちのひとつが選べる
▽最後に1つ残る

従って
3×2×1=6

で答えは6通り

▽検証
下記がその6通り
a.b.c
a.c.b
b.a.c
b.c.a
c.a.b
c.b.a

(2)英数字のみのパスワード4桁

アルファベットは26文字
数字は10種類

▼同じ英数字を二度使ってもかまわないので

選べる英数字は毎回36通り

ここから4桁を選ぶのだから

36×36×36×36=1679616

1679616通り

(3)(a.b.c.d.e.f.g)の中から4文字を使った文字列のパターン

▼同じ文字を二度使わない場合
▽最初は7つ選べる
▽二回目は6つから選べる
▽三回目は5つから選べる
▽四回目は4つから選べる

7×6×5×4=840

840通り

ちなみに
▼同じ文字を二度使ってもよい場合なら
▽毎回7つから選択できる

7×7×7×7=2401

2401通り

ちゃんと中学で確率を勉強しましたか?
方程式というか中学生で習う確率の授業をちゃんとやればわかります。難しいとこは
全くなく基本です。

(1)(a.b.c)の3つだけの文字列を作った時のパターン数

▼3つだけを使うので同じものは2回使えない
▽最初にa.b.cの3つのうちのひとつが選べる
▽次に最初に選んだもの以外の2つのうちのひとつが選べる
▽最後に1つ残る

従って
3×2×1=6

で答えは6通り

▽検証
下記がその6通り
a.b.c
a.c.b
b.a.c
b.c.a
c.a.b
c.b.a

(2)英数字のみの...続きを読む

QExcelでの全通りの組み合わせ出力方法2

こんにちは。
http://oshiete.goo.ne.jp/qa/4122783.html
にあった質問より、もう少し複雑な組み合わせを出力したいと思っています。

例えば
【肉類】として
牛肉 豚肉 鶏肉 魚肉  の中から2つ選び
【根菜】として
大根 にんじん たまねぎ サツマイモ の中から2つ選び
【葉野菜】として
キャベツ 白菜 キャベツ レタス ほうれん草 の中から2つ選ぶ、

といった場合の全ての組み合わせを

【肉類】【根菜】【葉野菜】の列、または
【肉類1】【肉類2】【根菜1】【根菜2】【葉野菜1】【葉野菜2】の列に出力する事は出来るものでしょうか?

組み合わせ例としては、

牛肉、魚肉、大根、たまねぎ、レタス、ほうれん草

のような感じです。
実際に使用したい選択肢の総数が100個ほどあり、手入力には多すぎるので
なんとかExcelで出来たらと思ってるのですが……。

 ご存知の方がいらっしゃいましたらご教授下さい!

Aベストアンサー

組み合わせ(順番は関係ない)という前提で
A1セルに総数 =PRODUCT(B1:D1)
B1セルに「肉」の組み合わせ数 =COMBIN(4,2)
C1セルに「根菜」の組み合わせ数 =COMBIN(4,2)
D1セルに「葉」の組み合わせ数 =COMBIN(5,2)

A2セルに連番として 1
B2セルに=IF($A2>$A$1,"",MOD(INT(($A2-1)/C$1/D$1),B$1)+1)
C2セルに=IF($A2>$A$1,"",MOD(INT(($A2-1)/$D$1),C$1)+1)
D2セルに=IF($A2>$A$1,"",MOD($A2-1,D$1)+1)
(D2セルから考えた)
A2:D2下へオートフィル連番360まで


各組合せ
I1セルに肉の品数の4
K5セルに根菜の品数の4
M5セルに葉の品数の5
I2に1、J2に2 右へコピー

I3セルに =(COUNTIF(I$2:I2,I2)>=I$1-I2)+I2
J3セルに =IF(I3<>I2,I3+1,J2+1)
I3:J3セルを右へ下へオートフィル
(添付図の罫線で囲まれた部分しか使わない)

E2セルに肉
=INDEX(P:P,INDEX(I:I,B2+1)+1)&" "&INDEX(P:P,INDEX(J:J,B2+1)+1)
F2セルに根菜
=INDEX(Q:Q,INDEX(K:K,C2+1)+1)&" "&INDEX(Q:Q,INDEX(L:L,C2+1)+1)
G2セルに葉
=INDEX(R:R,INDEX(M:M,D2+1)+1)&" "&INDEX(R:R,INDEX(N:N,D2+1)+1)
E2:G2セル フィルハンドルダブルクリック

考え方を理解するようにしてください

組み合わせ(順番は関係ない)という前提で
A1セルに総数 =PRODUCT(B1:D1)
B1セルに「肉」の組み合わせ数 =COMBIN(4,2)
C1セルに「根菜」の組み合わせ数 =COMBIN(4,2)
D1セルに「葉」の組み合わせ数 =COMBIN(5,2)

A2セルに連番として 1
B2セルに=IF($A2>$A$1,"",MOD(INT(($A2-1)/C$1/D$1),B$1)+1)
C2セルに=IF($A2>$A$1,"",MOD(INT(($A2-1)/$D$1),C$1)+1)
D2セルに=IF($A2>$A$1,"",MOD($A2-1,D$1)+1)
(D2セルから考えた)
A2:D2下へオートフィル連番360まで


各組合せ
I1セルに肉の品数の4
K5セルに根菜の品数の4...続きを読む

Qエクセルでの組み合わせ出力方法(計算含む)

エクセルの初心者です。
エクセルで作成した数字の表を利用して、その表の中の任意の数字の組み合わせの合計が、ある数字ぴったりの組み合わせを探し出すにはどうすればいいでしょうか?表の数字は50くらいあります。

Aベストアンサー

ご希望の操作は、50個のセルに入力されている値の中からいくつかの数字を選択して、その数字の合計が特定の値になる組み合わせを探したいということでしょうか?

その場合はソルバーの機能を利用します。

たとえばA1からA50セルに任意の数字が入力されている場合、C1セルに「=SUMPRODUCT(A1:A50,B1:B50)」と入力しこのセルを選択しておき、「ツール」「ソルバー」(表示されない場合は「アドイン」からソルバーにチェックを入れます)から、目標値の「値」の欄にチェックを入れ、合計する目標数字を入力し、変化させるセルの欄は「B1:B50」セルを選択し、制約条件で「追加」ボタンを押し、左側の欄に「B1:B50」セル、真ん中を「データ」にして「OK」します。
条件を入力したら「キャンセル」して元のダイアログを表示して、「OK」します。

これで目標値が見つかりましたと表示された場合、B列に1と表示されているA列の数字の組み合わせが、求める組み合わせデータとなります。

Qエクセル2007で総当り表を作りたいです。

エクセル2007で俗に言う総当り表を作りたいのですが、分からないことがあり作成が進みません。
あれこれ調べてみたのですが私自身関数が得意というわけでもなく…こちらで質問させていただきます。

画像のように

(1)2行目のデータを、関数・オートフィルを用いて2列目に並べなおす
(2)同一のデータ同士が当たらないように、斜めに線を(自動で)引く

という状態にしたいと考えています。
それぞれ、どのような設定・関数を用いればよいのでしょうか?

Aベストアンサー

こんばんは!
質問の操作に関しては関数云々というより、コツコツ手を動かして操作するしかないと思います。
(1)2行目データを範囲指定 → 右クリック → コピー
(2)A3セルを選択 → 右クリック → 形式を選択して貼り付け → 「行列を入れ替える」にチェックを入れOK
(3)Ctrlキーを押しながら斜線を入れたいセルを選択 → 右クリック → セルの書式設定 → 「罫線」タブで「右下がりの斜線」を選択しOK
(4)最後にA2セル~最終セルを選択 → 罫線の「格子」を選択しOK

こういった流れになると思います。

これを自動で!というコトであればVBAになってしまいますが、一例です。
表を作成したい元データはB2セルから列方向に並んでいるとします。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から
Dim j As Long, lastCol As Long
lastCol = Cells(2, Columns.Count).End(xlToLeft).Column
Range(Cells(2, "B"), Cells(2, lastCol)).Copy
Range("A3").PasteSpecial Paste:=xlPasteAll, Transpose:=True
For j = 2 To lastCol + 1
Cells(j, j - 1).Borders(xlDiagonalDown).LineStyle = xlContinuous
Next j
With Range("A2").CurrentRegion
.Borders.LineStyle = xlContinuous
.HorizontalAlignment = xlCenter
End With
End Sub 'この行まで

※ おそらく一度だけの操作になると思いますので、
わざわざマクロでやるよりご自身で手を動かした方が良いと思います。m(_ _)m

こんばんは!
質問の操作に関しては関数云々というより、コツコツ手を動かして操作するしかないと思います。
(1)2行目データを範囲指定 → 右クリック → コピー
(2)A3セルを選択 → 右クリック → 形式を選択して貼り付け → 「行列を入れ替える」にチェックを入れOK
(3)Ctrlキーを押しながら斜線を入れたいセルを選択 → 右クリック → セルの書式設定 → 「罫線」タブで「右下がりの斜線」を選択しOK
(4)最後にA2セル~最終セルを選択 → 罫線の「格子」を選択しOK

こういった流れになると思...続きを読む

Qエクセルで順列の列挙

例えば
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列に並べる方法でもかまいません。
また昇り順でなくてもかまいません。 よろしくおねがいします。

Aベストアンサー

こんにちは。

学校の宿題とかではありませんよね。
以下は、再帰を使った、順列生成のアルゴリズムです。
たぶん、大丈夫だと思います。後は、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

こんにちは。

学校の宿題とかではありませんよね。
以下は、再帰を使った、順列生成のアルゴリズムです。
たぶん、大丈夫だと思います。後は、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...続きを読む

QエクセルでnCr (組み合わせ)の作成方法

どなたかご存じでしたら回答願います。
ミニロトとロト6をエクセルを使用して予想に利用しております。
その中で知りたいのは、下記の場合のエクセルVBAのソースです。

●知りたいこと。

(1)ミニロトの場合は、31個から5個全てが一致すると一等ですが、
 「25個から5個選択した場合の組み合わせ(25C5)」作成方法

(2)ロト6の場合は、43個から6個全てが一致すると一等ですが、
 「24個から6個選択した場合の組み合わせ(24C6)」作成方法。

●入力

(1)ミニロトの場合は、下記のように5×5マスに重複しない数字が入っています。
  数字は毎回変わります。
  1   2 5 6 7
10 4 11 13 15
8 9 17 21 28
14 16 18 20 25
19 22 23 24 27

(2)ロト6の場合は、下記のように6×4マスに重複しない数字が入っています。
  数字は毎回変わります。

  1   2 5 6 7 19
10 4 11 13 5 22
8 9 17 21 28 23
14 16 18 20 25 24

●出力

  VBAを実行すると、新シートにそれぞれ、25C5又は、24C6の全組み合わせが出力される。

【注意事項】
   ・使用しているエクセルは2010です。

以上、ご回答よろしくお願いします。

どなたかご存じでしたら回答願います。
ミニロトとロト6をエクセルを使用して予想に利用しております。
その中で知りたいのは、下記の場合のエクセルVBAのソースです。

●知りたいこと。

(1)ミニロトの場合は、31個から5個全てが一致すると一等ですが、
 「25個から5個選択した場合の組み合わせ(25C5)」作成方法

(2)ロト6の場合は、43個から6個全てが一致すると一等ですが、
 「24個から6個選択した場合の組み合わせ(24C6)」作成方法。

●入力

(1)ミニロトの場合は、下記のように5×5マス...続きを読む

Aベストアンサー

過去のQ&A(参考URL)を参照なさってはいかがでしょう?

参考URL:http://oshiete.goo.ne.jp/qa/5571459.html

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング