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
こちら過去の解答にあったのですが、a,b,c,dに数字が入っていて、
Eに組み合わせを出力する場合どう変えればよいのでしょうか?
No.6ベストアンサー
- 回答日時:
ちょっと修正 変数a,b,c,d
a = WorksheetFunction.Count(Range("A:A"))
だと、数値しかカウントしないので まずいですね
a = WorksheetFunction.CountA(Range("A:A"))
または
a = Cells(Rows.Count, "A").End(xlUp).Row
です。検証は、数値で入力していたので。。。m(_ _)m
No.7
- 回答日時:
No.2で回答したものです。
No.4のMarcoRossiItalyさんの回答でうまくいくはずです(フォローありがとうございます)。
質問文の構文には各命令文の意味が書きこまれていたので、命令文の意味を理解していると判断していましたが理解できていないのであれば、No.4の方が指摘するように非常に危険ですからVBAに手を出さないほうがいいです。
やろうと思えばそのPCのファイルを全て消去するようなプログラムを作る事だって可能なんですから、最低限何がどういう働きをするのかは自分で勉強してから実行してください。
VBAを理解しておられないようなので念のため、比較的安全な関数だけで出来る方法を書いておきます・・・が、確認してない(自宅PCにExcel入ってないので確認できません)ので間違ってたらごめんなさい。
「この程度の事はVBAに頼らなくても、関数だけでも出来ますよ」という程度の参考としてください。
うまくいかなかったらセルe2の関数の式を自分でちょっと弄ってみてください。
例えばrounddownをroundupに変えてみるとか、rounddownの後についている-1を変えてみるとか・・・
うまく行ったにしても、うまく行かなかったにしても、式に使われている命令文の意味は自分で確認してください。
a~d列に組み合わせたい値が上から連続して入っていて、途中に空白セルが無いことが前提です。
セルe1
=concatenate(a1," ",b1," ",c1," ",d1")
セルe2
=concatenate(offset(a$1,rounddown(counta(e$1:e1)/counta(b:d),0),0)," ",offset(b$1,counta(e$1:e1)-rounddown(counta(e$1:e1)/counta(c:d),0)*counta(b:b)-1,0)," ",offset(c$1,counta(e$1,e1)-rounddown(counta(e$1:e1)/counta(d:d),0)*counta(c:c)-1,0)," ",offset(d$1,counta(e$1:e1)-rounddown(counta(e$1:e1)/counta(c:c),0)*counta(d:d),0))
セルe3以降にe2のセルをコピペ
ちなみに、多分e2の関数式は「"」で改行されて表示されていますが、「" "」つまり空白です。本来は1行の関数式で、表示しきれないから空白のところで改行されて表示されているだけですので、注意してください。
No.5
- 回答日時:
マクロというより 数式ですが
Sub 総当たり()
Dim a As Long, b As Long, c As Long, d As Long
Dim J As Long, K As Long, L As Long
Dim Start As Single
Dim Finish As Single
Range("E:E").ClearContents
Start = Timer ’不要
a = WorksheetFunction.Count(Range("A:A"))
b = WorksheetFunction.Count(Range("B:B"))
c = WorksheetFunction.Count(Range("C:C"))
d = WorksheetFunction.Count(Range("D:D"))
J = a * b * c * d
K = b * c * d
L = c * d
Range("E1:E" & J).FormulaR1C1 = "=INDEX(C1,(ROW()-1)/" & K & "+1)" & "&"" ""&" & _
"INDEX(C2,MOD(ROW()-1," & K & ")/" & L & "+1)" & "&"" ""&" & _
"INDEX(C3,MOD(ROW()-1," & L & ")/" & d & "+1)" & "&"" ""&" & _
"INDEX(C4,MOD(ROW()-1," & d & ")+1)"
Range("E1:E" & J).Value = Range("E1:E" & J).Value
Finish = Timer ’不要
MsgBox (J & "個の入力にかかった時間は" & Finish - Start & "秒です") ’不要
End Sub
No.4
- 回答日時:
ご質問は「組み合わせ」を求めたいとなっていますが、数学で言うところの組み合わせではなく、「順列」を求めるということでいいですね?
そうであれば、質問者さんが見付けた過去の回答とか、No.2 さんが示されているコードを使えば、(若干のタイポの修正は必要ですが)できるはずです。
!!!!!!!!!!
必ず、データ処理を開始する前に、順列の個数を計算しておいてください。例えば A ~ D 列のデータ数がそれぞれ 3、2、3、2 個である場合は、「=3*2*3*2」というふうに計算できることになりますね?この結果が天文学的な値になってしまうと、丸一日データ処理をさせても終わらないというケースもあり得ます。万一そのようなことになってしまったら、キーボードの Escape キーで処理を中断してください。
>○「全通りの組合せ」の意味は?
・abcdと4つ並べたときの全部の組合せ
「a」というのは、A 列中のある行に存在する文字列を指す代名詞のことだと、こちらでは勝手に解釈しています。4 列の全データを使って、全順列を求めるということでいいですね?回答者は、質問文が全然別な意味であることも含めて、様々な可能性を考えた上で、回答文を作成しています。誰にでも意味の通じるご説明を心がけてください。ムダな問答の繰り返しは、負担になります。
>……構文エラーになり出来ませんでしたがどこがまちがっているか……
コードの意味を理解しておらず、VBE も使えていない証拠です。No.2 さんのおっしゃるとおり、少しでも自分で作る努力をしないと、永遠にできるようにはならないでしょう。
また、意味も分からないまま見ず知らずの人が作ったコードを実行してしまうというのは、場合によってはたいへん危険な行為です。今回のコードは単なる文字列の結合だから、事前にバックアップなりしておけばそれほど深刻なことにはならないかもしれませんが、とにかく何も考えないのは危ないです。
No.2 さんが示されたコード中のタイポを修正させていただいたものが下のとおりです。For の中の数式で、「"C"」→「"e"」、「Cels」→「Cells」、「" " Cells」→「" " & Cell」としました。
Option Explicit
Sub test01()
Dim a As Long, b As Long, c As Long, d As Long
Dim I As Long, J As Long, K As Long, L As Long
Dim x As Long
a = Cells(Rows.Count, "A").End(xlUp).Row
b = Cells(Rows.Count, "B").End(xlUp).Row
c = Cells(Rows.Count, "C").End(xlUp).Row
d = Cells(Rows.Count, "D").End(xlUp).Row
For I = 1 To a
For J = 1 To b
For K = 1 To c
For L = 1 To d
x = x + 1
Cells(x, "e") = Cells(I, "A") & " " & Cells(J, "B") & " " & _
Cells(K, "C") & " " & Cells(L, "D")
Next L
Next K
Next J
Next I
End Sub
No.3
- 回答日時:
過去の質問と似た状況、ということになると
a
A1: 1
A2: 2
b
B1: 3
B2: 4
c
C1: 5
C2: 6
d
D1: 7
D2: 8
となっているときに、 abcd の全組合せ
1357
1358
1367
1368
...
を求めたい、ということに思えますが、それであっていますか?
そうだとすると、#2のミスを修正すればできます。
誤) Cells(x, "C") =
正) Cells(x, "E") =
そうでないなら、やりたいことを、もう少し詳しく書いてくれませんか?
○a,b,c,dは何?
・候補となる数字の一覧(上記の例のような)
・プログラム中で a=5等と指定した定数
...
○「全通りの組合せ」の意味は?
・abcdと4つ並べたときの全部の組合せ
・bcda等、4つの順番を入れかえる場合も考慮
・abc等、4つでない場合も考慮
・bca等、4つでない、かつ順番も入れ替える場合も考慮
・重複するものを別に数える/1つだけにする
...
この回答への補足
説明不足で吸いません。
こちらが出力したいです。
○「全通りの組合せ」の意味は?
・abcdと4つ並べたときの全部の組合せ
解答の方法でやったのですが構文エラーになり出来ませんでしたがどこがまちがっているかおしえていただけますか?
No.2
- 回答日時:
Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row
b = Cells(Rows.Count, "B").End(xlUp).Row
c = Cells(Rows.Count, "C").End(xlUp).Row
d = Cells(Rows.Count, "D").End(xlUp).Row
For I = 1 to a
For J = 1 to b
For K = 1 to c
For L = 1 to d
x = x + 1
Cells(x, "C") = Cels(I, "A") & " " & Cells(J, "B") & " " & _
Cells(K, "C") & " " Cells(L, "D")
Next L
Next K
Next J
Next I
End Sub
一応そのまま回答しましたが、各命令文の意味が分かっていながら何故これが出来ないのか少し理解に苦しみます。プログラミング技術は自分自身でいろいろと試さないと身に着きませんから、分からない事を他人に訊く前に少しでいいから自分で考えた方があなた自身のためになるでしょう。
この回答への補足
質問の文が足りなかったようですいません。
a,b,c,dに入っている数字の組み合わせ全通りを出力するにはどうすればよいのでしょうか?
私がみた過去の質問はこちらです。
http://oshiete.goo.ne.jp/qa/4122783.html?from=re …
No.1
- 回答日時:
過去の解答ですが正しい回答ではないようですね。
式のxは何のことでしょう。A,B,C,D列の最終行で最も大きい行に照準を合わせて組み合わせをE列に出力することでしょう。
例えば次のようにすることでしょう。
Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row
b = Cells(Rows.Count, "B").End(xlUp).Row
c = Cells(Rows.Count, "C").End(xlUp).Row
d = Cells(Rows.Count, "D").End(xlUp).Row
n = WorksheetFunction.Max(a, b, c, d)
For i = 1 To n
Cells(i, "E") = Cells(i, "A") & " " & Cells(i, "B") & " " & Cells(i, "C") & " " & Cells(i, "D")
Next i
End Sub
この回答への補足
質問の文が足りなかったようですいません。
a,b,c,dに入っている数字の組み合わせ全通りを出力するにはどうすればよいのでしょうか?
私がみた過去の質問はこちらです。
http://oshiete.goo.ne.jp/qa/4122783.html?from=re …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 追記する列を増やしたい 2つのデータを検索・照合して元データにないデータを下記マクロで商品名を追記し 9 2022/10/05 10:50
- Visual Basic(VBA) VBA 行削除した連番 4 2023/06/27 16:00
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 最終列の右へSUM関数を作成するため下記コードを実行しましたが、最終列「10月28日」が上書きされて 3 2022/12/05 20:32
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
Microsoft1Officeの互換ソフト...
-
Excel ピボットテーブルで日付...
-
エクセル関数を教えてください
-
【マクロ】その時、その時で変...
-
【マクロ】読取専用のファイル...
-
LOOKUP関数を使えばいいのでし...
-
エクセル 白黒印刷で白線を印刷...
-
【関数】先頭だけにある、半角...
-
【関数】適切な文字数の数字を...
-
Excelのチェックボックスの使い...
-
エクセルでの作業計算方法について
-
Excelのpivotについて質問です
-
WPS OFFICEでの縦書きについて
-
時間によってファイル名が変わ...
-
エクセルのセルに同じ大きさの...
-
Aというブックの1というシート...
-
エクセルの順位別一覧表の自動...
-
西暦や和暦の表示をyyyymmdd表...
-
【マクロ】エクセルにかいてあ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報