Excel VBA質問箱 IV

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

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


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

【53263】セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 13:52 質問[未読]
【53264】Re:セル座標に変数を指定する場合 マクロマン 07/12/24(月) 13:56 発言[未読]
【53265】Re:セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 14:15 お礼[未読]
【53268】Re:セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 18:19 質問[未読]
【53269】Re:セル座標に変数を指定する場合 かみちゃん 07/12/24(月) 18:26 発言[未読]
【53270】Re:セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 18:50 発言[未読]
【53271】Re:セル座標に変数を指定する場合 かみちゃん 07/12/24(月) 18:59 発言[未読]
【53273】Re:セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 19:38 お礼[未読]
【53274】Re:セル座標に変数を指定する場合 かみちゃん 07/12/24(月) 19:49 発言[未読]
【53276】Re:セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 20:01 発言[未読]
【53277】Re:セル座標に変数を指定する場合 かみちゃん 07/12/24(月) 20:15 発言[未読]
【53278】Re:セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 20:53 お礼[未読]
【53272】Re:セル座標に変数を指定する場合 じゅんじゅん 07/12/24(月) 19:05 発言[未読]
【53275】Re:セル座標に変数を指定する場合 プロ初心者 07/12/24(月) 19:50 お礼[未読]

【53263】セル座標に変数を指定する場合
質問  プロ初心者  - 07/12/24(月) 13:52 -

引用なし
パスワード
   初めてここでお世話になります、よろしくお願い致します。
自分のレベルは、最近やっと記録したマクロに編集を加えるようになった程度なので
書き方が無茶苦茶かと思いますがお許し下さい。

やりたい事は、A2を判定してTrueならばSheet2の座標(1,W2〜W12の数値)をコピーし
一つ右にペーストしたいのですが
8行目でどうしてもエラーが出てしまうのです。
何がいけないんでしょうか?

  Dim y1, y3, y4 As Integer
    If Range("a2").Value = True Then
      y1 = 1
        For y2 = 1 To 11
          y3 = y1 + y2
          y4 = Cells(23, y3).Value
          Sheets("sheet2").Select
          Range("1, y4").Select
          ActiveCell.Copy
          Cells(2, y4).Select
          ActiveSheet.Paste
        Next
  
    End If

【53264】Re:セル座標に変数を指定する場合
発言  マクロマン  - 07/12/24(月) 13:56 -

引用なし
パスワード
   変数を""の中に入れてはいけません。
文字列の一部と看做されてしまいます。

【53265】Re:セル座標に変数を指定する場合
お礼  プロ初心者  - 07/12/24(月) 14:15 -

引用なし
パスワード
   早速のお返事ありがとうございます。
おそらくそうだろうとは思っていましたが
どうあがいてもエラーになるので闇雲に弄って
戻したつもりがそのままになっていました。

【53268】Re:セル座標に変数を指定する場合
質問  プロ初心者  - 07/12/24(月) 18:19 -

引用なし
パスワード
   またちょっと無駄な足掻きをしてみたので経過報告致します。

  Dim y1, y3, y4 As Integer
    If Range("a2").Value = True Then
      y1 = 1
        For y2 = 1 To 11
          y3 = y1 + y2
          y4 = Cells(y3, 23).Value
          Worksheets("ABILITY").Activate
          Cells(y4, 1).Select
          ActiveCell.Copy
          Cells(y4, 2).Select
          ActiveSheet.Paste
        Next
      End If

上の8行目と10行目のy4を変数ではなく数値に置き換えてみたところ
エラー発生せず実行完了致しました。
変数ではないためFor〜Nextが効いたかどうか不明ですが。
おかげで座標指定方法が逆だという事もわかりました。
それで、再度変数に戻すと同じエラーが出るのです。

Range(.Cells(y4, 1)).Select
に変えるとエラー内容が
参照が不正または不完全です
となります。
これを解決しようと今まで検索掛けた用語は
vba 座標 変数 range cells
ですが不足してる用語などありましたら教えて頂きたく存じます。

【53269】Re:セル座標に変数を指定する場合
発言  かみちゃん  - 07/12/24(月) 18:26 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>Range(.Cells(y4, 1)).Select
>に変えるとエラー内容が
>参照が不正または不完全です

Cellsの前にある"."(ピリオド)をつけている意図は、何ですか?
投稿時の消し忘れ?コードの消しすぎ?単純にわからない?
いろいろ推測されます。

【53270】Re:セル座標に変数を指定する場合
発言  プロ初心者  - 07/12/24(月) 18:50 -

引用なし
パスワード
   早い回答ありがとうございます。
意図を尋ねられると少々痛いですが仰られた項目全てに該当すると思います。
初投稿時に申しました通り、始めたばかりで何が何やらわかってない状態ですので
無駄な.や""や,が入っててもわからないんです。
申し訳ありませんが他におかしい箇所がありましたら
全て「わかっていない」と解釈して頂けませんでしょうか。
よろしくお願い致します。

【53271】Re:セル座標に変数を指定する場合
発言  かみちゃん  - 07/12/24(月) 18:59 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>意図を尋ねられると少々痛いですが仰られた項目全てに該当すると思います。
>初投稿時に申しました通り、始めたばかりで何が何やらわかってない状態ですので
>無駄な.や""や,が入っててもわからないんです。

では、

>Range(.Cells(y4, 1)).Select
>に変えるとエラー内容が
>参照が不正または不完全です

の原因は、
Cellsの前にある .(ピリオド)をつけているのが原因です。

つけなければいけないときもあるのですが、今回の場合は、余計です。

あまりたくさんのことを書いてもごちゃごちゃになるでしょうから、今の時点
では、ここまでにしておきますね。

【53272】Re:セル座標に変数を指定する場合
発言  じゅんじゅん  - 07/12/24(月) 19:05 -

引用なし
パスワード
   ▼プロ初心者 さん:
>またちょっと無駄な足掻きをしてみたので経過報告致します。
>
>  Dim y1, y3, y4 As Integer
>    If Range("a2").Value = True Then
>      y1 = 1
>        For y2 = 1 To 11
>          y3 = y1 + y2
>          y4 = Cells(y3, 23).Value
>          Worksheets("ABILITY").Activate
>          Cells(y4, 1).Select
>          ActiveCell.Copy
>          Cells(y4, 2).Select
>          ActiveSheet.Paste
>        Next
>      End If
>
>上の8行目と10行目のy4を変数ではなく数値に置き換えてみたところ
>エラー発生せず実行完了致しました。
>変数ではないためFor〜Nextが効いたかどうか不明ですが。
>おかげで座標指定方法が逆だという事もわかりました。
>それで、再度変数に戻すと同じエラーが出るのです。
>
>Range(.Cells(y4, 1)).Select
>に変えるとエラー内容が
>参照が不正または不完全です
>となります。
>これを解決しようと今まで検索掛けた用語は
>vba 座標 変数 range cells
>ですが不足してる用語などありましたら教えて頂きたく存じます。

推測で申し訳ないですけど、

>          Worksheets("ABILITY").Activate
シート名”ABILITY”をアクティブにした後で次のループの際には、
>          y4 = Cells(y3, 23).Value
このセルは元のシートではなく、シート名”ABILITY”のセルを参照するのでは?
と思うのですが。。。
違っていたらすいません。

【53273】Re:セル座標に変数を指定する場合
お礼  プロ初心者  - 07/12/24(月) 19:38 -

引用なし
パスワード
   確かにそれを削除するとエラー内容が変わりました。
今は意味がわかっていないのであれですが、
つけなければいけない時もあるというのは覚えておきます。
勉強になりました、ありがとうございます。

【53274】Re:セル座標に変数を指定する場合
発言  かみちゃん  - 07/12/24(月) 19:49 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>確かにそれを削除するとエラー内容が変わりました。
>今は意味がわかっていないのであれですが、

エラー内容が変わったということは、別のエラーが出たということでしょうか?
であれば、[53272]のじゅんじゅんさんのコメントも参考にしてください。

.をつける場合は、
Sheets("Sheet1").Cells(〜

With Sheets("Sheet1")
 .Cells(〜
End With
と言う書き方をする場合です。
. をつけなければ、アクティブシートのセルという意味になりますから、
複数のシートを跨るときは、
Sheets("Sheet1").Cells(〜
というような記述をするようにされたほうがいいと思います。

なお、
Sheets("Sheet1").Cells(1, 2).Select
のような書き方はSheet1がアクティブシートでない場合は、エラーとなりますので、注意しましょう。

あと、コード全体がしたいことのコードになっていないように思います。

再度、したいことを整理してみてはいかがでしょうか?

【53275】Re:セル座標に変数を指定する場合
お礼  プロ初心者  - 07/12/24(月) 19:50 -

引用なし
パスワード
   ご指摘のあった通り、アクティブシートを戻す行を追加してみたところ
思い通りの結果になりました。
今までエラーの出てる行だけがまずいと思いその先は後でいいやと思っておりました。
まさかこんな所が原因だとは思ってもみなかったです。
今後、中途で実行してはいけないという事を踏まえてやっていきます。
わけのわからない質問の書き方にもかかわらずつきあって下さりありがとうございました。
では失礼致します。

【53276】Re:セル座標に変数を指定する場合
発言  プロ初心者  - 07/12/24(月) 20:01 -

引用なし
パスワード
   今の自分にはかなり難しいのですが
.が必要なのは前にsheetの記述があるときのみで
rangeの場合は意味をなさないばかりかエラーになってしまうという事でしょうか?

ちなみにじゅんじゅん様の方にはレスしましたがこの件については
元シートをアクティブにする行を追加する事で解決致しました。

【53277】Re:セル座標に変数を指定する場合
発言  かみちゃん  - 07/12/24(月) 20:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>.が必要なのは前にsheetの記述があるときのみで
>rangeの場合は意味をなさないばかりかエラーになってしまうという事でしょうか?

Sheet1がアクティブになっている場合は、
Sheets("Sheet1").Cells(y4, 1).Select

Cells(y4, 1).Select
です。

Sheet1がアクティブになっていない場合は、
Sheets("Sheet1").Cells(y4, 1).Select
は他シートのセルを選択しますので、エラーになります。

つまり、. をつけるなら、前にシート名がいるし、
アクティブシートを示すからシート名を書かない場合は、. をつけてはいけません。
どちらかハッキリしましょうという意味です。

ただし、初心者の方は、よく間違うのですが、シート名は明示されたほうがいいと思います。
面倒ならば、そのときのアクティブシートがどこなのかはよく考えたほうがいいです。

【53278】Re:セル座標に変数を指定する場合
お礼  プロ初心者  - 07/12/24(月) 20:53 -

引用なし
パスワード
   なるほど、当面は必ずシート名は明示するようにします。
丁寧なご説明に感謝致します。
ありがとうございました。

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