Excel VBA質問箱 IV

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

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


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

【21453】アクティブセルの、その下から…(範囲の選択) 草加Jacky 05/1/21(金) 15:31 質問[未読]
【21454】Re:アクティブセルの、その下から…(範囲... よーくかんがえよぉ 05/1/21(金) 15:50 回答[未読]
【21455】よーく考えたんですが… 草加Jacky 05/1/21(金) 16:00 発言[未読]
【21456】Re:よーく考えたんですが… G-Luck 05/1/21(金) 16:07 回答[未読]
【21463】Re:よーく考えたんですが… よーくかんがえよぉ 05/1/21(金) 16:30 回答[未読]
【21464】む、難しい… 草加Jacky 05/1/21(金) 16:37 お礼[未読]
【21465】Re:む、難しい… G-Luck 05/1/21(金) 16:46 発言[未読]
【21467】Re:む、難しい… よーくかんがえよぉ 05/1/21(金) 17:00 発言[未読]
【21470】Re:む、難しい… 草加Jacky 05/1/21(金) 17:10 お礼[未読]
【21473】Re:む、難しい… 記録マクロに毛が3本 05/1/21(金) 17:29 発言[未読]
【21477】分かりやすい ^^! 草加Jacky 05/1/21(金) 17:35 お礼[未読]

【21453】アクティブセルの、その下から…(範囲の...
質問  草加Jacky  - 05/1/21(金) 15:31 -

引用なし
パスワード
   範囲の選択に関する質問です。
エクセルのVBAで、現在選択しているセルの一つ下を起点(左上)にして、その二つ右のセルを右上にして、その列の一番下[つまりEnd(xlDown)]を右下にした範囲を選択したいのですが、どう書けばいいのでしょう???

つまり、現在選択しているセルがB3なら、B4:D36 のような感じ(D列の一番下のセルがD36なら)で選択したいのですが…。

【21454】Re:アクティブセルの、その下から…(範...
回答  よーくかんがえよぉ  - 05/1/21(金) 15:50 -

引用なし
パスワード
   ▼草加Jacky さん:
>範囲の選択に関する質問です。
>エクセルのVBAで、現在選択しているセルの一つ下を起点(左上)にして、その二つ右のセルを右上にして、その列の一番下[つまりEnd(xlDown)]を右下にした範囲を選択したいのですが、どう書けばいいのでしょう???
>
>つまり、現在選択しているセルがB3なら、B4:D36 のような感じ(D列の一番下のセルがD36なら)で選択したいのですが…。

へるぷに のってるでしょ。
ヘルプみたら?
ヘルプみたくないなら

新規マクロ記録
範囲選択
マクロ終了。

マクロコードをみる。

なるへそぉ!!

【21455】よーく考えたんですが…
発言  草加Jacky  - 05/1/21(金) 16:00 -

引用なし
パスワード
   よーくかんがえよぉ さん、お返事ありがとうございます。
もう2日に渡って考えています。ヘルプも、関連本も、WWWサイトもかなり見たつもりです。初心者なので申し訳ありません。

キーボードマクロでやってみると、残念ながら

  ActiveCell.Offset(1, 2).Range("A1").Select
  Range(Selection, Selection.End(xlDown)).Select
  ActiveCell.Offset(0, -2).Range("A1:C32").Select

となってしまい、せっかく2行目で xlDown を使っているのに3行目に絶対指定が来てしまうため、汎用的なマクロにならないのです。ここを何とかしたいのですが…。

【21456】Re:よーく考えたんですが…
回答  G-Luck  - 05/1/21(金) 16:07 -

引用なし
パスワード
   これでどうでしょうか?

Private Sub ddd()
  
  Dim n As Long
  
  ActiveCell.Offset(1, 0).Activate
  With ActiveCell
    n = .Offset(0, 2).End(xlDown).Row - (.Row - 1)
    .Resize(n, 3).Select
  End With
End Sub

【21463】Re:よーく考えたんですが…
回答  よーくかんがえよぉ  - 05/1/21(金) 16:30 -

引用なし
パスワード
   ▼草加Jacky さん:
>よーくかんがえよぉ さん、お返事ありがとうございます。
>もう2日に渡って考えています。ヘルプも、関連本も、WWWサイトもかなり見たつもりです。初心者なので申し訳ありません。
>
>キーボードマクロでやってみると、残念ながら
>
>  ActiveCell.Offset(1, 2).Range("A1").Select
>  Range(Selection, Selection.End(xlDown)).Select
>  ActiveCell.Offset(0, -2).Range("A1:C32").Select
>
>となってしまい、せっかく2行目で xlDown を使っているのに3行目に絶対指定が来てしまうため、汎用的なマクロにならないのです。ここを何とかしたいのですが…。


あらら2日もがんばったの〜
もっと早くきたらよかったのに

ヘルプのRangeに載ってる例を参考にするとよかったのよ


Sub Macro1()
 Range(Selection.Range("A2").Address(0, 0) + ":" + _
   Selection.Range("C2").End(xlDown).Address(0, 0)).Select
End Sub

【21464】む、難しい…
お礼  草加Jacky  - 05/1/21(金) 16:37 -

引用なし
パスワード
   よーくかんがえよぉ さん、G-Luck さん、素早いお返事ありがとうございました。

お二方のコードとも、やりたかったことを見事にやってくれました。
しかし、お二方ともコードが難しい…。

一生懸命関連本やヘルプを駆使して解読したら、確かにそうなると合点がいきましたが、まだまだとても自分では書けそうにありません。勉強になりました。

今後ともよろしくお願いいたします。

【21465】Re:む、難しい…
発言  G-Luck  - 05/1/21(金) 16:46 -

引用なし
パスワード
   失礼しました、簡単な解説をつけます。

Private Sub ddd()
  
  Dim n As Long 
  
  ActiveCell.Offset(1, 0).Activate 'ひとつ下に移動
  With ActiveCell
    n = .Offset(0, 2).End(xlDown).Row - (.Row - 1)
    .Resize(n, 3).Select
  End With
End Sub


'With ActiveCell
'  n = .Offset(0, 2).End(xlDown).Row - (.Row - 1)
'  .Resize(n, 3).Select
'End With

訳せば、n = ActiveCell.Offset(0, 2).End(xlDown).Row - (ActiveCell.Row - 1)
Rowは行番号、最下行から現在の行を引いて、行範囲を求めているです。
Resizeは、選択範囲を変更するときに使います。
選択範囲の左上を基準に(R,C)R行、C列ということです。

【21467】Re:む、難しい…
発言  よーくかんがえよぉ  - 05/1/21(金) 17:00 -

引用なし
パスワード
   ▼草加Jacky さん:
>よーくかんがえよぉ さん、G-Luck さん、素早いお返事ありがとうございました。
>
>お二方のコードとも、やりたかったことを見事にやってくれました。
>しかし、お二方ともコードが難しい…。
>
>一生懸命関連本やヘルプを駆使して解読したら、確かにそうなると合点がいきましたが、まだまだとても自分では書けそうにありません。勉強になりました。
>
>今後ともよろしくお願いいたします。


>B3なら、B4:D36
Range("B4:D36").Select
"B4:D36"を分解すると
"B4" + ":" + "D36"
それをB3でなく、A1を基準に置き換えただけです。

"B4"に相当するものがSelection.Range("A2").Address(0, 0)
"D36"に相当するものがSelection.Range("C2").End(xlDown).Address(0, 0)

.Address(0, 0)で文字に変えます

Selection.Range("A2")の意味は、
Rangeのヘルプの一番下に詳しく書いてますのでそちらをみましょう。

【21470】Re:む、難しい…
お礼  草加Jacky  - 05/1/21(金) 17:10 -

引用なし
パスワード
   お二人とも解説まで付けて下さってありがとうございました。
コードを読んで大体の動きまでは理解していたのですが、「何故そのようなコードを書いたか」という考え方は、書いた人に解説していただくと非常によくわかります。

勉強になります。どうもありがとうございました。

【21473】Re:む、難しい…
発言  記録マクロに毛が3本  - 05/1/21(金) 17:29 -

引用なし
パスワード
   横入りすみません
難しいとの事なので私程度のLVの低いので良ければと思ったら・・・
お二人から解説来てましたね

力技(?)なのですがせっかく作ったので載せさせて下さい

Sub 物は試しでw()
  
  x1 = ActiveCell.Row   'アクティブ(現在選択中)セルの縦(列)位置の取得
  x2 = ActiveCell.Column  'アクティブ(現在選択中)セルの横(行)位置の取得
  
  
  '         ↓縦位置の指定
  ActiveSheet.Cells(x1, x2 + 2).Select '←2セル右に移動
  '             ↑横位置の指定
  
  ActiveCell.End(xlDown).Select
  
  y1 = ActiveCell.Row   '終了セルの縦(列)位置の取得
  y2 = ActiveCell.Column  '終了セルの横(行)位置の取得
  
  Range(Cells(x1 + 1, x2), Cells(y1, y2)).Select '最終的な範囲を指定
  
End Sub

注釈は自分用です。付けておかないと判らなくなるので

【21477】分かりやすい ^^!
お礼  草加Jacky  - 05/1/21(金) 17:35 -

引用なし
パスワード
   記録マクロに毛が3本 さん、お返事ありがとうございます。
うん!分かりやすい!。

これなら何の解説もいりません。なるほどー。こうすれば僕でも書けるな。がんばろ。

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