Excel VBA質問箱 IV

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

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


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

【64569】リストの範囲を定義する rin 10/2/24(水) 10:47 質問[未読]
【64575】Re:リストの範囲を定義する UO3 10/2/24(水) 12:00 回答[未読]
【64576】Re:リストの範囲を定義する rin 10/2/24(水) 12:08 質問[未読]
【64578】Re:リストの範囲を定義する UO3 10/2/24(水) 12:15 発言[未読]
【64581】Re:リストの範囲を定義する rin 10/2/24(水) 12:28 質問[未読]
【64583】Re:リストの範囲を定義する 超初心者 10/2/24(水) 13:43 発言[未読]
【64584】Re:リストの範囲を定義する rin 10/2/24(水) 13:58 お礼[未読]
【64586】Re:リストの範囲を定義する rin 10/2/24(水) 14:33 質問[未読]
【64589】Re:リストの範囲を定義する 超初心者 10/2/24(水) 15:34 発言[未読]
【64590】Re:リストの範囲を定義する rin 10/2/24(水) 15:47 お礼[未読]

【64569】リストの範囲を定義する
質問  rin  - 10/2/24(水) 10:47 -

引用なし
パスワード
   Excel BVAの初心者です。
どなたかお力をお貸しください。

Excelの挿入→名前→定義で3つの範囲で3つの定義をつくりましたが
範囲が変わった時にも対応できるようなVBAをつくりたいと思っています。

現在はB3:G12 → Table(定義名)
Tableから1列開けてI列のI3:I12 → rows(定義名)
Tableから1行開けてB14:G14 → cols(定義名)

となっています。
TableのB3から右へまたは下へ、範囲が広がった時に一番先端まで自動的に範囲を探し、その範囲にTableという定義を付ける方法を教えていただきたいです。

更に
Tableから1列開けた列の1番上(3行目)からTableの一番最下段までをrows
Tableから1行開けた列の1番左(B列)からTableの一番列の終わりまでをcols

と定義を付ける方法をどなたか教えてください。
大変苦心しています。
どうぞよろしくお願いいたします。

【64575】Re:リストの範囲を定義する
回答  UO3  - 10/2/24(水) 12:00 -

引用なし
パスワード
   ▼rin さん:
こんにちは。
もしかしたら誤解をしているのかもしれませんが・・・
VBAで範囲を再設定したいということですけど、
何もせず、tbl領域に行あるいは列を挿入してみてください。
挿入後のtbk、rows、cols の範囲はどうなっているでしょう。
自動的に、設定されなおされてますね。

実現したいことは、こんなことですか?

【64576】Re:リストの範囲を定義する
質問  rin  - 10/2/24(水) 12:08 -

引用なし
パスワード
   ▼UO3 さん:
>▼rin さん:
>こんにちは。
>もしかしたら誤解をしているのかもしれませんが・・・
>VBAで範囲を再設定したいということですけど、
>何もせず、tbl領域に行あるいは列を挿入してみてください。
>挿入後のtbk、rows、cols の範囲はどうなっているでしょう。
>自動的に、設定されなおされてますね。
>
>実現したいことは、こんなことですか?

ご回答ありがとうございます。
領域内で挿入した場合は自動的に範囲が変わっていますが
新しくデータを貼り付けなおしが場合に領域意外にも貼られてしまった時に
範囲を囲みなおせればという方法を探しておりました。
そのようなことは不可能ですか?

【64578】Re:リストの範囲を定義する
発言  UO3  - 10/2/24(水) 12:15 -

引用なし
パスワード
   ▼rin さん:
>新しくデータを貼り付けなおしが場合に領域意外にも貼られてしまった時に
>範囲を囲みなおせればという方法を探しておりました。

ごめんなさい。この部分(貼り付けなおし)、具体的には、
どのようなことですか?

【64581】Re:リストの範囲を定義する
質問  rin  - 10/2/24(水) 12:28 -

引用なし
パスワード
   ▼UO3 さん:
>▼rin さん:
>>新しくデータを貼り付けなおしが場合に領域意外にも貼られてしまった時に
>>範囲を囲みなおせればという方法を探しておりました。
>
>ごめんなさい。この部分(貼り付けなおし)、具体的には、
>どのようなことですか?

数字の入った表をB3セルをスタートとして(スタート位置は常に同じ)貼ったときに、範囲内を超えてしまうことがあるので、範囲指定をマクロがVBAで貼り付け後に行おうとしています。
またいくつか同じ作業があるので(月別にシートがいくつ作るか、Excelファイルで同じものをいくつか作る予定です)
何かよい案があればと思いました。
わかりずらくて申し訳ありません。

【64583】Re:リストの範囲を定義する
発言  超初心者  - 10/2/24(水) 13:43 -

引用なし
パスワード
   ▼rin さん:
あらかじめ、"Table"、"rows"、"cols"の名前定義が
されている事を前提としてます。
(挿入後に範囲を再セット)

Sub sample()
  Dim myRange As Range
  
  'Tableの再セット
  Set myRange = Range("B3", _
            Cells(Range("cols").Offset(-2, 0).Row, _
               Range("rows").Offset(0, -2).Column))
  ActiveWorkbook.Names.Add Name:="Table", _
               RefersToR1C1:=myRange
  Set myRange = Nothing
  
  'rowsの再セット
  Set myRange = Range(Range("rows").Cells(1), _
            Cells(Range("cols").Offset(-2, 0).Row, _
               Range("rows").Column))
  ActiveWorkbook.Names.Add Name:="rows", _
               RefersToR1C1:=myRange
  Set myRange = Nothing
  
  'colsの再セット
  Set myRange = Range(Range("cols").Cells(1), _
            Cells(Range("cols").Row, _
               Range("rows").Offset(0, -2).Column))
  ActiveWorkbook.Names.Add Name:="cols", _
               RefersToR1C1:=myRange
  Set myRange = Nothing
End Sub

参考までに。

【64584】Re:リストの範囲を定義する
お礼  rin  - 10/2/24(水) 13:58 -

引用なし
パスワード
   ▼超初心者 さん:
>▼rin さん:
>あらかじめ、"Table"、"rows"、"cols"の名前定義が
>されている事を前提としてます。
>(挿入後に範囲を再セット)
>
>Sub sample()
>  Dim myRange As Range
>  
>  'Tableの再セット
>  Set myRange = Range("B3", _
>            Cells(Range("cols").Offset(-2, 0).Row, _
>               Range("rows").Offset(0, -2).Column))
>  ActiveWorkbook.Names.Add Name:="Table", _
>               RefersToR1C1:=myRange
>  Set myRange = Nothing
>  
>  'rowsの再セット
>  Set myRange = Range(Range("rows").Cells(1), _
>            Cells(Range("cols").Offset(-2, 0).Row, _
>               Range("rows").Column))
>  ActiveWorkbook.Names.Add Name:="rows", _
>               RefersToR1C1:=myRange
>  Set myRange = Nothing
>  
>  'colsの再セット
>  Set myRange = Range(Range("cols").Cells(1), _
>            Cells(Range("cols").Row, _
>               Range("rows").Offset(0, -2).Column))
>  ActiveWorkbook.Names.Add Name:="cols", _
>               RefersToR1C1:=myRange
>  Set myRange = Nothing
>End Sub
>
>参考までに。

すばらしくて感激いたしました。
マクロ実行後に一発で範囲が変っています。
ほんとに助かりました。
この度はまことにありがとうございました。m(_ _)m

【64586】Re:リストの範囲を定義する
質問  rin  - 10/2/24(水) 14:33 -

引用なし
パスワード
   ▼超初心者 さん:
>▼rin さん:
>あらかじめ、"Table"、"rows"、"cols"の名前定義が
>されている事を前提としてます。
>(挿入後に範囲を再セット)
>
>Sub sample()
>  Dim myRange As Range
>  
>  'Tableの再セット
>  Set myRange = Range("B3", _
>            Cells(Range("cols").Offset(-2, 0).Row, _
>               Range("rows").Offset(0, -2).Column))
>  ActiveWorkbook.Names.Add Name:="Table", _
>               RefersToR1C1:=myRange
>  Set myRange = Nothing
>  
>  'rowsの再セット
>  Set myRange = Range(Range("rows").Cells(1), _
>            Cells(Range("cols").Offset(-2, 0).Row, _
>               Range("rows").Column))
>  ActiveWorkbook.Names.Add Name:="rows", _
>               RefersToR1C1:=myRange
>  Set myRange = Nothing
>  
>  'colsの再セット
>  Set myRange = Range(Range("cols").Cells(1), _
>            Cells(Range("cols").Row, _
>               Range("rows").Offset(0, -2).Column))
>  ActiveWorkbook.Names.Add Name:="cols", _
>               RefersToR1C1:=myRange
>  Set myRange = Nothing
>End Sub
>
>参考までに。

追加質問で申し訳ございませんが、
こちらの定義のリセットの時に、アクティブシートに対して
というコードを加えるにはどこにどのように入れたらよいでしょうか?
お力ばかり借りて申し訳ないです。

【64589】Re:リストの範囲を定義する
発言  超初心者  - 10/2/24(水) 15:34 -

引用なし
パスワード
   ▼rin さん:
>追加質問で申し訳ございませんが、
>こちらの定義のリセットの時に、アクティブシートに対して
>というコードを加えるにはどこにどのように入れたらよいでしょうか?
>お力ばかり借りて申し訳ないです。

私の環境(XL2002)では、

アクティブシートにて、コード実行した場合、
アクティブシートに対して名前範囲の変更が行われました。

もちろん、
>あらかじめ、"Table"、"rows"、"cols"の名前定義が
>されている事を前提としてます。

アクティブシートに名前定義がされてなかった場合、
名前定義がされているシートに飛んでしまいます。
(複数ある場合、Sheet1?かも)

他のバージョンでも同じかとは思うのですが、
XL2007などで、動作が大きく変わる場合は不明です。
その際はこちらで確認できないのでごめんなさい。

【64590】Re:リストの範囲を定義する
お礼  rin  - 10/2/24(水) 15:47 -

引用なし
パスワード
   ▼超初心者 さん:
>▼rin さん:
>>追加質問で申し訳ございませんが、
>>こちらの定義のリセットの時に、アクティブシートに対して
>>というコードを加えるにはどこにどのように入れたらよいでしょうか?
>>お力ばかり借りて申し訳ないです。
>
>私の環境(XL2002)では、
>
>アクティブシートにて、コード実行した場合、
>アクティブシートに対して名前範囲の変更が行われました。
>
>もちろん、
>>あらかじめ、"Table"、"rows"、"cols"の名前定義が
>>されている事を前提としてます。
>
>アクティブシートに名前定義がされてなかった場合、
>名前定義がされているシートに飛んでしまいます。
>(複数ある場合、Sheet1?かも)
>
>他のバージョンでも同じかとは思うのですが、
>XL2007などで、動作が大きく変わる場合は不明です。
>その際はこちらで確認できないのでごめんなさい。

了解いたしました。
ご親切にありがとうございました。

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