プロが教えるわが家の防犯対策術!

●質問の主旨
(1)以下のコードのプロシージャを実行すると
12行目の変数myArrが選択され、「配列に割り当てられません」と
エラーメッセージが返されます。これはなぜでしょうか?

(2)(1)の原因は5行目の変数myArrの宣言について問題があるよう
気がしますが、どうすればいいのか分かりません?

以上2点について、1つだけでもご助言いただければ幸いです。
ご教示よろしく願いします。

●質問の補足

下記のコードは「各支社の成績」(画像の下部)を
「業務成績通知書」(画像上部)に成績欄に差し込んで
各支社ごとのワークシートを印刷するためのコードです。

画像上部のワークシート名→差込印刷TARGET
画像下部のワークシート名→data

●コード
Option Explicit

Sub オートシェイプ1_Click()

Dim myTar As Worksheet 'ワークシート差込印刷(ターゲット)のオブジェクト変数
Dim myDat As Worksheet 'ワークシートdataの配列変数
Dim myArr(6, 4) As Range
Dim y As Integer '印刷するシート数のオブジェクト変数
Dim myTem As Range '印刷するアクティブシートのオブジェクト変数
Dim n As Integer '差込数の数
Dim target_name As String '差込名

'ワークシート差込印刷(ターゲット)をオブジェクト変数に代入
Set myTar = Worksheets("差込印刷TARGET")
Set myDat = Worksheets("data") 'ワークシートdataをオブジェクト変数に代入
myArr = myDat.Range("B2:G6") '印刷範囲のセル範囲を配列変数に代入

For y = 1 To 5 '繰り返し
myTar.Copy after:=myDat 'ワークシート差込印刷のコピーをワークシートdataの後に配置
Set myTem = ActiveSheet 'アクティブシートを変数myTemに代入
myTem.Name = "印刷中" 'コピーされたワークシートの名前は「印刷中」とする

For n = 1 To 6
'差込名に「ターゲット番号」を代入
target_name = "TARGET" & n
'印刷中シートの「ターゲット番号」のセルに支店ごとのデータ(配列変数)を代入
myTem.Cells.Find(target_name).Value = myArr(y, n)
Next

myTem.PrintOut 'アクティブシートの印刷
Application.DisplayAlerts = False '画面警告表示を非表示
myTem.Delete '「印刷中」のシートを削除
Application.DisplayAlerts = True '画面警告表示を非表示を元に戻す

Next End Sub

「Excel2007VBA配列変数の宣言に」の質問画像

A 回答 (2件)

myArrが既に配列宣言されているからです。


Dim myArr(6, 4) As Range⇒Dim myArr As Variantに変更してみて下さい。

この回答への補足

mu2011様

変数の型をVariant型にすると私の意図通りの
プロシージャを実行することができました。
大変助かりました。

ただmu2011様の
「myArrが既に配列宣言されているからです。」
というアドバイスの意味がよく分かりません。

この点についてももう少しご教示いただければ
幸いです。

補足日時:2012/02/02 15:40
    • good
    • 1
この回答へのお礼

mu2011様
いつもご回答ありがとうございます。
補足質問がございますので、
そちらもご確認いただければ幸いです。

お礼日時:2012/02/02 15:39

NO1です。


>「myArrが既に配列宣言されているからです。」
 ⇒『VBAの仕様』として代入の受け側に配列を指定する事はできないという事です。
    • good
    • 1
この回答へのお礼

mu2011様
たびたびのご回答ありがとうございます。
アドバイス参考にさせていただきます。

お礼日時:2012/02/02 22:48

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!