[[20040215112311]] 『マクロのコードについて』(みっちゃん) ページの最後に飛ぶ

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

 

『マクロのコードについて』(みっちゃん)

下記のように自動記録でマクロをつくりました。が、無駄が多いとおもいます。
もう少し簡略できるコードをご教授お願いします!(みっちゃん)

 Sub データ抽出()
'
' データ抽出 Macro
'
    Sheets("抽出用").Select
    Range("A1").Select
    Sheets("入力用").Range("B3:K105").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("L4:L5"), CopyToRange:=Range("A1:J1"), Unique:=False
    Range("A2").Select
    Selection.Copy
    Range("L2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("L2:O2").Select
    Selection.Copy
    Sheets("日計表").Select
    Range("a65536").End(xlUp).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Sheets("抽出用").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A2:J102").Select
    Selection.Copy
    Sheets("データシートA").Select
    Range("a65536").End(xlUp).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Sheets("抽出用").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A1").Select
    Sheets("入力用").Range("B3:K105").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("M4:M5"), CopyToRange:=Range("A1:J1"), Unique:=False
    Range("M2:O2").Select
    Selection.Copy
    Sheets("日計表").Select
    Range("e65536").End(xlUp).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Sheets("抽出用").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("A2:J102").Select
    Selection.Copy
    Sheets("データシートB").Select
    Range("a65536").End(xlUp).Offset(1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A1").Select
    Sheets("抽出用").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A1").Select
End Sub
Sub 入力2004()
'
'   Sheets("入力用").Select
    Application.ScreenUpdating = False
    Application.Run "'請求書1.xls'!シートOFF"
    Range("B4").Select
    Sheets("抽出用").Select
    Application.Run "'請求書1.xls'!データ抽出"
    Sheets("入力用").Select
    MsgBox "入力完了!"
     Range("A4").Select
    ActiveCell.FormulaR1C1 = "=RC[1]+R[-1]C"
    Range("A4").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("B4").Select
    Selection.ClearContents
    Range("A4").Select
    Selection.Copy
    Range("B4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A4").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("A6").Select
    Selection.Copy
    Range("A4").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("B4").Select
    Range("D4:D105,G4:G105,J4:J105").Select
    Range("J105").Activate
    Selection.ClearContents
    ActiveWindow.SmallScroll Down:=-92
    Range("D4").Select
    Application.Run "'請求書1.xls'!シートON"
End Sub


 この方法もありですが、
 何をしたいか説明したほうが良いのではありませんか?
 (kazu)


 >何をしたいか説明したほうが良いのではありませんか
 ベストの方法はそうなんですけど、そこまでご自分ででけたんやったらもう少しつっこ
 で、自分で不必要やと思われるコードに「’」マークを付け、それが成立するかどうか
 を検証してみるんが上達の早道やと思いまっせぇ。
 自分の手の内に入れようと思うのなら努力を惜しんではイケマセン。
 上のコードで言えば、
    Range("A2").Copy 'Select
    'Selection.Copy
    Range("L2").Select
    Selection.PasteSpecial Paste:=xlPasteValues ', Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Range("L2:O2").Copy 'Select
    'Selection.Copy
 と言った案配ですワ。
 そしたらどれだけ省略出来るか身ぃをもって体験でけますさかいナ。
 百聞は一見にしかず、百見は一験にしかずでっせ。(弥太郎語録)

 何でも経験が物言いますさかいナ。
        ほな・・(弥太郎)


kazu様 弥太郎様 私マクロ初心者のため、どのコードをどのように直せばよいのか
わからないのです。今現在、参考書と格闘していますが、私の頭では限界があり、この質問ボードを利用させていただいています。「ここをこうすれば簡略できる」と、おしえていただけば、つまり私の勉強のためです。説明不足とは思いますが、私の意をおくみください。(みっちゃん)


 ここまでマクロの記録で全て作ったのは賞賛します。が
 自分が実際に行っている作業全てを記録して、全部まとめて何とかしてくれ
 というのは、無茶としかいえません。

 あなたがすべきことは、

 (1)小さな作業を一つ一つマクロにして順番に実行する。
  (実際小分けにマクロ記録したものを最後に一つにしたのだと思います)
 (2)似ている処理をまとめてサブルーチン化する。
  (処理は同じだけどセルの範囲が違うなど)
 (3)繰り返しでできるものをFor ループなどで行う。

 (kazu)

 たいていの場合、select は要らないので、

 Range("A2").Select
 Selection.Copy
   ↓
 Range("A2").Copy

 にすることができます。

  (INA)


kazu様 私の勉強不足、説明不足もありご迷惑をおかけしています。全部なんとかしてくださるとは思っていませんでした。ご指摘のような作業をしたいがためです。
INA様のような回答が、たいへんありがたいです。すこしずつではありますが、勉強させていただきます。今後とも宜しくお願いします。INA 様ありがとうございます。(みっちゃん)


 Application.CutCopyMode = False
も、最後のもの以外は削除しても良いと思いますよ。
(KAMIYA) 
KAMIYA様 ありがとうございます。(みっちゃん)

コメント返信:

[ 一覧(最新更新順) ]


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