Archive for the ‘excel’ Category

Excel VBAでRangeをまとめる

9月 2nd, 2012

あるセルに「A1,A2,B1,B2」と入力し、VBAでこれらのアドレスを全て選択するメソッド作りたくて、下記コードをVBAで作成。

input_val =Cells(x,y).value
Range(input_val).select

おお、できたできた!!!

調子こいて、うん十件以上のアドレスをセットして・・・_| ̄|○

VBAが内部で落ちてます。どーしてだろう。

どうやら、Rangeに渡すパラメータ数が多いようで。

少なくするには、Unionメソッドを使うと、RangeオブジェクトとRangeオブジェクトを
1つのRangeオブジェクトにまとめられるらしい。
おお、これだよこれ。欲しかったのは。

早速、浮かんだコードをコーディング。

addr = split(input_val ,”,”)
set allRange = Range(addr(0))
for i = 1 To ubound(addr)
set newRange = Range(addr(i))
allRange = union(allRange , newRange )
next
allRange.select

これでいけるはず!

Excelの歯抜け連番

9月 2nd, 2012

Excelで資料を作っていると、連番振りたいことがあります。通常は、Excelの標準機能でどうにかするんですが、複数行の先頭にだけ番号を振って、次のブロックの先頭にだけ・・・っていうことをしたいと思うといちいち自分でて入力しなくちゃいけない。これが、更に途中にブロック挿入するとかなると、また手作業が増えます。

そんな時に便利な数式がこちらです。上の例ではA1,A5,A10にこの数式をセットしています。

=MAX(
INDIRECT(ADDRESS(1,COLUMN())&”:”&
ADDRESS(ROW()-1,COLUMN())))+1

さらにここで、A7に連番の番号を入れたい場合は、そのままA7にこの数式を入れてあげると、A10も更新されます。

Excel2010でのオブジェクトくずれ

8月 23rd, 2012

Excel2002のファイルを2010で開くと、オブジェクトが崩れることがあります。
多くの場合、列幅と行高を再セットすれば回避出来ます。
VBAで列幅もしくは行高を取得して、例えば+1した値をセット。
その後に元の値をセットしてあげればいい。