Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9113 / 13646 ツリー ←次へ | 前へ→

【29280】Withの不思議 ちくたく 05/9/29(木) 15:18 質問[未読]
【29282】Re:Withの不思議 とまと 05/9/29(木) 15:58 発言[未読]
【29283】Re:Withの不思議 小僧 05/9/29(木) 16:23 発言[未読]
【29284】Re:Withの不思議 ちくたく 05/9/29(木) 17:20 発言[未読]
【29297】Re:Withの不思議 とまと 05/9/29(木) 23:49 発言[未読]
【29300】Re:Withの不思議 ichinose 05/9/30(金) 7:25 発言[未読]
【29302】Re:Withの不思議 とまと 05/9/30(金) 9:32 発言[未読]

【29280】Withの不思議
質問  ちくたく  - 05/9/29(木) 15:18 -

引用なし
パスワード
   こんにちは

http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=29274;id=excel
でも、書いたんですが、

Sub Withの不思議()
  Dim i As Integer
  Dim myAdr As String
  With Range("A1")
    .Insert shift:=xlShiftDown
    .Value = "A1にいれたはず"
  End With
End Sub

こんなコードを実行すると、
A2に「A1にいれたはず」の文字列が入ります。
なんか、まぁ、なるほどなぁ、とも思えるんですけど、
いやーな、感じもします。仕様なんでしょうか?

【29282】Re:Withの不思議
発言  とまと  - 05/9/29(木) 15:58 -

引用なし
パスワード
   こんにちは。

F8でステップするとなるほどなあ。。
というかんじですね(^^

Withの仕様ですかね。。

識者から回答あるとよいですね。

【29283】Re:Withの不思議
発言  小僧  - 05/9/29(木) 16:23 -

引用なし
パスワード
   ▼ちくたく さん、とまと さん:
こんにちは。

残念ながら識者ではありませんが…。

With で取得しているのはセル番地(Address)の値ではなく、
セルのオブジェクトそのものだから別に変ではない気がするのですが…。

Sub Del()
  With Range("A1")
    .Delete
  End With
End Sub

こんな事して「A1」がなくなってしまったら大変ですよね(笑)

【29284】Re:Withの不思議
発言  ちくたく  - 05/9/29(木) 17:20 -

引用なし
パスワード
   とまとさん 小僧さん
こんにちは。

>With で取得しているのはセル番地(Address)の値ではなく、
>セルのオブジェクトそのものだから別に変ではない気がするのですが…。

うん、そうです、わかるんですよ。
だけど、なんか、きもちわるいなぁ、って感じなんです。

例えば、こんなコードとか。

Sub アクティブセル()
  ActiveCell.Range("A2").Select
End Sub

このコードを実行すると、下に一つアクティブなセルが、
オフセットします。

間違ってコードを書いたときに気づいたんですけど、
気持ちわるい感じしませんか?

【29297】Re:Withの不思議
発言  とまと  - 05/9/29(木) 23:49 -

引用なし
パスワード
   こんばんは。
検証してみました。(^^
変な感じしますねー。
Sub アクティブセル()とSub アクティブセル3()
が同じ意味ですよねー?うーん。。。


Sub アクティブセル()
  Range("A2:G5").Range("A2").Select
End Sub

Sub アクティブセル2()
  Range("A2:G5").Cells(1, 1).Select
End Sub

Sub アクティブセル3()
  Range("A2:G5").Cells(2, 1).Select
End Sub

【29300】Re:Withの不思議
発言  ichinose  - 05/9/30(金) 7:25 -

引用なし
パスワード
   ▼とまと さん:
おはようございます。

>変な感じしますねー。
>Sub アクティブセル()とSub アクティブセル3()
>が同じ意味ですよねー?うーん。。。
逆に同じで何が不可解なのか?

sub test()
  range("a1:a5").formula="=a2"
end sub

とすると、A2には、「=A3」と入力されてますよね?

Range("")の""内の指定は相対アドレスなんです。

Activesheet.range("")
とすれば、セルA1を起点としての相対位置で示されます

普段は、シートのビジュアルイメージを見ているので何も違和感を
感じませんが、

Range("a2")

って、セルA1を起点にして
行のみが一つ増えた位置-----つまり絶対アドレスで$A$2を指します。
(Range("")内の$は無視されるんですって!!)


Range("a2").range("")
とすれば、セルA2を起点としての相対位置で示されます。

同様な考え方をすると、

Range("a2").range("a2")

セルA2を起点(a1とした)相対位置A2なので

行のみが一つ増えた位置-----つまり絶対アドレスで$A$3を指します。

Range("a2").range("a2")

って、こんな書き方はできませんが、R1C1形式で記述できるとすると、

range("r2c1").range("r[1]c")

と同じだとすると

>Sub アクティブセル3()
>  Range("A2:G5").Cells(2, 1).Select
>End Sub


これと同じになるのもわかる話ですよね!!

【29302】Re:Withの不思議
発言  とまと  - 05/9/30(金) 9:32 -

引用なし
パスワード
   ichinose さんおはようございます。

自分なりに理解できたような気がします。
丁寧な説明ありがとうございました。(^^/

9113 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free