「これはヤバかったな」という遅刻エピソード

Office2000の環境で、オートフィルタを使って抽出したデータをそのまま隣の列へコピー?(セル右下にあわせて十を出して左クリック+左方向へ一列分移動)を行いたいのですが、マクロを実行するとサポートしていませんと表示されます。エクセル200ではダメなのでしょうか?

又は、エクセル2000でも出来るものがありましたら誰か教えてください。

A 回答 (3件)

>ただ、これは手動操作でのみ可能なようです。


>
>マクロ記録するとFillRightメソッドが記録されますが、これを実行しても
>手動でうまくいくものが、マクロでは成功しません。
>#エラーは出ないのですが。(win2000/xl2000、winXP/xl2003)
>#多分仕様でしょう。

すみません。ちょっとウソ書いてました。...反省orz
右にリサイズすれば可能です。
(test1、test2でも状況によっては問題ないですが、もっと簡単でした)

コピー元を選択してマクロを走らせるなら

Selection.Resize(, 2).FillRight

これで。

オートフィルタ抽出状態で実行するなら以下で。
Sub test3()
  With ActiveSheet
    If .AutoFilterMode And .FilterMode Then
      With .AutoFilter.Range.Columns(3) '<-この 3 はコピー元の列。要変更
        If WorksheetFunction.Subtotal(3, .Cells) > 1 Then
          Intersect(.Cells, .Offset(1)).Resize(, 2).FillRight
        End If
      End With
    End If
  End With
End Sub
    • good
    • 0
この回答へのお礼

可視セルコピーすることができました!
ありがとうございます。
すごく簡単にできるんですね!

お礼日時:2009/02/06 02:39

なるほど。

オートフィルタ抽出状態で、可視セルのみの右コピーができるのですね。
使った事なかったです。ありがとうございます。

ただ、これは手動操作でのみ可能なようです。

マクロ記録するとFillRightメソッドが記録されますが、これを実行しても
手動でうまくいくものが、マクロでは成功しません。
#エラーは出ないのですが。(win2000/xl2000、winXP/xl2003)
#多分仕様でしょう。

>エクセル2000でも出来るものがありましたら...
マクロで対応可能ですが、コピーしたいデータ内容によって変わってきます。

『オートフィルタで抽出された後のある列の可視セルのみを、その右列の同じ可視セルにコピーしたい』
という事ですね。
コピー先が値になって構わない、かつコピー先の列の、可視セル以外も値にしてしまって構わないなら
Loop処理不要で

Sub test1()
  Dim ws As Worksheet

  Set ws = ActiveSheet
  ws.Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:="" '抽出条件 要変更
  With ws.AutoFilter.Range.Columns(3).Offset(, 1) '【3】はコピー元の列。要変更
    .FormulaR1C1 = "=RC[-1]"
    ws.AutoFilterMode = False
    .Value = .Value
  End With
  Set ws = Nothing
End Sub

...こんな感じでできますが、
変動範囲のSUM関数などをコピーしたい場合などにも対応させるなら、
LoopしてFormulaR1C1プロパティを設定するようなコードになるかと思います。

Sub test2()
  Dim r As Range

  With ActiveSheet
    .Range("A1").CurrentRegion.AutoFilter Field:=1, Criteria1:="" '抽出条件 要変更
    For Each r In .AutoFilter.Range.Columns(3).SpecialCells(xlCellTypeVisible) '【3】はコピー元の列。要変更
      r.Offset(, 1).FormulaR1C1 = r.FormulaR1C1
    Next
  End With
End Sub

書式もコピーしたい場合は、test2の最後にColumns(4)に対して書式を設定すれば良いです。

この回答への補足

丁寧な回答ありがとうございます。
質問不足がありましてすみません。
コピー先に元々データがあり、オートフィルタで抽出してその間に抽出した可視セルを貼り付けたいのです。
詳細は質問1の補足を参照ください。

補足日時:2009/02/04 08:42
    • good
    • 0

質問の意図が良くわからない。


マクロの記録をとってコードを見る手は有ると思う。
ーー
Sub Macro1()
Range("A1").AutoFilter
Stop
Range("A1:A8").AutoFilter Field:=1, Criteria1:="a"
  Stop
Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Sheet1").Range("B1")
End Sub
Stopはフィルターの解除と実行の様子をシートで確認のため入れたもの。シートで確認後、VBEの実行メニューの継続をクリックして、その後を実行させる。
例データ
A列 A1:A8
コード
a
b
c
a
a
d
c
で実行すると
コードコード
a  ▼a
a
a
のようになって
フィルターを解除すると
コードコード
aa
ba
ca
a
a
d
c
となったがこれではだめな点は何処か?

この回答への補足

質問不足ですみません。
コピー先にデータが入力されており、そのデータと同じ行に貼り付けしたいのです。
コード コード
a
ba
cb
a
a
da
cb
マクロ実行
結果
コード コード
aa
ba
cb
aa
aa
da
cb
という結果を出したいのですが、いかがでしょうか?

補足日時:2009/02/04 08:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!