[[20150705081421]] 『マクロ記録から』(ちぃさん) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロ記録から』(ちぃさん)

連日お世話になります。

またですが、[[20150628122225]] に関連した内容です。

まず、したい事は [[20150628122225]] にあるエラー表示された部分の除去です。

毎回、手動作業は手間なのでマクロで作業時間の短縮をしたいのです。

マクロの記録は

Sub Macro2()
'
' Macro2 Macro
'

'

    Rows("1:1").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "a"
    Range("O1").Select
    ActiveCell.FormulaR1C1 = "a"
    Columns("C:C").Select
    Range("C:C").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "O1:O2"), CopyToRange:=Range("G1"), Unique:=False
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
End Sub

マクロの記録ではC列の値のみの処理となっていますが
現在は

Sub test2()

    Rows("1:1").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "a"
        Range("D1").Select
    ActiveCell.FormulaR1C1 = "a"
        Range("E1").Select
    ActiveCell.FormulaR1C1 = "a"
        Range("F1").Select
    ActiveCell.FormulaR1C1 = "a"
    Range("O1").Select
    ActiveCell.FormulaR1C1 = "a"

        Columns("C:C").Select
           Range("C:C").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "O1:O2"), CopyToRange:=Range("G1"), Unique:=False
        Columns("D:D").Select
           Range("D:D").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "O1:O2"), CopyToRange:=Range("H1"), Unique:=False
        Columns("E:E").Select
           Range("E:E").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "O1:O2"), CopyToRange:=Range("I1"), Unique:=False
        Columns("F:F").Select
           Range("F:F").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "O1:O2"), CopyToRange:=Range("J1"), Unique:=False

    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
End Sub

このような感じです。
質問項目は2点で

1、現在、作成中のコードもっと短くしたいのと

2、1部わからない部分がありますのでお力をお貸しいただけないでしょうか。

1部わからない部分というのは[[20150628122225]]にあります

 >上記のようにしておき、
 >B列のセルを選択した状態で、メニューのデータ → フィルタ → フィルタオプションの設定

 >リスト範囲に範囲が表示されるはずなので、違っていたら修正。

 >検索条件範囲を E1:E2

 >上にある[抽出先]の「指定した範囲」をクリックで選択してから

この部分の処理です。

 Range("O1").Select
    ActiveCell.FormulaR1C1 = "a"

この部分現在 O1 に >0  と入力しているのですが P1 に変更するとエラー表示除去動作がしません。

何故でしょうか。

以上の2点です。

説明不足部分がありましたら指摘ください。

どうぞ宜しくお願い致します。

< 使用 Excel:Excel2003、使用 OS:WindowsXP >


こんにちは。

> この部分現在 O1 に >0  と入力しているのですが P1 に変更するとエラー表示除去動作がしません。
> 何故でしょうか。

P1で、もういちどマクロの記録を取ってみれば分かります(^^
ひとくちに言えば、そこじゃないんです。

※一般機能のほうもマクロのほうも、ヘルプを読まれるようお勧めします。
 見える景色がずいぶん変わってくると思います。

( 佳 ) 2015/07/05(日) 09:21


  ( 佳 )さん ありがとうございます。

変更するのコチラでしたか。

Columns("C:C").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _

        "P1:P2"), CopyToRange:=Columns("H:H"), Unique:=False

直接 >0 を書くことはできないのですか?

Columns("C:C").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=>0, CopyToRange:=Columns("H:H"), Unique:=False

こちらならエラーがでます。
(ちぃさん) 2015/07/05(日) 09:36


こんにちは。

再掲
> ※一般機能のほうもマクロのほうも、ヘルプを読まれるようお勧めします。
( 佳 ) 2015/07/05(日) 09:44


( 佳 )さん ありがとうございます。

AutoFilterメソッドを使うって事ですか?

コレって今あるのを組み換えが必要になるんですよね?
(ちぃさん) 2015/07/05(日) 12:00


 横から失礼。

 >>AutoFilterメソッドを使うって事ですか? 
 >>コレって今あるのを組み換えが必要になるんですよね?

 佳さんのコメントをよく読んでください。別の機能をつかいなさいとは一言もおっしゃっていません。
 「ヘルプをよく読みましょう」と書かれていますよね。
 最近は、昔のローカルヘルプではないので、記述もそっけないものが多いのですが、それでも、コードの中の
 AdvancedFilterのどこかをマウスでクリックしてF1をおせば

https://msdn.microsoft.com/ja-jp/library/office/ff841242(v=office.15).aspx

 がでてきます。

 そこにVBAの実に簡単な例文が掲載されていますが、まず、そのコードの中の CriteriaRange がどう書かれているか
 じ〜〜っと目を凝らして眺めて、自分のコードとどこが違うのかを確かめてください。
 次に、パラメータ説明の中の CriteriaRange を読んでみてください。
 何を指定するかということが、そこに書かれています。

 また、佳さんが指摘されているように、まず、マクロから離れて、フィルターオプションの操作をやってみましょう。
 これは、ネットで フィルターオプション で検索すると、解説ページも多いですので、それらを参考に。
 で、操作での抽出ができれば、今度はそれをマクロ記録しましょう。
 出来上がったコードの中の AdvancedFilter の CriteriaRange がどうなっているか、自分の目で見て確認しましょう。

(β) 2015/07/05(日) 12:41


(β)さん こちらでも すみません。ありがとうございます。

省略すると、検索条件なしで抽出されます。
省略ってどこの部分のことですか?

見ていてもわからないです。

CriteriaRange:=Range

だけにしても 「引数は省略できません」とでるのですが。
(ちぃさん) 2015/07/05(日) 13:34


 フィルターオプションは、手作業でやるにしろ、マクロで実行するにしろ、きわめて高速処理が可能な優れものです。
 処理効率のみならず、条件の指定も柔軟で、様々な(というか、どんな条件でも)指定が可能です。
 また、同じ場所でオートフィルターのように抽出することもできますし、違う場所(違うシートも)に抽出することもできます。

 オートフィルターに比べて、条件をコードに書きこむことができず、別途、条件用のセルに書きこんで、
 コードではそれを参照しなければいけないというあたりが面倒なのか、敬遠されがちですが、是非、この機会に
 コードのみならず、その操作も身につけておかれたらよろしいかと思います。

 で、CriteriaRange は、その名前の通り、セル領域 です。 たとえば、抜き出す項目タイトルが Z1 に入っていて
 その条件が Z2 に >0 と入っていたとしたら、CriteriaRange:=Range("Z1:Z2") になります。
 CriteriaRangeを省略すればすべて抽出されます。すべて抽出って?と違和感を持たれるかもしれませんが
 フィルターオプションには、元リストの中のこの列とこの列とこの列を抽出するといいう機能があって
 そういった場合に、抽出するデータは全件という場合に、CriteriaRangeを省略します。

 いずれにしても、

 ●まず、フィルターオプション操作を、手作業で行って、その機能を実感してみてください。

(β) 2015/07/05(日) 13:48


フィルタオプション(詳細設定)の構文はこんな感じです。
 ****の部分を修正して使います。

 Sub test()
    Dim リスト範囲 As Range
    Dim 検索条件範囲 As Range
    Dim 抽出範囲 As Range

    Set リスト範囲 = Sheets("****").Range("*****")
    Set 検索条件範囲 = Sheets("****").Range("*****")
    Set 抽出範囲 = Sheets("****").Range("*****")

    リスト範囲.AdvancedFilter _
            Action:=xlFilterCopy, _
            CriteriaRange:=検索条件範囲, _
            CopyToRange:=抽出範囲, _
            Unique:=False

 End Sub

 見出しが必要などの注意事項は、手操作で行うときと同じです。
 なので、まずは手操作で使い方を覚えて下さい。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm

>直接 >0 を書くことはできないのですか?

 できません。マクロの場合、こんな流れにすることが多いです。

 1)どこか使っていないセルに、条件を入力
 2)フィルタオプション実行。
 3)条件を入力したセルを削除

 現在のコードで、仮の見出しを入れて、
 最後に削除しているのと同じ要領です。

(マナ) 2015/07/05(日) 14:04


(マナ)さん ありがとうございます。

 >現在のコードで、仮の見出しを入れて、
 >最後に削除しているのと同じ要領です。

理解しました。

ありがとうございました。

(ちぃさん) 2015/07/05(日) 14:08


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.