半角チルダ

ExcelVBA、その他。
覚え書きや、補足資料などのスクラップブック。
end-u(1037781)

■Filter状態での可視セルから可視セルへのコピー

2009-12-02 21:00:00 | 雑記
オートフィルタやフィルタオプションでデータ抽出し、ある列の表示部分(可視セル範囲)を別の列の可視セル範囲へコピーしたい、つまり横へそのままスライドした位置関係でコピーしたい場合があるとします。

通常の[コピー]-[貼り付け]操作では、非表示部分に貼り付けられたり、『そのコマンドは複数の選択範囲に対して実行できません』のエラーになったりします。

そこで、列の非表示を利用して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メソッドは[編集]-[フィル]-[左方向へコピー]です。

または、コピー元とコピー先を隣接させた後、コピー元だけ選択してフィルハンドルを右あるいは左へドラッグ。...という操作でも同じ結果になります。
Comment
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする