Excel VBA質問箱 IV

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

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


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

【16692】範囲について 初心者 04/8/6(金) 11:44 質問[未読]
【16695】Re:範囲について かみちゃん 04/8/6(金) 12:04 発言[未読]
【16697】Re:範囲について 初心者 04/8/6(金) 12:54 質問[未読]
【16698】Re:範囲について かみちゃん 04/8/6(金) 13:05 回答[未読]
【16699】Re:範囲について 初心者 04/8/6(金) 13:14 質問[未読]
【16701】Re:範囲について かみちゃん 04/8/6(金) 13:56 回答[未読]
【16704】Re:範囲について 初心者 04/8/6(金) 15:16 お礼[未読]

【16692】範囲について
質問  初心者  - 04/8/6(金) 11:44 -

引用なし
パスワード
   以前質問した続きなのですが、
範囲 = Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).Row
という変数を教えていただいたのですが、このコードをSheet2に数字が入ってる所までを指定するという感じにしたいのですが、どうしたらいいでしょうか?

【16695】Re:範囲について
発言  かみちゃん  - 04/8/6(金) 12:04 -

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

>範囲 = Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).Row
>という変数を教えていただいたのですが、このコードをSheet2に数字が入ってる所までを指定するという感じにしたいのですが、どうしたらいいでしょうか?

前回の質問内容がどのようなものなのかがよくわからないのですが・・・
まず、この変数「範囲」は、Sheet2のA列の最下端セルを含む領域の上端セルの「行番号」を選択します。(表現がややこしいですね。)
つまり、行番号を取得するのであって、範囲を取得しているものではありません。

「Sheet2に数字が入っている所まで指定する」というのは、「どこからSheet2に数字が入っている所まで」なのでしょうか?

ちなみに、上記コードは、たぶんこのままでは動かないと思います。(Excel2002で動作確認済み)

【16697】Re:範囲について
質問  初心者  - 04/8/6(金) 12:54 -

引用なし
パスワード
   かみちゃんさんこんにちわ。早速の解答ありがとうございます。
>「Sheet2に数字が入っている所まで指定する」というのは、「どこからSheet2に数字が入っている所まで」なのでしょうか?
すいません。説明不足でした。A5に数字が入っていて最終行というのは固定ではありません。データによってそのつど変わります。一番最初の行から空白のある行までを指定したいのですが、よろしくおねがいします。

【16698】Re:範囲について
回答  かみちゃん  - 04/8/6(金) 13:05 -

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

> A5に数字が入っていて最終行というのは固定ではありません。データによってそのつど変わります。一番最初の行から空白のある行までを指定したいのですが、よろしくおねがいします。

CurrentRegion プロパティを使います。
空白行と空白列で囲まれたセル範囲が取得できます。
たとえば、以下のような感じです。
Sub Macro1()
 Worksheets("Sheet2").Range("A5").CurrentRegion.Select
End Sub

【16699】Re:範囲について
質問  初心者  - 04/8/6(金) 13:14 -

引用なし
パスワード
   かみちゃんさん。ありがとうございます。
>CurrentRegion プロパティを使います。
>空白行と空白列で囲まれたセル範囲が取得できます。
>たとえば、以下のような感じです。
>Sub Macro1()
> Worksheets("Sheet2").Range("A5").CurrentRegion.Select
>End Sub

すいませんエラーになってしまいまいした。
私の書いていた元のコードです。

範囲 = Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).Row

ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE)),0,VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE))"
Sheet2はピボットテーブルでそのデータを参照しようとしています。

【16701】Re:範囲について
回答  かみちゃん  - 04/8/6(金) 13:56 -

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

>私の書いていた元のコードです。
>
>範囲 = Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).Row
>
>ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE)),0,VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE))"
>Sheet2はピボットテーブルでそのデータを参照しようとしています。

このコード本当に動きますか?
Sub Macro1()
 範囲 = Sheet2.Cells(Sheet2.Rows.Count, 1).End(xlUp).Row
 ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE)),0,VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE))"
End Sub
とすると、1行目でエラーになります。

これは、
Sub test()
 範囲 = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count, 1).End(xlUp).Row
 ActiveCell.FormulaR1C1 = "=IF(ISERROR(VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE)),0,VLOOKUP(RC[-8],'Sheet2'!R5C1:R" & 範囲 & "C3,2,FALSE))"
End Sub
としたほうがいいのではないでしょうか?

もっとも、検索した結果だけを取得したいなら、Vlookup関数を使わなくてもできますが・・・

【16704】Re:範囲について
お礼  初心者  - 04/8/6(金) 15:16 -

引用なし
パスワード
   こんにちわ。かみちゃんさんありがとうございました。
範囲 = Worksheets("Sheet2").Cells(Worksheets("Sheet2").Rows.Count, 1).End(xlUp).Row
にすると無事コードがとおりました。
m(__)m

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