🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

616閲覧

[Excel VBA] For内で宣言した変数が関数の引数として使用できないです

mushipan0929

総合スコア56

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/12/06 09:58

前提・実現したいこと

For文内で宣言した変数を引数として使いたいのですが、エラーが起きてしまい使えない状態です。
For内で宣言しFor内で使用しようとしているのでスコープの問題でもないでしょうし
引数の型は合ってますし、なにより同じ関数呼び出しの引数で複数回使っているのにも関わらず
使えるところと使えないところがあったりしてもう訳が分かりません。

どなたかお力添えお願いします。

発生している問題・エラーメッセージ

実行時エラー:'1004' アプリケーション定義またはオブジェクト定義のエラーです

問題なのは Cells(y, x) のy ,x が使用できないところだと思います

該当のソースコード

VBA

1Sub TestForIf() 2 3Dim num As Integer: num = 180 4 5 With Worksheets("Input") 6 For y = 0 To .Cells(1, 2).Value - 1 7 For x = 0 To .Cells(2, 2).Value - 1 8 Call SetImage( _ 9 Worksheets("Input").Cells(2 + y, 8 + x).Value, _ 10 Cells(y, x), _ 11 num) 12           'Worksheets("Input").Cells(2 + y, 8 + x).Valueの変数x,yは生きている  13           'Cells(y, x)の変数y,xが使えない 14           'Cells(y, x)をCells(1, 2)とかにすると解決する 15 Next 16 Next 17 End With 18 19End Sub

呼び出し先の関数です
恐らくこちらに問題は無いと思います

Sub SetImage(index As Integer, cell As Range, rot As Integer) Dim targetCell As Range: Set targetCell = cell Dim rotate As Integer: rotate = rot Dim filePath As String: filePath = "C:\Users\mushipan0929\Downloads\Image_" & index & ".png" With Worksheets("Output") .Shapes.AddPicture _ filePath, _ True, _ True, _ targetCell.Left, _ targetCell.Top, _ targetCell.Width, _ targetCell.Height .Shapes(.Shapes.Count).rotation = rotate End With End Sub

試したこと

エラー'1004'で検索して出てきた問題点などはあらかた確認しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Cells(y, x),の部分で、Cells(0, 0)を参照しようとするからでは?
セル番号は1始まりです。

あと、

VBA

1With Worksheets("Input") と、 .Cells(1, 2) 2Worksheets("Input").Cells(2 + y, 8 + x) 3Cells(y, x)

とバラバラで、一人の人が書いたと思えないコードですね。

投稿2020/12/06 10:22

otn

総合スコア85891

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mushipan0929

2020/12/06 10:38

なるほど!0から始まるものかと思っていました、ありがとうございますー あと書き方の統一も出来ていませんでしたね、そこも直します。 見にくさについてはVBA1日目なのでお許しを...
otn

2020/12/06 10:42

なるほど。1日目ですか。 単にCells(x,y)と書くと、アクティブシートのセルを参照しますので、"Input"シートじゃないかもしれません。 .Cells(x,y) と、Withで指定したシートとするのが良いでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問