1461675110 Excel・データ出力表示に関する質問です。

画像のようにパターン1〜パターン4まで、種類の違う情報が入っているとして、
画像右のように、全部のパターン内の情報をを1行ずつ出力する方法・関数等あれば教えていただけませんでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2016/04/26 21:51:50
  • 終了:2016/05/03 21:55:03

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4363ベストアンサー獲得回数18002016/04/27 01:58:04

ポイント250pt

VBA を使います。
以下のコードを標準モジュールに貼り付けて、write_perm サブルーチンを実行してください。

Const SOURCE_ROW = 3    ' 参照元(行)
Const SOURCE_COL = 2    ' 参照元(列) - B列
Const dest_row = 3      ' 書込先(行)
Const DEST_COL = 8      ' 書込先(列) - H列

Sub write_perm()
    Dim ref_rows()
    ReDim ref_rows(SOURCE_COL To Cells(SOURCE_ROW, SOURCE_COL).End(xlToRight).Column)
    row = dest_row
    Call write_perm_work(ref_rows, SOURCE_COL, row)
End Sub

Private Sub write_perm_work(ref_rows, ref_col, dest_row)
    For r = SOURCE_ROW To Cells(Rows.Count, ref_col).End(xlUp).row
        ref_rows(ref_col) = r
        If ref_col >= UBound(ref_rows) Then
            For c = LBound(ref_rows) To UBound(ref_rows)
                Cells(dest_row, DEST_COL + c - LBound(ref_rows)).Value = Cells(ref_rows(c), c)
            Next
            dest_row = dest_row + 1
        Else
            Call write_perm_work(ref_rows, ref_col + 1, dest_row)
        End If
        DoEvents
    Next
End Sub

このコードでは、組合せの元になるデータがあるシートと同じシートに、組み合わせのパターンを書き出すようにしてます。

先頭に書いてある定数で、元になるデータと書き込み先を指定します。
組合せの元になるデータの左上が B3 、組み合わせのパターンを書き出す先頭の位置が H3 としています。

Mac で Excel の VBA を試す環境がないのですが、特別なことをやっているわけではないので、多分、動くと思います。
パターンの数が 4 じゃなくても、動くようにしたつもりです。

その他の回答(1件)

id:wedoit No.1

田舎のIT職人回答回数4ベストアンサー獲得回数02016/04/26 23:50:52

ポイント250pt

下記方法をご参考ください。
http://superdbtool.com/blog/archives/40

id:hal-star

田舎のIT職人様
早々にどうもありがとうございます。こんなすてきなものがあるんですね!ただ、当方環境 Office for Mac 2011のため、インストールでつまづきました> OS Yosemite Ver.10.10.5です。 最初にお伝えしておくべきでしたね。すみません。Macでも使えるこういうものあったりしますでしょうか?

2016/04/27 00:18:33
id:a-kuma3 No.2

a-kuma3回答回数4363ベストアンサー獲得回数18002016/04/27 01:58:04ここでベストアンサー

ポイント250pt

VBA を使います。
以下のコードを標準モジュールに貼り付けて、write_perm サブルーチンを実行してください。

Const SOURCE_ROW = 3    ' 参照元(行)
Const SOURCE_COL = 2    ' 参照元(列) - B列
Const dest_row = 3      ' 書込先(行)
Const DEST_COL = 8      ' 書込先(列) - H列

Sub write_perm()
    Dim ref_rows()
    ReDim ref_rows(SOURCE_COL To Cells(SOURCE_ROW, SOURCE_COL).End(xlToRight).Column)
    row = dest_row
    Call write_perm_work(ref_rows, SOURCE_COL, row)
End Sub

Private Sub write_perm_work(ref_rows, ref_col, dest_row)
    For r = SOURCE_ROW To Cells(Rows.Count, ref_col).End(xlUp).row
        ref_rows(ref_col) = r
        If ref_col >= UBound(ref_rows) Then
            For c = LBound(ref_rows) To UBound(ref_rows)
                Cells(dest_row, DEST_COL + c - LBound(ref_rows)).Value = Cells(ref_rows(c), c)
            Next
            dest_row = dest_row + 1
        Else
            Call write_perm_work(ref_rows, ref_col + 1, dest_row)
        End If
        DoEvents
    Next
End Sub

このコードでは、組合せの元になるデータがあるシートと同じシートに、組み合わせのパターンを書き出すようにしてます。

先頭に書いてある定数で、元になるデータと書き込み先を指定します。
組合せの元になるデータの左上が B3 、組み合わせのパターンを書き出す先頭の位置が H3 としています。

Mac で Excel の VBA を試す環境がないのですが、特別なことをやっているわけではないので、多分、動くと思います。
パターンの数が 4 じゃなくても、動くようにしたつもりです。

id:hal-star

当方環境Mac OS Yosemite Ver.10.10.5
Office for mac2011です。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません