質問: vbaで他のシートの特定の列を検索・コピーし、貼り付ける。 お世話になります。 vba初心者です、よろしくお願いいたします。 掲題にありますとおり、他のシートの特定の列を検索(抽出?)しアクティブになっているシートの特定の列に貼り付ける作業を自動で行わせたいと思っております。複数ある行の中から必要な行だけを抽出して、貼り付けるのでフォーマットを整えると思っていただければ結構です。具体的には、 [sheet1]のデータ↓( | ←は罫線と思ってください。列の順番は毎回a→zの順番とは限りませんが、記載内容は同じです。) a | b | c | d | e ... | z 1 | 2 | 3 | 4 | 5 ... |26 a | b | c | d | e ... | z 1a| 2b| 3c| 4d| 5e... |26z これらのデータから、特定の必要な列を選んで[sheet2]に貼り付けを自動で行わせたいのです↓。 [sheet2]b,g,a,w,o,iのデータのみ必要な場合 b | g | a | w | o | i 2 | 7 | 1 | 23| 15| 9 b | g | a | w | o | i 2b| 7g| 1a|23w|15o| 9i 行数は最大で500行を超えます。hlookupを各セルに書き込んで置けばよいのですが、ドッラグでは式が正しく書き込めなくて。。。 "=hlookup(a1,sheet1!a:z,2,0)"←"a1"はa2,a3,a4となるのですが"2"がずっと2のままなので。 [sheet1]の特定の行のコピー&ペーストなのですが、[sheet2]の貼り付け先が1行目からではないので、何かしらの工夫が必要だと思うのですが。。。 たとえば columns("b:b").select selection.copy sheets("sheet2").select cells(2, 1).paste こう言う事って出来ませんよね? 私の意は伝わりましたでしょうか?なにとぞよろしくお願いいたします。
回答: こんなのではどうでしょうか? sub sample() '初期設定(コピー元とコピー先のシート、コピーする列を設定) dim srcsheet as worksheet dim dstsheet as worksheet dim copycolumns as string set srcsheet = sheets("sheet1") set dstsheet = sheets("sheet2") copycolumns = "b,g,a,w,o,i" ' dim srcrowtop as long dim srcrowbottom as long dim dstrowtop as long dim cols() as string dim i as integer 'コピー元の最初と最後の行を取得(有効なデータ行は、a列には必ずデータがあるとします) srcrowtop = 1 srcrowbottom = srcsheet.cells(srcsheet.rows.count, 1).end(xlup).row 'a列の最後のデータの行 if (srcrowbottom = 1) and (srcsheet.cells(1, 1) = "") then '最後の行が1行目で、実は1行目にデータが無い場合 exit sub 'コピー元データなし end if 'コピー先の最初の行を取得(有効なデータ行は、a列には必ずデータがあるとします) dstrowtop = dstsheet.cells(dstsheet.rows.count, 1).end(xlup).row + 1 'a列の最後のデータの行+1 if (dstrowtop = 2) and (dstsheet.cells(1, 1) = "") then '最初の行が2行目で、実は1行目にデータが無い場合 dstrowtop = 1 'コピー先データなし(コピー先は先頭行から) end if 'コピーする列名を配列へ取得 cols = split(copycolumns, ",") 'コピー開始 for i = 0 to ubound(cols) srcsheet.range(cols(i) & srcrowtop & ":" & cols(i) & srcrowbottom).copy destination:=dstsheet.cells(dstrowtop, i + 1) next end sub