Excel VBA質問箱 IV

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

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


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

【27809】入力ボタン 青朝顔 05/8/20(土) 17:38 質問[未読]
【27810】Re:入力ボタン kobasan 05/8/20(土) 17:52 発言[未読]
【27811】Re:入力ボタン Kein 05/8/20(土) 17:57 回答[未読]
【27812】ありがとうございます。 青朝顔 05/8/20(土) 18:08 お礼[未読]
【27813】再び質問 青朝顔 05/8/20(土) 18:22 質問[未読]
【27814】Re:再び質問 Kein 05/8/20(土) 18:46 回答[未読]
【27815】Re:再び質問 青朝顔 05/8/20(土) 18:59 お礼[未読]

【27809】入力ボタン
質問  青朝顔  - 05/8/20(土) 17:38 -

引用なし
パスワード
   初心者です。お知恵拝借希望します。

Dim XX As Integer
Dim YY As Integer
XX = ActiveCell.Column
YY = ActiveCell.Row
ActiveCell = Cells(3, 2)

という文でアクテイブセルにCells(3, 2)の文字書き込みをさせているのですが
これは単にActiveCell = Cells(3, 2)と略してもいいのでしょうか。
上4行のコードの意味がよくわからず、そんな事考えています。

【27810】Re:入力ボタン
発言  kobasan  - 05/8/20(土) 17:52 -

引用なし
パスワード
   ▼青朝顔 さん 今日は。

>初心者です。お知恵拝借希望します。
>
>Dim XX As Integer  '<==変数を宣言
>Dim YY As Integer
>XX = ActiveCell.Column 'アクティブセルの列番号
>YY = ActiveCell.Row   'アクティブセルの行番号

>ActiveCell = Cells(3, 2)

はこれでも動きますが、セルの数値を扱うときは
ActiveCell = Cells(3, 2).Value
とした方がベストでしょう。
セルの文字を扱うときは、
ActiveCell = Cells(3, 2).Text
とした方がベストです。

このように、数値か文字かを明確にしてプログラムすると、予期せぬ動きを見つけたり、修正が楽になります。


>という文でアクテイブセルにCells(3, 2)の文字書き込みをさせているのですが
>これは単にActiveCell = Cells(3, 2)と略してもいいのでしょうか。


>上4行のコードの意味がよくわからず、そんな事考えています。

【27811】Re:入力ボタン
回答  Kein  - 05/8/20(土) 17:57 -

引用なし
パスワード
   変数XXとYYに値を格納しているのに、その後は一度も利用されていませんね。
それなら無駄なコードと言われてしまいます。もっともアクティブセルに他のセルの
値を代入するのに、いちいち行と列を取得する必要はありませんので
>ActiveCell = Cells(3, 2)
だけで良いことは良いのですが、このようにプロパティを省略した書き方はお勧め
できません。ここはきちんと

ActiveCell.Value = Cells(3, 2).Value

と、するべきでしょう。

【27812】ありがとうございます。
お礼  青朝顔  - 05/8/20(土) 18:08 -

引用なし
パスワード
   Kein さん、kobasanさん、素早い御返事ありがとうございます。
>変数XXとYYに値を格納しているのに、その後は一度も利用されていませんね。

kobasanさんのレスを見て、自分も何でアクテティブセルの方が変数になるのか
よくわかりませんでした。別のファイルのコードをコピーしたもので、お恥ずかしい。

>ActiveCell.Value = Cells(3, 2).Value
>と、するべきでしょう。

これでやってみます。何せ今のファイル重たいので
軽くするのに必死です。でも色々わかってくると楽しいですね。

再拝

【27813】再び質問
質問  青朝顔  - 05/8/20(土) 18:22 -

引用なし
パスワード
   もうしわけございません。

実はあのコードの後ろにセルを黄色くするコードを自分で
入れていたのですが、さらにその後ろに

 With Selection.Interior
      .ColorIndex = 6
      .Pattern = xlSolid
    End With
Cells(YY, XX + 1).Activate

となっていて最期の一行がエラーになってデバックモードになってしまいました。
このCells(YY, XX + 1).Activateをなしにして、アクテティブセルを下に送る方法は
ないものでしょうか。
次のセルに送らなくてもあまり困らないのですが、、、。

【27814】Re:再び質問
回答  Kein  - 05/8/20(土) 18:46 -

引用なし
パスワード
   先にも書いたように、アクティブセルを操作するのにいちいち行・列を取得する
必要はないのです。そしてアクティブセルから "いくつ離れたところにある"セル
とか、"いくつ拡大した範囲" を指定するには、Offset や Resize プロパティを
活用すれば良いのです。つまり
>Cells(YY, XX + 1)


ActiveCell.Offset(, 1)

で、同じことになります。さらに
>あのコードの後ろにセルを黄色くするコードを
入れて、次のセル(ただし右隣り)を選択するのなら

With ActiveCell
  .Interior.ColorIndex = 6
  .Offset(, 1).Activate
End With

と、します。
>アクテティブセルを下に送る
のなら

With ActiveCell
  .Interior.ColorIndex = 6
  .Offset(1).Activate
End With

です。Offset と Resize プロパティをヘルプで調べて、今後のプログラミングに
生かして下さい。結構使えるプロパティですから、重宝するはずです。

【27815】Re:再び質問
お礼  青朝顔  - 05/8/20(土) 18:59 -

引用なし
パスワード
   重ね重ねご指導ありがとうございました。早速使わせていただきます。
アドバイスされた点も色々勉強しておきます。

▼Kein さん:
>先にも書いたように、アクティブセルを操作するのにいちいち行・列を取得する
>必要はないのです。
>With ActiveCell
>  .Interior.ColorIndex = 6
>  .Offset(1).Activate
>End With
>
>です。

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