• ベストアンサー

Excelの「範囲」の自動変更について。

A1:A1000にデータが入っています。 今これを10個(100行づつ)に分けて、それぞれに範囲名をつけています。 [質問] 途中に行の挿入・削除を行っても、常に1つの範囲の行数を100行に保つように設定はできますか? もし可能ならば教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

途中に行の挿入・削除があると定義された範囲はどうしても変わってしまいます。 範囲の行数をつねに100行に保つにはVBAを使用していったん名前の定義を消し、再度つける方法で対処できます。 やってみました。 最初、下記マクロSub AREAtest1()で100行づつ名前を付けた後、挿入削除を行っても、Sub AREAtest1解除()でいったん名前を消去し、再度Sub AREAtest1()を実行すれば、お望みの結果になります。 Sub AREAtest1()'100行づつ名前定義 For n = 0 To 9 ActiveWorkbook.Names.Add Name:="AREA" & n + 1, RefersTo:= _ "=Sheet1!$A$" & n * 100 + 1 & ":$A$" & n * 100 + 100 & "" Next End Sub Sub AREAtest1解除()上記の定義をすべて解除 For n = 0 To 9 Application.Goto Reference:="Area" & n + 1 ActiveWorkbook.Names("Area" & n + 1).Delete Next End Sub

ippu
質問者

お礼

マクロに関してはほんの入り口にいるのですが、作成して戴いたものをModule1に貼り付け目的を達成できました。 本当に有難うございました。

その他の回答 (2)

noname#9284
noname#9284
回答No.3

> 範囲を選択してコピーしたいので、確認できないと困るのです。 名前ボックスのドロップダウンから選択して範囲選択をし、 コピーしてどこかに貼り付けたいとのご希望でしょうか。 常にSheet1のA1:A100までを別のシートのA列に表示したいのでしたら A1に =INDIRECT("Sheet1!A"&ROW()) B1に =INDIRECT("Sheet1!A"&ROW()+100) C1に =INDIRECT("Sheet1!A"&ROW()+200)・・・ これを100行分下にコピーするということでいかがでしょうか。 INDIRECTを多用していますのでパフォーマンスが多少落ちると思います。 お使いのパソコンで様子を見られて使ってください。 またINDIRECTを使用していますと、ファイルを開いて変更せずに閉じても 「変更を保存しますか」と聞かれます。 INDIRECTは揮発性関数ですのでそのようなメッセージが出ます。

ippu
質問者

お礼

>INDIRECTを多用していますのでパフォーマンスが多少落ちると思います。 上記が心配なので、マクロを利用することにしました。 本当に有難うございました。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

例えば、 挿入→名前→定義で  名前に『Area01』、参照範囲に『INDIRECT("A1:E100")』  名前に『Area02』、参照範囲に『INDIRECT("A101:E200")』  名前に『Area03』、参照範囲に『INDIRECT("A201:E300")』  :  : のように設定します。 (結果を、左上の名前ボックスでは確認できないようですが・・・Excel2000です)  

ippu
質問者

お礼

nishi6さんへの補足が基で更なる回答を戴けました。 有難うございました。

ippu
質問者

補足

有難うございました。 >(結果を、左上の名前ボックスでは確認できないようですが・・・Excel2000です) 範囲を選択してコピーしたいので、確認できないと困るのです。