[[20150629160515]] 『array文に変数を使う方法』(トア) ページの最後に飛ぶ

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

 

『array文に変数を使う方法』(トア)

お世話になっております。
VBA初心者でそもそも間違っていると思うのですが、お力お借りできればと思います。

長方形のオートシェイプが8つあります。

セルA1の値が
1であれば、オートシェイプの1,3,5,6
2であれば、2,4,5,6
3であれば、1,2,7,8

の背景をファイルから取り出し背景にしたいと思い、
試みましたが、array(1,3,5,6)の数字の部分を変数にしてみましたが、できませんでした。
下記だとarrayの後に文字列として代入されるから駄目なのはわかっているのですが、
どうすればいいかわかりませんでした。

そもそもの別の方法があるかもですが、どうすればいいでしょうか?

Dim myarray As Variant
Dim pattern As Long

    Select Case range("A1").value
        Case 1
            myarray = "1,3,5,6"
        Case 2
            myarray = "2,4,5,6"
        Case 3
            myarray = "1,2,7,8"

    End Select

    With Worksheets(1).Shapes.Range(Array(myarray)).Fill
        .Visible = msoTrue
        .UserPicture "D:\picture.jpg"
        .TextureTile = msoFalse
    End With
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


こんにちは

試してないですけど、

myarray = Array(1,3,5,6)

Worksheets(1).Shapes.Range(myarray).Fill

でしょうか?

(ウッシ) 2015/06/29(月) 16:51


こうですかねぇ? くどいなぁ。 うまい手はないものか…。

 Sub test()
    Dim myarray As Variant

    Select Case Range("A1").Value
    Case 1
        myarray = Array("Rectangle 1", "Rectangle 3", "Rectangle 5", "Rectangle 6")
    Case 2
        myarray = Array("Rectangle 2", "Rectangle 4", "Rectangle 5", "Rectangle 6")
    Case 3
        myarray = Array("Rectangle 1", "Rectangle 2", "Rectangle 7", "Rectangle 8")
    End Select

    With Worksheets(1).Shapes.Range(Array(myarray(0), myarray(1), myarray(2), myarray(3))).Fill
        .Visible = msoTrue
        .UserPicture "D:\picture.jpg"
        .TextureTile = msoFalse
    End With
 End Sub
(???) 2015/06/29(月) 16:59

ウッシ様
???様

ありがとうございました。

ウッシ様に回答頂いたものは駄目でした。

???様の分で動きました。
配列で格納されるという事ですね。
配列で格納されるまではわかっていたのですが、その書き方がわからなかったので、勉強になりました。
ありがとうございました。

確かにくどいですね。

今後の向学の為にも何か良い知恵がお借りできれば一番ですが、
とりあえず書き方がわかったので、これで進めれます。

ありがとうございました。

(トア) 2015/06/29(月) 17:28


 これ?

 With Worksheets(1).Shapes.Range(Evaluate("{" & myarray & "}")).Fill
(seiya) 2015/06/29(月) 18:29

seiya様

ありがとうございます。

evaluate+{ で配列を代入できるのですね。

きちんと動きました。

とてもすっきりした記述になりました。

勉強になりました。

ありがとうございます。

(トア) 2015/06/30(火) 12:53


こんにちは

最初、こんな感じかと思ったのですが回答が適当過ぎましたね。

Sub test()

    Dim myarray As Variant
    Dim pattern As Long
    Dim i       As Long

    Select Case Range("A1").Value
        Case 1
            myarray = Array(1, 3, 5, 6)
        Case 2
            myarray = Array(2, 4, 5, 6)
        Case 3
            myarray = Array(1, 2, 7, 8)
    End Select

    For i = 1 To 8
        With Worksheets(1).Shapes.Range("Rectangle " & i).Fill
            .Visible = msoFalse
            .TextureTile = msoFalse
        End With
    Next

    For i = 0 To 3
        With Worksheets(1).Shapes.Range("Rectangle " & myarray(i)).Fill
            .Visible = msoTrue
            .UserPicture "D:\picture.jpg"
            .TextureTile = msoFalse
        End With
    Next
End Sub

(ウッシ) 2015/06/30(火) 14:13


コメント返信:

[ 一覧(最新更新順) ]


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