Excel VBA質問箱 IV

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

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


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

【26759】最終行のセル値を獲得 nossori 05/7/16(土) 20:06 質問[未読]
【26760】Re:最終行のセル値を獲得 かみちゃん 05/7/16(土) 20:20 発言[未読]
【26761】Re:最終行のセル値を獲得 nossori 05/7/16(土) 20:59 質問[未読]
【26762】Re:最終行のセル値を獲得 かみちゃん 05/7/16(土) 21:08 発言[未読]
【26763】Re:最終行のセル値を獲得 nossori 05/7/16(土) 21:26 質問[未読]
【26764】Re:最終行のセル値を獲得 かみちゃん 05/7/16(土) 21:46 回答[未読]
【26765】Re:最終行のセル値を獲得 ichinose 05/7/16(土) 23:24 発言[未読]
【26768】Re:最終行のセル値を獲得 nossori 05/7/17(日) 6:52 お礼[未読]
【26770】Re:最終行のセル値を獲得 ichinose 05/7/17(日) 7:11 発言[未読]
【26771】Re:最終行のセル値を獲得 nossori 05/7/17(日) 7:56 質問[未読]
【26773】Re:シート保護したまま値を入れたい かみちゃん 05/7/17(日) 9:19 発言[未読]
【26774】Re:シート保護したまま値を入れたい nossori 05/7/17(日) 11:23 お礼[未読]

【26759】最終行のセル値を獲得
質問  nossori  - 05/7/16(土) 20:06 -

引用なし
パスワード
   このような売上表があります
E列には関数が入っています。
この状態でE列の最下行のセルを指定したいのですが
コードの書き方を普通にすると関数の入っているところを
通りぬけて「値引き後売上」のセル位置を選択します。
コードは次の通りですが、どのようにすればE列の最下行の
セルを指定できるのでしょうか?

Range("Z12").Value = Range("E65536").End(xlUp).value


日付 商品  売上 値引  値引き後売上
7/16 AAA  100  10   =if(D3="","",C3=D3)
7/16 BBB  200  15   =if(D4="","",C4=D4)
 :
 :

【26760】Re:最終行のセル値を獲得
発言  かみちゃん  - 05/7/16(土) 20:20 -

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

>E列には関数が入っています。
>この状態でE列の最下行のセルを指定したいのですが
>コードの書き方を普通にすると関数の入っているところを
>通りぬけて「値引き後売上」のセル位置を選択します。

これは、Z12セルに「値引き後売上」と表示されるということですか?
試しに、以下のようなコードを記述するとどのように表示されますか?
MsgBox Range("E65536").End(xlUp).Address
ちなみに、手動でE65536セルから、Endキーを押して↑キーを押したら、どうなりますか?

こちらで、検証してみたところ、問題ないように思いますが・・・

【26761】Re:最終行のセル値を獲得
質問  nossori  - 05/7/16(土) 20:59 -

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

今晩は
早速のご解答ありがとうございます。
>
>これは、Z12セルに「値引き後売上」と表示されるということですか?

はい、その通りです。番地が表示されます。失礼しました。

関数の行が15〜100行なんですが、手動でE65536のセルからCtrl+↑でやりますと
一旦100の行で止まります。つまり関数の入っている最終行のセルを
獲得し、再度その行から手動の操作を繰り返すと関数の入っているところに
数字が有っても、そのセルをとおりぬけ「値引き後売上」行(15行目)にまで行ってしまい
ます

>試しに、以下のようなコードを記述するとどのように表示されますか?
>MsgBox Range("E65536").End(xlUp).Address

これを試しますとMsgboxに「$F$100」が表示されます。
さらに、
MsgBox Range("E100").End(xlUp).Addressにすると、「値引き後売上」の項目のセル「$F$15]を獲得しますが。


>ちなみに、手動でE65536セルから、Endキーを押して↑キーを押したら、どうなりますか?
>こちらで、検証してみたところ、問題ないように思いますが・・・

何が問題なんでしょうね。何かが災いしているのでしょうか?

【26762】Re:最終行のセル値を獲得
発言  かみちゃん  - 05/7/16(土) 21:08 -

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

>関数の行が15〜100行なんですが、手動でE65536のセルからCtrl+↑でやりますと
>一旦100の行で止まります。つまり関数の入っている最終行のセルを
>獲得し、再度その行から手動の操作を繰り返すと関数の入っているところに
>数字が有っても、そのセルをとおりぬけ「値引き後売上」行(15行目)にまで行ってしまい
>ます

何がしたいのかがわからなくなりました。
なぜ、再度Ctrl+↑をするのですか?
E65536セルで、Ctrl+↑をするだけでいいのではないでしょうか?

MsgBox Range("E65536").End(xlUp).Address
MsgBox Range("E100").End(xlUp).Address
と2回すると、当然「値引き後売上」のセルが取得されてしまいます。

【26763】Re:最終行のセル値を獲得
質問  nossori  - 05/7/16(土) 21:26 -

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

表現が上手くなくご迷惑をかけています。

>何がしたいのかがわからなくなりました。

ご支持の通りしますと、100行のセルのことろで止まります。
関数はE16〜E100に入っています。
E20行目まで計算結果が出ていたら、そのE20行目を獲得したいのです。
やりたいことは、あくまで、E列の数字が入っている最下行を獲得したいのです。
関数が災いしているしか考えられないのですが、何か良い方法がありましたら
教えてください。


>なぜ、再度Ctrl+↑をするのですか?
>E65536セルで、Ctrl+↑をするだけでいいのではないでしょうか?
その通りです。が、念のため手動のテストをしたのです。

手動のテストの件
手動でテストするとやはり100行目で止まります。ただ試しにそこから再度手動ですると
E20を獲得するかも知れないと思ってしただけです。・・・文章にしたことが蛇足だったかも知れません。お許しください。

>
>MsgBox Range("E65536").End(xlUp).Address
を実行すると100行目・・・関数の入っている一番下の行

>MsgBox Range("E100").End(xlUp).Address
を実行すると16行目のセル・・・関数の入っている最上の一行上のセルになります。

【26764】Re:最終行のセル値を獲得
回答  かみちゃん  - 05/7/16(土) 21:46 -

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

>ご支持の通りしますと、100行のセルのことろで止まります。
>関数はE16〜E100に入っています。
>E20行目まで計算結果が出ていたら、そのE20行目を獲得したいのです。

やっと意味がわかりました。
次のような感じでできるかと思います。

 For RowNo = Range("E65536").End(xlUp).Row To 1 Step -1
  With Cells(RowNo, Columns("E").Column)
   If .Value <> "" Then
    Range("Z12").Value = .Value
    Exit For
   End If
  End With
 Next

【26765】Re:最終行のセル値を獲得
発言  ichinose  - 05/7/16(土) 23:24 -

引用なし
パスワード
   ▼かみちゃん さん、nossoriさん、こんばんは。

'=========================================================
Sub test()
  Dim maxrow As Long
  With Range("e16:e100")
    maxrow = Evaluate("=MAX(IF(" & .Address & "<>"""",ROW(" & .Address & ")))")
    End With
  If maxrow > 0 Then
    Range("z12").Value = Range("e" & maxrow).Value
  Else
    MsgBox "該当なし"
    End If
End Sub

こんな方法では?

【26768】Re:最終行のセル値を獲得
お礼  nossori  - 05/7/17(日) 6:52 -

引用なし
パスワード
   ▼ichinose さん:
かみちゃん さん、nossoriさん、
おはようございます。
質問の仕方が悪く、ご迷惑かけました。

それから、ichinoseさんのこのコードは難しく理解できません。
どのような意味なのでしょうか?小生の質問の仕方が問題ありでしたでしょうか?

>
>'=========================================================
>Sub test()
>  Dim maxrow As Long
>  With Range("e16:e100")
>    maxrow = Evaluate("=MAX(IF(" & .Address & "<>"""",ROW(" & .Address & ")))")
>    End With
>  If maxrow > 0 Then
>    Range("z12").Value = Range("e" & maxrow).Value
>  Else
>    MsgBox "該当なし"
>    End If
>End Sub
>
>こんな方法では?

【26770】Re:最終行のセル値を獲得
発言  ichinose  - 05/7/17(日) 7:11 -

引用なし
パスワード
   ▼nossori さん:
おはようございます。

>
>それから、ichinoseさんのこのコードは難しく理解できません。
>どのような意味なのでしょうか?小生の質問の仕方が問題ありでしたでしょうか?
まず、実行した結果はどうだったのでしょうか?
nossoriさんが意図した結果が出ているのですか?
(これが確定して解説という流れですよね?)


>
>>
>>'=========================================================
>>Sub test()
>>  Dim maxrow As Long
>>  With Range("e16:e100")
>>    maxrow = Evaluate("=MAX(IF(" & .Address & "<>"""",ROW(" & .Address & ")))")
     msgbox "=MAX(IF(" & .Address & "<>"""",ROW(" & .Address & ")))"
'    ↑これを追加して、この数式がどんな結果を返す数式なのか考えてみてください

>>    End With
>>  If maxrow > 0 Then
>>    Range("z12").Value = Range("e" & maxrow).Value
>>  Else
>>    MsgBox "該当なし"
>>    End If
>>End Sub

私は、VBAで数式を使用することは、EXCEL/VBAならではの手法だと
思っていますし、このサイトのご質問を利用して
この事象では、有効な方法か否かを数式を使用したコードを投稿する
事により、色々と試させてもらっています。
今回の場合は、まあまあの使用方法だと思いましたが・・・。

【26771】Re:最終行のセル値を獲得
質問  nossori  - 05/7/17(日) 7:56 -

引用なし
パスワード
   ▼ichinose さん:

流石ですね。数式の結果をMsgBoxで見させていただきました。
私には程遠いコードです。
数式を利用する極でしょうか。
本当にこれが分かれば凄い事ができるのでしょうか?
すこしずつ学ばせていただきたい気持ちはあるのですが、かなりの距離があるように思えます。
大変ありがとうございました。勉強になりました。

それから、
こんな事もできるでしょうか?
請求書があるのですが、全くの素人が使えるように、コマンド釦を押すだけにしています。また、この請求書作成のマクロにプロテクトをかけています。しかしマクロを使う時には、プロテクトを外さないと動きませんので・・・。次のようなコードを書いています。

Sub 作成( )
Sheets("請求書").Unprotect



Sheets("請求書").Protect
End Sub

また、印刷範囲を指定しています。印刷範囲の外に一部シート関数を使っています。
このような条件で、請求書No.のセル(G3)のみプロテクトをかけず、マクロを知らない人が請求書No.を「保護のクリア」を使わず、自在に入れられるようにしたいと思っていますが、これは数式と関係ない?かも知れませんが、失礼しました。
お時間がありましたら、教えてください。

本来なら改めて質問すべきでしょうが、ichinose様にこの画面でお会いできたので、ついつい質問したくなりました。重ねて失礼しました。

【26773】Re:シート保護したまま値を入れたい
発言  かみちゃん  - 05/7/17(日) 9:19 -

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

>このような条件で、請求書No.のセル(G3)のみプロテクトをかけず、マクロを知
>らない人が請求書No.を「保護のクリア」を使わず、自在に入れられるようにした
>い

まず、シートの各セルの「保護」の「ロック」を設定します。
基本的には、最初は、全てのセルに「ロック」が設定されています。
そこで、まず、G3セルの「書式設定」の「保護」の「ロック」のチェックをはずします。他のセルの設定は「ロック」がチェックされているので何もしません。
そのあと、「ツール」の「保護」の「シートの保護」を選択して、シートを保護します。

その上で、下記コードを実行してみてください。
シートの保護がかかっているにもかかわらず、G3セルだけは値が入ることがわかると思います。G4セルの値を入力しようとすると、保護がかかっているので、エラー
になりますが。

Sub Test()
' Sheets("請求書").Unprotect
 Range("G3").Value = 1
 Range("G4").Value = 1
' Sheets("請求書").Protect
End Sub

>本来なら改めて質問すべきでしょう

はい。他の方々もご覧になっていますので・・・
ということで、タイトルを変更させていただきました。

【26774】Re:シート保護したまま値を入れたい
お礼  nossori  - 05/7/17(日) 11:23 -

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

ありがとうございました。
期待していた通りに出来ました。

ありがとうございました。今後ともよろしくお願いします。

>
>>本来なら改めて質問すべきでしょう
>
>はい。他の方々もご覧になっていますので・・・
>ということで、タイトルを変更させていただきました。

ご配慮ありがとうございます。失礼します。

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