トップページ > プログラム > 2018年02月11日 > AIGXauyP

書き込み順位&時間帯一覧

34 位/185 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000010001000000000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Excel VBA 質問スレ Part52

書き込みレス一覧

Excel VBA 質問スレ Part52
136 :デフォルトの名無しさん[sage]:2018/02/11(日) 08:29:24.42 ID:AIGXauyP
>>129
例えばC1:D:4を選択した場合

1.obj.Rangeの中で更にobj.Cellsを指定するということは、C列目を基準にC列目を指定をしていることになる。
だからRangeの中にCellsを書く時はobj.Cellsではなく、obj.Worksheet.Cellsが良い。

2.obj1がC1:C4、obj2にD1:D4をセットしたいってことだよな?
obj.Cells(obj.Count / 2, 1)
この書き方だと行数を半分にしているのだがこれは一体・・・
もしC1:F10を指定した場合にC1:D10、E1:F10に分けたいわけじゃないの?

3.可読性が死ぬからRange使うのをやめよう。
範囲指定をする時はResize、Offsetを使ったほうが直感的です。

当初の質問を参考に2の通りだと仮定して
Set obj1 = obj.Resize(, obj.Column / 2)
Set obj2 = obj.Resize(, obj.Column / 2).Offset(,obj.Column / 2)

Objには2列しか選択されない事が確定しているなら
Set obj1 = obj.Resize(, 1)
Set obj2 = obj.Resize(, 1).Offset(,1)
Excel VBA 質問スレ Part52
148 :デフォルトの名無しさん[sage]:2018/02/11(日) 12:56:24.79 ID:AIGXauyP
>>137
公式文献は知らないがそういうもんだと納得している。

想像()とか、こんなくらい知ってるわヴォケとか言われそうだが
set ws = Worksheets(1)があると仮定して。

これはどれもRange("B2")への参照を示すわけだが
ws.Cells(2,2)
ws.Cells(2,2).Cells(1,1)
ws.Cells(2,2).Range("A1")

CellsとかRangeは同一ワークシート内であれば、いくらでも参照先を変更できる。
例えばこれはどれもRange("C3")への参照。
B2を基準(1,1)として(2,2)を見ていることになるからだ。
ws.Cells(2,2).Cells(2,2)
ws.Cells(2,2).Range("B2")
ws.Range(ws.Cells(2,2).Range("B2"))

問題の件はobjに既にRangeが格納されているからわかりづらいが
Set obj = ws.Range("B2") の場合に
obj.Range(ws.Cells(2,2)) というのは
ws.Range("B2").Range(ws.Cells(2,2)) ってことだよね
単一セルの場合はws.Range("B2").Cells(2,2)と同一の結果になる。

範囲の場合も考え方は同じだがRange(a,b)でaとbに範囲を渡した場合
aとbを合わせた領域の最端の範囲を示すのは言わずもがな。

結局のところ何も難しい話ではなくて、Offsetの相対指定とResizeの範囲指定を同時にできるのがRangeだっていう話に戻る。

普段ws.Range("A1")と書いているものは、実はws.cells(1,1).Range("A1")の省略形だって考えて俺は納得した。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。