Excel VBA質問箱 IV

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

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


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

【8937】Rangeオブジェクトで名前による範囲指定に... ふちこま 03/11/11(火) 11:18 質問
【8942】Re:Rangeオブジェクトで名前による範囲指定... INA 03/11/11(火) 13:30 回答
【8945】Re:Rangeオブジェクトで名前による範囲指... ふちこま 03/11/11(火) 14:55 質問
【8947】Re:Rangeオブジェクトで名前による範囲指... INA 03/11/11(火) 15:31 回答
【8948】Re:Rangeオブジェクトで名前による範囲指... ふちこま 03/11/11(火) 16:00 発言
【8954】Re:Rangeオブジェクトで名前による範囲指定... kein 03/11/11(火) 18:57 回答
【8956】Re:Rangeオブジェクトで名前による範囲指定... ふちこま 03/11/11(火) 19:50 発言
【8958】Re:Rangeオブジェクトで名前による範囲指定... kein 03/11/12(水) 4:26 回答
【8959】Re:Rangeオブジェクトで名前による範囲指... ふちこま 03/11/12(水) 8:51 お礼

【8937】Rangeオブジェクトで名前による範囲指定に...
質問  ふちこま  - 03/11/11(火) 11:18 -

引用なし
パスワード
   複数のシートにまたがって名前付けされているセル範囲を
Rangeオブジェクトで操作することは可能なのでしょうか?

実現したい状況は、

他ブックのシートの2枚目と4枚目のあらかじめ決められた場所に、
全く同じ値を入力するという操作です。

マクロ側からはその範囲を指定するだけでそれぞれのセルに値が入力
されるようにしたいのですが、どうも上手くいきません。

何か良い案がありましたら御教授下さい。

【8942】Re:Rangeオブジェクトで名前による範囲指...
回答  INA  - 03/11/11(火) 13:30 -

引用なし
パスワード
   どのような感じに上手くいかないのでしょうか?
シートや範囲を変数にしているのでしょうか?

具体的な処理が分からないので、
どのようなコードが最適か説明し難いです。

【8945】Re:Rangeオブジェクトで名前による範囲指...
質問  ふちこま  - 03/11/11(火) 14:55 -

引用なし
パスワード
   ▼INA さん:
>どのような感じに上手くいかないのでしょうか?
>シートや範囲を変数にしているのでしょうか?
すいませんでした。
少し質問を変えさせていただきます。

Rangeオブジェクトでは、複数のシートにまたがった範囲を持つ
「名前付きセル範囲」を指定して処理することは出来ないのでしょうか?

「名前付きセル範囲」は既にその範囲と名前を固定で作成してある場合です。

【8947】Re:Rangeオブジェクトで名前による範囲指...
回答  INA  - 03/11/11(火) 15:31 -

引用なし
パスワード
   逆に質問なのですが、
セル範囲の名前の定義って、
複数シート範囲を指定出来るのでしょうか?

【8948】Re:Rangeオブジェクトで名前による範囲指...
発言  ふちこま  - 03/11/11(火) 16:00 -

引用なし
パスワード
   ▼INA さん:
一応出来ます。

=sheet1!$W$6,sheet2!$W$7

といった感じで名前を付けることは出来ます。
計算式に代入したりしてExcel上では扱うことは出来ました。

【8954】Re:Rangeオブジェクトで名前による範囲指...
回答  kein  - 03/11/11(火) 18:57 -

引用なし
パスワード
   こんな感じかな ?

Workbooks("Book2.xls").Names("TEST").RefersToRange.Value = "ABC"

【8956】Re:Rangeオブジェクトで名前による範囲指...
発言  ふちこま  - 03/11/11(火) 19:50 -

引用なし
パスワード
   ▼kein さん:
>Workbooks("Book2.xls").Names("TEST").RefersToRange.Value = "ABC"
回答ありがとうございます。

確かに、「TEST」というセル範囲が同じシート上でのみ設定されている
場合は全てのセルに「ABC」が代入されるのですが、

複数のシートにまたがって設定している場合エラーが出てしまいました。

【8958】Re:Rangeオブジェクトで名前による範囲指...
回答  kein  - 03/11/12(水) 4:26 -

引用なし
パスワード
   テストしてみると、確かにエラーになりますね・・。
で、複数の範囲なのだから Areasプロパティを使ってループしたらどうか、
と考えてやってみたのですが、それでもエラーになりました。
結局、やぼったい感じになりますが、参照する数式を一つずつ分解していく
↓こんなコードだと、なんとかできましたが・・。

Sub Test_NameVal()
  Dim WB As Workbook
  Dim NM As String
  Dim i As Integer
  Dim Ary As Variant, Ary2 As Variant
 
  Set WB = Workbooks("Book2.xls")
  NM = WB.Names("TEST").RefersTo
  NM = Right(NM, Len(NM) - 1)
  If InStr(1, NM, ",") > 0 Then
   Ary = Split(NM, ",")
   For i = LBound(Ary) To UBound(Ary)
     Ary2 = Split(Ary(i), "!")
     WB.Sheets(Ary2(0)).Range(Ary2(1)).Value = "ABC"
   Next i
   Erase Ary, Ary2
  Else
   Ary = Split(NM, "!")
   WB.Sheets(Ary(0)).Range(Ary(1)).Value = "ABC"
   Erase Ary
  End If
  WB.Activate: Set WB = Nothing
End Sub

【8959】Re:Rangeオブジェクトで名前による範囲指...
お礼  ふちこま  - 03/11/12(水) 8:51 -

引用なし
パスワード
   >kein さん
なるほど、Areasプロパティというものもあるんですね。
やってみたら確かに出来ました。

しかし、やぼったい感は否めませんね(w

けれどこれで自分が実現したいことが出来ると思います。
大変参考になりました。
ありがとうございました!

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