[[20171209101853]] 『範囲を配列へ』(浅井) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『範囲を配列へ』(浅井)

済みません、教えて下さい。

規則正しく並んだ飛び地の範囲を配列にする事は出来ますでしょうか。

例えば、同じ列で3行毎のセルを配列へ格納。(A1,A4,A7,A10,A3・・・)
又、幾つかのRange変数を配列に格納する方法も教えて下さい。

< 使用 Excel:Excel2013、使用 OS:Windows10 >


>幾つかのRange変数
の例も出してみてはどうですか?
 
そもそもなぜ配列にしたいのでしょうか。
後続の処理に依存するわけですが、それとの関係を教えて下さい。

(γ) 2017/12/09(土) 10:43


 セルに画像貼付けをする上で対象となるセルは整列しています。又、それは結合セルとなっています。
 貼付け画像数は分かっていて、対象セルも同じく分かります。両方が分かっている為、一括挿入処理も
 出来ます。セル番地を配列にしてから行う手順としてです。
 このセル番地からの方法をセル範囲として行う事は出来ないものかと試しました出きませんでした。
 つまり、出来るのか出来ないかを知りたかったのです。

 只、前から飛び地のセル範囲を配列に出来ないものかと思ってはいましたのでこの機会にと思い質問しました。
 尚、Range変数も同じ扱いで出来ないかと単純に想像したので質問に追加しました。

 こんな事が質問の発端です。よろしくお願いします。

(浅井) 2017/12/09(土) 11:23


すみません。私には理解できません。
 
セル範囲のアドレスをArray("A1","A4",・・・・)といった配列にするということですか?
一定の規則で並んでいるなら、配列にしなくても、その規則をコードに反映すればよいだけで、
特に配列にしてうれしいこともないと思いますが。
配列を一括してシートの値に反映すると効率化できる、いうのとは話が違うような印象です。
 
現在のコードを提示して、この部分を改良できないか、という質問にされれば、
あなたのニーズが明確になり、皆さんからのコメントが期待できると思いますが、
いかがですか?
(γ) 2017/12/09(土) 11:52

 私の中では
 (1)GetOpenFilenamaeから得たファイル数から、シートの埋込範囲を配列化する。(上限有りの不定数)
 (2)その範囲配列を利用して画像を埋込する。
 の手順で処理したいと考えていました。 

   '(1)画像埋込セル番地の配列(取敢えず文字列の範囲配列)
   For i = 1 To 4
      For j = 1 To 7
         n = n + 1
         if n > ファイル数 Then Exit For
         RgAddr(n) = Range("Base").Offset((i - 1) * 9, (j - 1) * 2 + 1).Address
      Next
   Next

 ここまでは良いのですが[参考]の処理と繋がらなくてどうしたもんか悩んでいました。
 (1)でも実際に得られるの連結セル番地ではなく、先頭番地だからRg.MergeArea.Rows.Countなどが掴めません。
 ★問題行を無視すれば何とかなるのですが

   '[参考] 以前に見た質問の回答からの抜粋
   '*************************************
   'InputBox から得た範囲から処理
   For Each Rg In PicRg
      If Rg.Address = Rg.MergeArea(1).Address Then     ←★問題行
            Set mSp = ActiveSheet.Shapes.AddPicture( _
                          Filename:=pkfile(n), _
                          LinkToFile:=False, _
                          SaveWithDocument:=True, _
                          Left:=Rg.MergeArea.Left, _
                          Top:=Rg.MergeArea.Top, _
                          Width:=-1, Height:=-1)
            n = n + 1
            If UBound(PicRg) < n Then Exit For
      End If
   Next Rg

 これが現状です。よろしくお願いいたします。

(浅井) 2017/12/09(土) 12:47


規則性が明らかな場合は、そもそも問題行のような処理が必要ないのでは?

(マナ) 2017/12/09(土) 13:00


省略しないで、現状のコードをそのまま提示できますか

(マナ) 2017/12/09(土) 13:02


 マナさん済みません誤った説明をして・・・

 >★問題行を無視すれば何とかなるのですが
          ↓↓↓
 実は、繋げる方法が分からなく何ともならないのです。
 (1)では文字列の範囲配列で[参考]では実体の範囲となっていて困ってます。

 質問の仕方が悪かったと思います。(飛び範囲ばかりでなく、質問内容も飛んでました)
 尚、現状コードは殆ど変わらないです。

(浅井) 2017/12/09(土) 13:44


> 尚、現状コードは殆ど変わらないです。

それでも構いせんので、提示お願いします。

(マナ) 2017/12/09(土) 13:55


よくわかりませんが…
こういうことでしょうか

   For i = 1 To 4
      For j = 1 To 7
         n = n + 1
         If n > ファイル数 Then Exit For
            Set Rg = Range("Base").Offset((i - 1) * 9, (j - 1) * 2 + 1)
            Set mSp = ActiveSheet.Shapes.AddPicture( _
                          Filename:=pkfile(n), _
                          LinkToFile:=False, _
                          SaveWithDocument:=True, _
                          Left:=Rg.MergeArea.Left, _
                          Top:=Rg.MergeArea.Top, _
                          Width:=-1, Height:=-1)

      Next
   Next

(マナ) 2017/12/09(土) 14:05


↑ Exit for は、Exit subでした。

(マナ) 2017/12/09(土) 14:09


 マナさん ありがとうございます。ご指摘の通りです。

 何度も試行錯誤し疲れて、私の限度を超えたので質問しました。(どこかで間違っていた?)
 まだ気になるのは、AddPicture句の中の『Rg.MergeArea…』です。
 Rg.MergeAreaは中身を問う事もないので多分問題にはならないと思います。

 必要か否かは別にして、本題の範囲配列をするにはどうしたらよいのでしょうか?

(浅井) 2017/12/09(土) 16:14


こうですか

    ReDim RgAddr(1 To ファイル数)

   For i = 1 To 4
      For j = 1 To 7
         n = n + 1
         If n > ファイル数 Then Exit For
         Set RgAddr(n) = Range("Base").Offset((i - 1) * 9, (j - 1) * 2 + 1)
      Next
   Next

(マナ) 2017/12/09(土) 16:32


マナさん

回答を頂きながら遅れ遅れで済みません。
こんな簡単な事と思われるのでしょうが、全く気が付きませんでした。
朝から分からず気が気になってイライラしていました。これで一気にモヤモヤ解消です。

大変ありがとうございました。
(浅井) 2017/12/09(土) 18:51


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.