[[20200908093416]] 『書き方のルール』(しのみや) ページの最後に飛ぶ

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

 

『書き方のルール』(しのみや)

 VLOOKUPを自動化しようとして、マクロの記録を使っています

 【やりたいこと】
 I列に行挿入 → I列にVLookup → I列を選択しH列に値貼り付け → I列を削除

 【実際の記録】
    Columns("I:I").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("I1") = "項目"

    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],Table!R3C23:R7C24,2,0)"
    Range("I2").Select
    Selection.AutoFill Destination:=Range("I2:I00")
    Columns("I:I").Select
    Selection.Copy
    Columns("H:H").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("I:I").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    Range("I1").Select

 【気になること】
 RangeとR1C1の書き方が混在するのですが、統一したほう良いのでしょうか

 RangeとR1C1の違いをネットで調べてみたのですが、
 Rangeはパッと見た時にセルの場所がわかりやすい
 R1C1は範囲指定の場合に使ったほうが便利とのこと
 たしかにそうだと思います。

 ただ、混在しているのもどうなんだろう…?

 後は、今後見やすいようにするために、Selectを削ったりしたほうがよいのか…

 仕事で使っていますが、今までマクロの記録で勉強しながら作ったものがあり
 書き方にルールがないので判断に迷っています

 みなさまはどのように気を付けて書かれていらっしゃるのでしょうか…

< 使用 Excel:Excel2010、使用 OS:Windows10 >


まず後者から。Selectしない書き方にすべきです。これは衆目の一致するところです。
例えば、
http://officetanaka.net/excel/vba/speed/s2.htm
1.可読性の向上
2.速度面の向上
の観点から、Selectしないことをお薦めします。
初級卒業の一つのメルクマールとの意見を見たことがあります。
 
前者は、色々見方はあるかもしれません。
ただ、複数セルに実質同じ式を入れる(ないしコピーして作成する)場合、
A1形式だと別の式だが、R1C1形式だとまったく同一の式になることを利用することもあります。
かといって、R1C1だけ使うべきとも思いませんが。
 
参考にして下さい。

(γ) 2020/09/08(火) 10:23


 例えば、こうした書き方のほうが内容は把握し易いと思います。

 Sub test()
     Columns("I").Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
     Range("I1") = "項目"
     Range("I2").FormulaR1C1 = "=VLOOKUP(RC[-1],Table!R3C23:R7C24,2,0)"
     Range("I2").AutoFill Destination:=Range("I2:I00")
     Columns("I").Copy
     Columns("H").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                                 SkipBlanks:=False, Transpose:=False
     Application.CutCopyMode = False
     Columns("I").Delete Shift:=xlToLeft
 End Sub

(なお、コードの内容そのものにはノーコメントです。)

 マクロ記録をそのまま使うことは稀と考えた方がよいでしょう。

(γ) 2020/09/08(火) 10:32


 > RangeとR1C1の書き方が混在するのですが、統一したほう良いのでしょうか

 ちょっとピンと来ないのですが、数式のA1方式とR1C1方式のことですか?
 そうだとすると、ご提示のコードでは混在していないと思うのですけども。

 入力するセルの位置が決まっているなら、私は分かり易いと思うA1方式です。
 セル位置が決まっていないなら、R1C1にならざるを得ないです。

 >R1C1は範囲指定の場合に使ったほうが便利とのこと

 これも私には分からない見解です。
 どういう範囲指定の時に便利なのか、具体例で示していただけませんか?

 > 見やすいようにするために、Selectを削ったりしたほうがよいのか…
 見易さとは無関係に、Selectしないで済むものはSelectしない。

 ※よけいな動作をエクセルにやらせない。
  完成するまで目で確かめたい、なんてニーズがある場合は別(開発途中なら可)。

(半平太) 2020/09/08(火) 10:34


 yさんありがとうございます
 記述のサンプルも頂まして、助かります
 直しにかかっていたところで、同じように直せていたので
 このまま進めていきたいと思います

 半平太さんありがとうございます
 すみません
 いろんな情報を拾って読んでいたので、混在しているようです

 マクロをちょっとかじった状態で使っている人は、
 マクロの記録のままという方もいらっしゃると思うのですが…^^;
 見直していきたいと思います
(しのみや) 2020/09/08(火) 10:54

コメント返信:

[ 一覧(最新更新順) ]


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