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

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

詳細はこちら
VBA

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

8018閲覧

プロシージャの呼び出し、または引数が不正です。のエラー対応について

shu_shu

総合スコア10

VBA

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2021/02/01 09:32

前提・実現したいこと

毎回初歩的な質問で恐縮です。
エラー解消についてアドバイス頂けますと助かります。

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

実行時エラー5 プロシージャの呼び出し、または引数が不正です。

該当のソースコード

Sub test31_0125_0130() '①InputBoxで年月入力 Dim ws07 As Worksheet, ws08 As Worksheet Dim nengetsu As String Set ws07 = worksheets("月次") Set ws08 = worksheets("月次コスト") nengetsu = Application.InputBox("年月を入力してください", Type:=2) '②指定月で「月次コスト」のセルを指定 Dim i As Long, j As Long '元データの最終行を取得 i = ws08.Cells(Rows.Count, 1).End(xlUp).Row '元データの最終列を取得 j = ws08.Cells(1, Columns.Count).End(xlToLeft).Column '③「月次コスト」を項目毎に合計値を集計 Dim pc As PivotCache Dim pt As PivotTable 'ピボットテーブルに使うデータを設定 Set pc = ActiveWorkbook.PivotCaches.Create( _ SourceType:=xlDatabase, _ SourceData:=ws08.Range(ws08.Cells(1, 1), ws08.Cells(i, j))) Dim shNo As String shNo = Format(Now, "yyyymmdd-hhmmss") Debug.Print shNo ' ピボットテーブルを作成する Set pt = pc.CreatePivotTable( _ TableDestination:=worksheets(shNo).Range("B2"), _ TableName:="ピボットテーブル1") ' ピボットテーブルの詳細を設定する With pt ' (a)列ラベルに設定するデータ ' (b)行ラベルに設定するデータ .PivotFields("項目").Orientation = xlRowField .PivotFields("項目").AutoGroup ' (c)値に設定するデータ .PivotFields(nengetsu).Orientation = xlDataField 'nengetsuを""で囲むとエラーになる。nengetsuはString、Type:=2 End With '④「月次」へ「月次コスト」の集計値を転記 Dim row2 As Long, column2 As Long Dim ws09 As Worksheet Set ws09 = worksheets(shNo) 'ピボットテーブルで集計したデータを選択 '最終行を取得 row2 = ws09.Cells(Rows.Count, 1).End(xlUp).Row '最終列を取得 column2 = ws09.Cells(1, Columns.Count).End(xlToLeft).Column Dim tbl As Range Set tbl = ws09.Range(ws09.Cells(2, 2), ws09.Cells(i, j)) ws07.Activate Dim key As String, k As Long k = 2   ’ここでエラーがでます。 Do While Cells("A" & k).Value <> "" key = Cells("A" & k).Value Dim ret As String ret = WorksheetFunction.VLookup(key, tbl, 2, False) Cells("B" & k).Value = ret k = k + 1 Loop End Sub

他に試したこと

Do While Cells("A" & k) <> ""
「.Value」をとってみましたが、同じエラーでした。

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

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

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

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

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

guest

回答2

0

エラーメッセージの通りですね。
引数は行番号(int)、列番号(int)で文字列を取らないってだけだと思います。

https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.cells

投稿2021/02/01 09:45

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2021/02/01 09:46

被った…すみませんorz
shu_shu

2021/02/01 10:25

ありがとうございました。無事解決しました。そこに気づかない自分が恥ずかしいです。1つ覚えて1つ忘れる状態をなんとか打破したいです。ありがとうございました。
guest

0

ベストアンサー

Cells
の引数指定が誤っています。
Cellsは行列番号での指定です。

"A1"などでアクセスしたいのであれば、
Range("A" & k)をご利用ください。

Cellsにこだわるのであれば、
Cells(k, 1)
などをご利用ください。
※第1引数は行番号です。
※第2引数は列番号で、1はA列を指します。

投稿2021/02/01 09:42

WhiteTempest

総合スコア404

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

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

shu_shu

2021/02/01 10:25 編集

ありがとうございました。無事解決しました。そこに気づかない自分が恥ずかしいです。1つ覚えて1つ忘れる状態をなんとか打破したいです。ありがとうございました。先に分かりやすくご回答いいただきましたので、ベストアンサーにさせて頂きます。
WhiteTempest

2021/02/01 10:31

初めの頃は書くことにいっぱいいっぱいになりがちですよね。 エラーを解決することを目的にするのではなく、 コード/エラーを理解することを目的にすると、 忘れにくくなりますよ。 ※そうすることで、応用も思いつきやすくなります。 「解決しなきゃ!」ではなく、 「なぜ発生するのだろう?」の精神が大切です。 ★解決済みにすることをお忘れなく~
shu_shu

2021/02/01 10:36

対象療法ではなく体質改善みたいな。。違ってたらスミマセン。少し違った視点を持てそうです。ありがとうございました。これからもよろしくお願い致します。
WhiteTempest

2021/02/01 10:53

概念的にはそう思ってもらっていいですよ。 エラーメッセージについても 都度意味を深めれば、応用/類似も楽々解決です! 勉強頑張ってください!
shu_shu

2021/02/01 11:10

何度もありがとうございます。アドバイス頂き、頑張れそうです。都度エラーメッセージの意味を深めていきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問