| 
    
     |  | マナさん: ありがとうございます。このコードが、私がやってみたかったことでした。
 ちゃんと選択した項目の全列が転記されました。
 
 資料を作ったらしい方はもういらっしゃらず、解答例も載っていない
 ので、これは例題の作成ミスなのか何なのかはわからないのですが、
 もし本当に一行目の項目名を配列に入れて、二重ループさせて
 全列転記するという方法があるのであれば、どうやるのだろう?
 という気持ちと、なぜそうなるのかを理解したかったのです。
 
 私がVBAを勉強し始めて2か月という初心者なのですが、マナさんが
 書いてくださったコードを、ひとつづつ解釈してみました。
 何か間違って読んでいるところはあるでしょうか?
 特にROWS関数の使い方の解釈と、一番最後の
 ws2.Cells(i, j + 1).Value = ws1.Cells(i, m).Value
 ↑このコードの部分が不安です。
 
 1、ws1,ws2 というオブジェクト変数を宣言する
 2、インデックス0〜3までの 4要素が入る配列arrを宣言する
 3、m,i,jという変数を宣言する
 4、ws1はこのシートの"sheet1" ws2は"sheet2"です。
 5、配列arrの各要素に転記したい項目名を入れる
 6、jという(列方向に動く)変数で0から配列の最大値まで繰り返す
 
 7、m = Application.Match(arr(j), ws1.Rows(1), 0)
 
 arr(j)がMatch関数を使うときの検索値になる
 ※Match(検索値 , 検索範囲 , 検索方法)だから、
 
 ※ROWS(配列)検索範囲はA列?
 ※完全一致で検索
 
 変数mには検索値である項目名が合致した列数が入る
 
 8、変数iで1〜100行まで繰り返す
 
 ws2.Cells(i, j + 1).Value = ws1.Cells(i, m).Value
 
 Sheet2に転記するときにセルA1、B1、C1、D1 の次はA2、B2・・になるので
 行であるiは1から始まっているが、jは配列に合わせて0始まりになって
 いるので+1してあげる。
 
 Sheet2のCells(行i,列j)に繰り返しているiの行数とSheet1のarr(j)と
 いう検索値でヒットした列数の値を転記する
 
 |  |