[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
ありがとうございます。
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.