|
マナさん:
ありがとうございます。このコードが、私がやってみたかったことでした。
ちゃんと選択した項目の全列が転記されました。
資料を作ったらしい方はもういらっしゃらず、解答例も載っていない
ので、これは例題の作成ミスなのか何なのかはわからないのですが、
もし本当に一行目の項目名を配列に入れて、二重ループさせて
全列転記するという方法があるのであれば、どうやるのだろう?
という気持ちと、なぜそうなるのかを理解したかったのです。
私が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)と
いう検索値でヒットした列数の値を転記する
|
|