Excel VBA質問箱 IV

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

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


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

【63234】End(xlUp) の一つ上を取得したい りょう 09/10/19(月) 12:02 質問[未読]
【63235】Re:End(xlUp) の一つ上を取得したい かみちゃん 09/10/19(月) 12:11 発言[未読]
【63236】Re:End(xlUp) の一つ上を取得したい りょう 09/10/19(月) 16:10 質問[未読]
【63238】Re:End(xlUp) の一つ上を取得したい かみちゃん 09/10/19(月) 16:29 発言[未読]
【63241】Re:End(xlUp) の一つ上を取得したい 一言居士 09/10/19(月) 17:04 発言[未読]
【63249】Re:End(xlUp) の一つ上を取得したい りょう 09/10/19(月) 22:41 お礼[未読]
【63248】Re:End(xlUp) の一つ上を取得したい りょう 09/10/19(月) 22:38 お礼[未読]

【63234】End(xlUp) の一つ上を取得したい
質問  りょう  - 09/10/19(月) 12:02 -

引用なし
パスワード
   初めまして。

AccessVBAからオートメーションでExcelにデータを
出力する処理を作っています。
バージョンはいずれも2003です。


xlSheet.Range("B100").End(xlUp).Value = "テスト"

このコードでB行のデータが入っているセルを
上に検索して最も上にあるセルに「テスト」という
文字を入力できますよね。

そこで質問なのですが、
もし「最も上にあるセル」のもう一つ上に
この文字を入力しようと思った場合、
上記のコードに何かを付け足すだけで可能なのでしょうか?

それとも、上記のコードでいったんセルを取得し
さらにそれから行を-1して・・・というコードを
書く必要があるのでしょうか?


ぜひとも教えてください。
よろしくお願いいたします。

【63235】Re:End(xlUp) の一つ上を取得したい
発言  かみちゃん  - 09/10/19(月) 12:11 -

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

> xlSheet.Range("B100").End(xlUp).Value = "テスト"
> もし「最も上にあるセル」のもう一つ上に
> この文字を入力しようと思った場合、

Offsetプロパティを使えばできるのですが、End(xlUp)が1行目の場合、エラーになることがありますから、以下のようにしてみてはいかがですか?

With xlSheet.Range("B100").End(xlUp)
  If .Row > 1 Then
    .Offset(-1).Value = "テスト"
  Else
    .Value = "テスト"
  End If
End With

【63236】Re:End(xlUp) の一つ上を取得したい
質問  りょう  - 09/10/19(月) 16:10 -

引用なし
パスワード
   ▼かみちゃん さん:

ありがとうございます。
さっそく試してみました。
ただ、この書き方ですと


例えば

B5
B6
   省略
B15
B16
B17

のセルにデータが入っていた場合、
「テスト」という単語をB16に書き込んでしまいます。
目標は、上記の例でいうとB4に書き込みたいのです。


ご提示いただいたコードのOffsetの中を
うまく変更することでこの部分は解決できそうに思いました。
そこで、データのカウントをした変数intNoというのを作って
これをOffsetの中に入れてみようと思ったのですが、
イメージとしてはOffset(0 - (intNo + 1))のような感じで
B4に書き込みができそうですがどのような書き方をしても
実行時エラー1004
アプリケーション定義またはオブジェクト定義のエラーです
と表示されます。

単純にOffset(intNo)だと正常に動くので
ここに変数が入れられないということはなさそうなのですが
どのような書き方をするとうまく動くのでしょうか?


再度質問をさせてください。
よろしくお願いいたします。

【63238】Re:End(xlUp) の一つ上を取得したい
発言  かみちゃん  - 09/10/19(月) 16:29 -

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

>「テスト」という単語をB16に書き込んでしまいます。
>目標は、上記の例でいうとB4に書き込みたいのです。

少し、私が勘違いしていたかもしれません。

> B行のデータが入っているセルを上に検索して最も上にあるセル

改めて質問を読んでみると、まず、この意味がよくわかりません。
単純に考えると、1行目から下方向に見て、最初に値が入っているセルの1つ上なのではないでしょうか?

> データのカウントをした変数intNoというのを作って
> これをOffsetの中に入れてみようと思ったのですが、
> イメージとしてはOffset(0 - (intNo + 1))のような感じで
> B4に書き込みができそうですがどのような書き方をしても
> 実行時エラー1004
> アプリケーション定義またはオブジェクト定義のエラーです
> と表示されます。

変数 intNo の値によります。
たとえば、
End(xlUp)の結果がB4セルだった場合、intNoが2より大きい場合は、そのようなエラーになります。
たとえば、intNoが3の場合は、
Range("B4").Offset(0 - (intNo + 1))
では、
Range("B4").Offset(-4)
となり、B4より4行上は、存在しないからです。

なお、
Range("B4").Offset(intNo)
ではなぜできるかは、
intNo 行の下になるからです。
ただし、
Range("B65533").Offset(intNo)
では、intNoが4の場合、B65533の4行下は、Excel2003以下の場合存在しないので、
同様のエラーになります。

【63241】Re:End(xlUp) の一つ上を取得したい
発言  一言居士  - 09/10/19(月) 17:04 -

引用なし
パスワード
   横から失礼します。

>Range("B100")
というのが何を意味しているのか今一つわからないのですが、

  Dim myRow As Long
  myRow = Range("B100").End(xlUp).CurrentRegion.Rows(1).Offset(-1).Row
  Range("B" & myRow).Value = "テスト"

というようなことをなさりたいんじゃないかと思うのですが。

違ってたらゴメンナサイ。

【63248】Re:End(xlUp) の一つ上を取得したい
お礼  りょう  - 09/10/19(月) 22:38 -

引用なし
パスワード
   ▼かみちゃん さん:
ご教示ありがとうございます。

>改めて質問を読んでみると、まず、この意味がよくわかりません。
>単純に考えると、1行目から下方向に見て、最初に値が入っているセルの1つ上なのではないでしょうか?

たしかにAccessから出力するデータを1つの表にする場合はそれでいいと思うのですが、実際には分類ごとに複数の空白の行をはさんで
6つの表を書き出そうと考えています。
1つ目の表は上からでいいのですが、2つ目以降のことも考えて
下からの検索としたのです。
言葉足らずで申し訳ありません。


後半の説明はたいへんよくわかりました。
もしかしたらOffssetについての自分の認識が間違っているのかも
と気づかされました。
一度じっくり研究してみたいと思います。
その上でわからなかった場合はあらためて質問させていただければと思います。
ありがとうございました!

【63249】Re:End(xlUp) の一つ上を取得したい
お礼  りょう  - 09/10/19(月) 22:41 -

引用なし
パスワード
   ▼一言居士 さん:
教えていただきましてありがとうございます。

>  Dim myRow As Long
>  myRow = Range("B100").End(xlUp).CurrentRegion.Rows(1).Offset(-1).Row
>  Range("B" & myRow).Value = "テスト"


パッと見て、「これこれ」といえるほど自分に能力がないので申し訳ないのですが
さっそく研究してみようと思います!
ありがとうございました!!

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