Excel VBA質問箱 IV

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

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


9124 / 13644 ツリー ←次へ | 前へ→

【29152】外のシートの最下段を選択 のこのん 05/9/26(月) 20:42 質問[未読]
【29154】Re:外のシートの最下段を選択 LION 05/9/26(月) 20:51 発言[未読]
【29155】Re:外のシートの最下段を選択 ichinose 05/9/26(月) 20:54 発言[未読]
【29159】Re:外のシートの最下段を選択 のこのん 05/9/26(月) 21:23 お礼[未読]
【29161】Re:外のシートの最下段を選択 ichinose 05/9/26(月) 22:53 発言[未読]
【29223】Re:外のシートの最下段を選択 のこのん 05/9/27(火) 23:25 お礼[未読]

【29152】外のシートの最下段を選択
質問  のこのん  - 05/9/26(月) 20:42 -

引用なし
パスワード
   VBA初心者です
シート1に設置したボタンをクリックすると
別なのシートを選択し、
値を入力するというものを作りたいと考えていますが
以下のようなエラーが出まてしまいます。

実行時エラー'1004'
rangeクラスのselectメソッドが失敗しました。
と表示されます。

プログラムは概ね以下のようなものです。

Private Sub CommandButton1_Click()
Worksheets("sheet2").Activate        
    Range("A5").End(xlUp).Select
End Sub

よろしくお願いいたします。

【29154】Re:外のシートの最下段を選択
発言  LION  - 05/9/26(月) 20:51 -

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

Worksheets("sheet2").Range("A5").End(xlUp).Select
とシート名から指定してやればいいと思います。

勘違いならごめんなさい。

【29155】Re:外のシートの最下段を選択
発言  ichinose  - 05/9/26(月) 20:54 -

引用なし
パスワード
   ▼のこのん さん:
こんばんは。

>VBA初心者です
>シート1に設置したボタンをクリックすると
>別なのシートを選択し、
>値を入力するというものを作りたいと考えていますが
>以下のようなエラーが出まてしまいます。
>
>実行時エラー'1004'
>rangeクラスのselectメソッドが失敗しました。
>と表示されます。
>
>プログラムは概ね以下のようなものです。
>
>Private Sub CommandButton1_Click()
  With Worksheets("sheet2")
    .Activate
    .Range("A5").End(xlUp).Select
    End With
>End Sub
としてみて下さい。


>Range("A5").End(xlUp).Select
としてしまうと
既にSheet2がアクティブになっています。
Sheet1のセルA5をセレクトはできないのでエラーになります。
(Range("A5")とするとSheet1のそれだと解釈します)

【29159】Re:外のシートの最下段を選択
お礼  のこのん  - 05/9/26(月) 21:23 -

引用なし
パスワード
    ichinoseさま
ありがとうございます。

ためしにやってみましたところ
作動しました。

ただ、実際に作っているものは、IF文を含んでおり

sheet("sheet2")s.select
iF taxtA="a"then
range("a2").activate
else
range("a3").activate
end if
...
のようになっているため、行数が多くなってしまいます。
何とか業を節約するわけにはいかないのでしょうか。
すみません。



【29161】Re:外のシートの最下段を選択
発言  ichinose  - 05/9/26(月) 22:53 -

引用なし
パスワード
   ▼のこのん さん:
>
>ただ、実際に作っているものは、IF文を含んでおり
>
>sheet("sheet2")s.select
>iF taxtA="a"then
>range("a2").activate
>else
>range("a3").activate
>end if
>...
>のようになっているため、行数が多くなってしまいます。
>何とか業を節約するわけにはいかないのでしょうか。
一つのプロシジャーが極端に行数の長いコードは
私もなるべく作らないように心がけてはいます。
(長くならないように機能分割してプロシジャーを分けます)。

が、

上記のコードの場合、
行数をあえて節約する理由が
ないように思います。

Private Sub CommandButton1_Click()
  With Worksheets("sheet2")
    .Activate
    If taxtA = "a" Then
     .Range("a2").Activate
    Else
     .Range("a3").Activate
     End If
    End With
End Sub

それよりもネストを行って
コードをわかりやすく記述する事を心がけたほうが
よいと思いますよ!!

    If taxtA = "a" Then
     .Range("a2").Activate
    Else
     .Range("a3").Activate
     End If

このIF文

    If taxtA = "a" Then .Range("a2").Activate Else .Range("a3").Activate

とすれば一行で収まりますけど、どっちがわかりやすいですか?

【29223】Re:外のシートの最下段を選択
お礼  のこのん  - 05/9/27(火) 23:25 -

引用なし
パスワード
   ichinoseさま

rangeの前に
コンマをつけて解決することにしました。

ありがとうございました。

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