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

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

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

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

Q&A

2回答

3032閲覧

VBA Match関数

yakumo02

総合スコア103

VBA

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

0グッド

1クリップ

投稿2020/08/21 04:59

VBAのMatch関数を使って、他ブックのセルを参照して条件に合うデータがあればTrueを、なければFalseを返す関数を作っています。Match関数は、Workbooks.openで他ブックを開かなければ参照できないのでしょうか?
調べてみると、VBAでなくExcelでの方法(Index関数と組み合わせる)しか出てきませんでした。
3行目を消すと、インデックスの有効範囲のエラーが出ます。
よろしくお願いします。

Function IsContained(target, Filename) As Boolean path = Sheet_path(c) Set open_file = Workbooks.Open(Filename:=path & "\" & Filename, UpdateLinks:=False) On Error Resume Next num = WorksheetFunction.Match("テスト", Workbooks(Filename).Worksheets("シート").Range("CC10:CC900"), 0) On Error GoTo 0 If num = 0 Then kekka = False Else kekka = True End If Workbooks(Filename).Close End Function

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

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

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

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

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

mdj

2020/08/21 06:01

参照するのは他のブックなのに、他のブックを開かないで参照したいんでしょうか?(意味が分からない日本語になっているんですが、そうしたいと読めるのですが。)
yakumo02

2020/08/21 06:08

そういうことです。 ExecuteExcel4Macroはファイルを開かずに参照できますよね。 Match関数でもファイルを開かずに参照する方法は存在するかということです。
mdj

2020/08/21 06:38

「ExecuteExcel4Macro」について教えていただいてありがとうございます。 では、VBAのQueryTableオブジェクト、もしくはADOで接続して、取得した値をMatch関数で処理する、というのはいかがでしょうか。
yureighost

2020/08/21 08:15 編集

動作確認はまだやってませんが、 MATCHはExcel関数なので ExecuteExcel4Macroで使える可能性はあります。 他に回答される方がいないようでしたら調べてみます。
Zuishin

2020/08/21 09:28

開くのが簡単なら開けばいいんじゃないかと思いますが。どのみちデータを読み込まなければいけないので内部では開いています。表示されるのがいやなら非表示にしたらいいと思います。
guest

回答2

0

本題ではないですが、
有無の確認ならcountif関数で良いかと思います。

ExcelVBA

1dim flg as Boolean 2flg = worksheetfunction.countif(セル範囲,キーワード)

処理速度はMatch関数とどっちが速いかは知りません。
(最近のバージョンだとMatch関数が速い気がするけど、試してみてください)

インデックスの有効範囲のエラーが出ます。

あぁ、
オブジェクトを指定するときにブックを開いてないと、
エクセル君としては、「ワークブック」として認識しないです。

「ブックを開かいないで」がテーマならそれで調べた方がよさそうです。

Evaluateメソッドを使えばできそうな気がしますが、調べてみる元気がないので、
ヒントだけ。

あと、ブックを開かないことが、どれくらい処理速度的に有利なのかは、
どうなんでしょう。。。。?
個人的には大差ないと思ってますが、、、、、

投稿2020/08/21 09:25

mattuwan

総合スコア2136

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

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

0

本題ではないですが、ユーザー定義関数の戻り値がおかしいような気がします・・。

VBA

1Function プロシージャ名(引数 As データ型) As 戻り値のデータ型 2 プロシージャ名 = 戻り値 3End Function

VBA

1・・・略 2If num = 0 Then 3 IsContained= False 4 5Else 6 IsContained= True 7End If 8 9などとしないとおかしいような気がします。

投稿2020/08/21 07:41

編集2020/08/21 07:41
mako1972

総合スコア383

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問