こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

A1:A1000にデータが入っています。
今これを10個(100行づつ)に分けて、それぞれに範囲名をつけています。

[質問]
途中に行の挿入・削除を行っても、常に1つの範囲の行数を100行に保つように設定はできますか?
もし可能ならば教えて下さい。

投稿日時 - 2004-03-05 07:43:58

QNo.797323

すぐに回答ほしいです

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

途中に行の挿入・削除があると定義された範囲はどうしても変わってしまいます。
範囲の行数をつねに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

投稿日時 - 2004-03-05 10:49:19

お礼

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

投稿日時 - 2004-03-05 12:04:35

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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は揮発性関数ですのでそのようなメッセージが出ます。

投稿日時 - 2004-03-05 10:50:52

お礼

>INDIRECTを多用していますのでパフォーマンスが多少落ちると思います。

上記が心配なので、マクロを利用することにしました。

本当に有難うございました。

投稿日時 - 2004-03-05 11:58:16

ANo.1

例えば、
挿入→名前→定義で

 名前に『Area01』、参照範囲に『INDIRECT("A1:E100")』
 名前に『Area02』、参照範囲に『INDIRECT("A101:E200")』
 名前に『Area03』、参照範囲に『INDIRECT("A201:E300")』
 :
 :

のように設定します。
(結果を、左上の名前ボックスでは確認できないようですが・・・Excel2000です)
 

投稿日時 - 2004-03-05 08:15:58

補足

有難うございました。

>(結果を、左上の名前ボックスでは確認できないようですが・・・Excel2000です)

範囲を選択してコピーしたいので、確認できないと困るのです。

投稿日時 - 2004-03-05 09:20:50

お礼

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

投稿日時 - 2004-03-05 11:55:01

あなたにオススメの質問