質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

関数

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

Q&A

解決済

2回答

1512閲覧

EXCELエクセルマクロ 作業日の年月が入った関数をセルに作成するマクロの作成

dfmasap

総合スコア3

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

関数

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

0グッド

0クリップ

投稿2020/08/06 01:40

前提・実現したいこと

月ごとのまとめデータを作成する作業におけるデータ加工において、
エクセルのマクロで手作業を自動化したい。
エクセルのセルに作業日の年月を入れた関数をマクロで入力したい。

関数をマクロで入力する機能を実装中に以下のエラーメッセージが発生しました。

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

エラーメッセージ ```実行時エラー'1004 アプリケーション定義またはオブジェクト定義のエラーです。 ### 該当のソースコード workbooks("○○○○.xlsb").sheets("○○○○").activate workbooks("○○○○.xlsb").sheets("○○○○").range("AI2").formula="=IFERROER(vlookup(AH2,'¥¥○○¥○○¥○○¥○○¥"&Format(Dateserial(year(now),Month(now),Day(now)),"yymm")&"○○¥○○'!$T:$AC,2,FALSE),"")" ¥は本当は半角です。 さっぱり分かりませんでした。 どうかよろしくお願いいたします。

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

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

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

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

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

dfmasap

2020/08/06 02:23

申し訳ございません。 formulaプロパティを使用し、セルに関数を入力するマクロを作成したいです。 よろしくお願い致します
mako1972

2020/08/06 02:37 編集

取り消します。
guest

回答2

0

ベストアンサー

workbooks("○○○○.xlsb").sheets("○○○○").activate

workbooks("○○○○.xlsb").sheets("○○○○").range("AI2").formula="=IFERROER(vlookup(AH2,'¥¥○○¥○○¥○○¥○○¥"&Format(Dateserial(year(now),Month(now),Day(now)),"yymm")&"○○¥○○'!$T:$AC,2,FALSE),"")"

解決済みとなっていますが気になったので…。
最初に workbooks("○○○○.xlsb").sheets("○○○○") をアクティベイトしているので、
次は range("AI2") からの記述で大丈夫な気がします。

また、IFERRORの数式の最後に "" を入力したいのは分かりますが、
そもそも数式を""でくくっているのでこの場合ダブルクォートを文字として表示させる場合、
""""とする必要があると思います。

例えばですが…

vba

1range("AI2").value = "=IFERROR([何かしらの式], """")"

とすると、出力結果が…

=IFERROR([何かしらの数式], "")

となるはずです。

また、この方法はFomulaがサポートしていないようなので、valueで書けば動くと思います。
(それが最善までは自分も初心者の為何とも言えませんが)

投稿2020/08/06 02:57

phiar_poet

総合スコア230

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

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

dfmasap

2020/08/06 03:37

ご回答ありがとうございます。 if errorの部分に関しては、マクロではなく、セルに手入力すると関数としてエラーが出ません。 マクロで入力する際には変更すべき箇所でしょうか。マクロでおっしゃっていた部分を変更した場合、なぜかドキュメントフォルダを開くようになりました。
phiar_poet

2020/08/06 03:56

自分も勉強中の身ですので詳しいことをお伝えはできませんが、 Range("A1").Value = "〇〇〇" などとなっている場合のダブルクォートは文字ではなく、 ダブルクォート~ダブルクォートで括られたものがひとつの要素であることを意味しています。 なので、 Range("A1") = "=IFERROR([数式], "")" という書き方ではマクロは、 Range("A1") = "=IFERROR([数式]," までが入力されるデータだと認識し、そこから後ろの ")" 部分は何か得体のしれない未知のモノとして そんな形式は定義されてないよ!というエラーを吐き出します。 (あくまでマクロの話なので手入力の場合は普通に動きます) それとすみません、先ほどFormulaがサポートしていないエラーを吐く、と言いましたが、 スペルミスでした…Formulaでも動きますので訂正します。 また、ドキュメントが開く原因ですが、指定された文字列のシートが存在しない場合、 「え、そんなシートないけどどこ参照したらいいの?選んで!」 という感じになりドキュメントが開きます。 指定ファイルのどこどこのシートのこのセル、みたいな指定をしたい場合は… '[ファイル名]Sheet1'!a1:b100 のような書き方が必要ではないでしょうか。
phiar_poet

2020/08/06 04:08

ダブルクォートの件についてはいろいろ調べると出てくると思いますが、 http://officetanaka.net/excel/vba/tips/tips90.htm 私が説明するより分かりやすく書かれていると思いますので、 一度ご覧になってみてください。
guest

0

こんにちは。

FormatやDateserialはワークシート関数ではありませんよ。

Format(Dateserial(year(now),Month(now),Day(now)),"yymm")

部分を
TEXT(NOW(),"yymm")
にしたらどうでしょうか?

投稿2020/08/06 02:36

DreamTheater

総合スコア1095

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

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

dfmasap

2020/08/06 02:59

ご回答ありがとうございます。 SubまたはFunctionが定義されていません。とtextが選択された状態でエラーが起きてしまいました。
DreamTheater

2020/08/06 03:11

VBAからTEXTが見えちゃってましたね。 "TEXT(NOW(),""yymm"")"
DreamTheater

2020/08/06 03:16 編集

待てよ、これってマクロを実行した時点の年月に固定しなければいけないんですか? それなら Format(Now, "yymm"") で良いですね。(全体のクォート不要)
dfmasap

2020/08/06 03:42

再度ご回答ありがとうございます。 おっしゃる通りだと思います。 monthなどで数字を調整する必要がありませんでしたので、そちらに変更するべきでした。しかしまだエラーが発生します。 恐縮ですが他の部分で間違いはありますでしょうか。
DreamTheater

2020/08/06 03:54

1)Formmulaに設定する前に一度変数に代入する。 2)Debug.Printで変数を表示させる。 3)その値をコピペでセルに貼り付ける。 貼り付けた時点でEXCELがエラー表示すると思うので、エラー箇所を修正する。 あと、こういった長文の式をダラダラVBAに書くととっても読みずらいので、一旦変数に入れると良いですよ。 読みやすくするためには Dim work As String work = "" work = work & "=VLOOKUP(" work = work & "A1," work = work & "hogehoge" : という感じで書くと見やすいし括弧やクォートの対応も追いやすくなります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問