オートフィルタやフィルタオプションでデータ抽出し、ある列の表示部分(可視セル範囲)を別の列の可視セル範囲へコピーしたい、つまり横へそのままスライドした位置関係でコピーしたい場合があるとします。
通常の[コピー]-[貼り付け]操作では、非表示部分に貼り付けられたり、『そのコマンドは複数の選択範囲に対して実行できません』のエラーになったりします。
そこで、列の非表示を利用してFillRightやFillLeftメソッドを使うと良いです。
■AutoFilter FilterModeでのFillRightメソッドの応用になりますね。
まずサンプルシート作成。
Sub pre()実行後。
A列の値が 1 で抽出した後のD列をF列にコピーします。(色付けしたセル)
同じく、D列をB列にコピーします。
実行後。
こんな感じで、非表示セルに影響与えず、可視セル間のコピーができます。
ぁ、別にマクロでなく、手作業で可能です。
フィルタ抽出状態で、対象外の列を非表示にして、コピー元とコピー先を隣接させて選択します。
その後[編集]-[フィル]-[右方向へコピー]です。ショートカットキーは[Ctrl]+[r]。
左列へコピー、.FillLeftメソッドは[編集]-[フィル]-[左方向へコピー]です。
または、コピー元とコピー先を隣接させた後、コピー元だけ選択してフィルハンドルを右あるいは左へドラッグ。...という操作でも同じ結果になります。
通常の[コピー]-[貼り付け]操作では、非表示部分に貼り付けられたり、『そのコマンドは複数の選択範囲に対して実行できません』のエラーになったりします。
そこで、列の非表示を利用してFillRightやFillLeftメソッドを使うと良いです。
■AutoFilter FilterModeでのFillRightメソッドの応用になりますね。
まずサンプルシート作成。
Sub pre() With Sheets.Add With .Range("A1") .Value = "f1" .AutoFill .Resize(, 6) End With With .Range("B2:F10") .Formula = "=int(rand()*10)" .Value = .Value End With .Range("4:4,7:7").ClearContents .Range("A4,A7,A11").Value = 1 .Range("D4,D7").FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" .Range("D11").FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" .Range("A1").CurrentRegion.AutoFilter 1, 1 .Range("D2:D11").Interior.Color = vbYellow .ShowAllData End With End Sub
Sub pre()実行後。
A列の値が 1 で抽出した後のD列をF列にコピーします。(色付けしたセル)
Sub test1() With ActiveSheet .Range("A1").CurrentRegion.AutoFilter 1, 1 .Columns("E").Hidden = True .Range("D2:F11").FillRight .Columns("E").Hidden = False .ShowAllData End With End Sub
同じく、D列をB列にコピーします。
Sub test2() With ActiveSheet .Range("A1").CurrentRegion.AutoFilter 1, 1 .Columns("C").Hidden = True .Range("B2:D11").FillLeft .Columns("C").Hidden = False .ShowAllData End With End Sub
実行後。
こんな感じで、非表示セルに影響与えず、可視セル間のコピーができます。
ぁ、別にマクロでなく、手作業で可能です。
フィルタ抽出状態で、対象外の列を非表示にして、コピー元とコピー先を隣接させて選択します。
その後[編集]-[フィル]-[右方向へコピー]です。ショートカットキーは[Ctrl]+[r]。
左列へコピー、.FillLeftメソッドは[編集]-[フィル]-[左方向へコピー]です。
または、コピー元とコピー先を隣接させた後、コピー元だけ選択してフィルハンドルを右あるいは左へドラッグ。...という操作でも同じ結果になります。