
No.4ベストアンサー
- 回答日時:
#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
No.3
- 回答日時:
横1列に並んだ6個(A~E列の列数+1)の適当な未使用のセルを作業用セルとして使用します。
ここでは仮に、M1~R1を作業用セルとして使用するものとします。
まず、R1セルに
1
と入力して下さい。
次に、Q1セルに次の関数を入力して下さい。
=MAX(IF(COUNTIF(E:E,"*?"),MATCH("*?",E:E,-1),1),IF(COUNT(E:E),MATCH(MAX(E:E)+1,E:E),1))
次に、Q1セルをコピーして、M1~P1の範囲に貼り付けて下さい。
次に、K1セルに次の関数を入力して下さい。
=IF(ROWS($1:1)>PRODUCT($M$1:$Q$1),"",IF(INDEX(E:E,MOD(INT((ROWS($1:1)-1)/PRODUCT(R$1:$R$1)),Q$1)-ROW(E$1)+2)="","",INDEX(E:E,MOD(INT((ROWS($1:1)-1)/PRODUCT(R$1:$R$1)),Q$1)-ROW(E$1)+2)))
次に、K1セルをコピーして、G1~J1の範囲に貼り付けて下さい。
次に、K1~J1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。
以上です。

No.2
- 回答日時:
#1、cjです。
ちょっとミスしましたので、コードの差し替えをお願いします。
加えて、
> 右側、1列挟んで右側に、全通りの組合わせを
> 作成します。
この部分の説明ですが、
右側、2列挟んで右側に、全通りの組合わせを
作成します。
というようにしないと、列を追加しながらの作成がうまく行きませんでした。
実際に試す際も、予め、入力範囲の右側に2列の空列がある状態から
始めるようにしてください。
失礼しました。
' ' ここから
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
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)
For i = 2 To tnFld
Range(.Cells(1, i), .Cells(Rows.Count, i).End(xlUp)).Copy Destination:=.Columns(i)
Next i
End With
End With
End Sub
' ' ここまで
この回答への補足
cj_mover さん!
変更したい箇所があるので、補足入力しました。
どうか気づいてください・・・><
コードの差し替えのご連絡ありがとうございます。
No.1
- 回答日時:
こんにちは。
VBAですが、なるべく基本的な書き方にしました。
適用したいシートを表示して、
シートタブを右クリック、[コードの表示]をクリック、
表示された白いシート(VBEのシートモジュール)に
下記をコピペして
Alt + F11 キーでExcelに戻ります。
以降、A1から連続したセル範囲を書き換える度に、
右側、1列挟んで右側に、全通りの組合わせを
作成します。
' ' ここから
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 + 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
' ' ここまで

この回答への補足
cj_mover さま、ご回答ありがとうございます。
完璧にできました!!
恐れ入りますが追加希望がございまして。
1行目は項目を入れたいので、参照したくありません。
いただいたものを編集してみようと思ったのですが、スキがなくて、わかりません。。。。
2行目以降からスタートという風に書き換えるにはどうすればよろしいでしょうか?
またこの質問に気づいていただけることを祈って。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルについて教えてください。 2 2023/06/14 11:11
- Visual Basic(VBA) VBA ドロップダウンリストを残して値のみクリア 2 2022/10/27 05:42
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- Excel(エクセル) Excelについて Excel初心者です。 日報に数字を入力する時、誤った数字を入れると、セルが赤く 6 2023/03/31 17:05
- Excel(エクセル) Excelの機能に関してです ドロップダウンリストをB3セルに設定します 元データはB3~B1000 2 2023/07/22 09:20
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
特定のセルだけ結果がおかしい...
-
【マクロ】【配列】3つのシー...
-
エクセルのdatedif関数を使って...
-
【関数】同じ関数なのに、エラ...
-
エクセルの循環参照、?
-
【マクロ】列を折りたたみ非表...
-
【マクロ】アクティブセルの時...
-
iPhoneのExcelアプリで、別のシ...
-
【マクロ】EXCELで読込したCSV...
-
【条件付き書式】シートの中で...
-
【マクロ】オートフィルターの...
-
【マクロ】3行に上から下に並...
-
vba テキストボックスとリフト...
-
【マクロ】A列にある、日付(本...
-
ページが変なふうに切れる
-
エクセルのVBAで集計をしたい
-
エクセル
-
Excelファイルを開くと私だけVA...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelファイルを開くと私だけVA...
-
エクセルについてどう関数を使...
-
マクロ・VBAで、当該ファイルの...
-
エクセルのセルに画像は埋め込...
-
エクセルで、一部のセルだけ固...
-
【マクロ、画像あり】A表かB表...
-
エクセルでカウントする
-
【マクロ】コードを少しでも、...
-
VBA_日時のソート
-
エクセルで教えてください。 例...
-
エクセル 月間シフト表で曜日ご...
-
セルの左に余白を付ける
-
エクセル
-
エクセルについて教えてください
-
2枚のエクセル表で数字をマッチ...
-
ExcelのIF関数との組み合わせの...
-
エクセルのファイルのコピーを...
-
エクセルで二つのブックの違い...
-
空白処理を空白に
-
Excelのチェックボックスについ...
おすすめ情報