VBA メモ
VBAに関するちょっとしたメモ
目次
Formulaの設定時、=をつければ相対参照で書き込んでくれる
A列は、B列の同じ行を参照するという処理をしたい場合
と書けば、 セルA1は"=B1"、セルA2は"=B2"と処理してくれる。
逆に絶対参照したい場合は
とすれば全部B1を参照してくれる。
これは入力規制などでセル範囲を指定する場合も同じで
1With Range("A1:A100").Validation
2 .Delete
3 .Add Type:=xlValidateList, Formula1:="=B1:B3"
4End With
と指定してもちゃんと相対的に入力規制を設定してくれる
またこれらは【R1C1参照形式】を使用するとしているとちゃんと処理も変わる
渡すのはただの文字列だが、思ってた以上に賢く処理しているみたいです。
入力規制がうまくいかないとき
最初にDeleteしよう
既に入力規制があるところにAddしようとすると「1004:アプリケーション定義またはオブジェクト定義のエラーです」
がでます。
逆に入力規制がない状態でDeleteしても特になにも言ってこないので、とりあえず最初はDeleteしとけば問題ないと思います
参照形式が合っていない
通常の設定では
は設定できるのですが、【R1C1参照形式】に設定している場合、参照できずにエラーを出してしまいます。
そこでApplication.ConvertFormulaメソッドを使って置換を行います。
さらに現在の設定をApplication.ReferenceStyleプロパティで取得できます。
ですので
とすればどちらでも対応できるマクロになります。
<例>
1With Range("A1").Validation
2 .Delete
3 .Add Type:=xlValidateList, _
4 Formula1:=Application.ConvertFormula( _
5 "=B1:B3", _
6 xlA1, _
7 Application.ReferenceStyle)
8End With
Sort.OrientationはXlSortOrientation列挙を使わない
Sort.Orientationはソートを行か列かの設定を行うプロパティである。
この引数はXlSortOrientationを指定しているが、この列挙の変数名がややこしいということで使われていません。→Sortオブジェクトのドキュメントにも使われていない
そこで代わりにxlTopToBottom
(行方向の並び替え)、xlLeftToRight
(列方向の並び替え)を使います。この列挙はエクセルのConstantsにあります。
恐らく後付けでこの定数を作成したんだとおもいます。(新しい列挙型作ってそれを引数にすればいいのに…)