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

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

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

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

Q&A

解決済

1回答

3760閲覧

Excel VBA Worksheet.Matchで行番号を取得したい

ame410

総合スコア1

VBA

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

0グッド

0クリップ

投稿2022/08/10 22:46

前提

マクロが有効なエクセルブックで、データを取り扱っています。
VBAコードはSheet1に記入しています。

実現したいこと

  • Sheet1に存在する数値Aと、値が完全一致するセルをSheet2の2番目のRow(A~ZZ)から探す(Column番号が分かればOK)
  • Findメソッドを使うと時間がかかるのでMatchメソッドを使用したい
  • 数値AはSheet1のセルの値を&でつなげたもの。コードではShikibetsuNoという変数に格納している。

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

明らかに数値Aに一致するセルがあるにも関わらず、Worksheet.Matchで値を得ることができない(おそらくN/Aになっている)
下のコードでいうと「値がありません」というメッセージコードが表示される

該当のソースコード

※前提
Sheet1に書いているVBAです

Sheet1のセル情報
Cells(1, 4)=1
Cells(4, 4)=1
Cells(6, 4)=130
Cells(7, 4)=2

Sheet2のセル情報
B2=111301
C2=111302
今回はC2の位置を取得したい

vbaSub

1※ShikibetsuNo とは数値Aのこと 2Dim ShikibetsuNo As Variant 3 ShikibetsuNo = Cells(1, 4).Value & Cells(4, 4).Value & Cells(6, 4).Value & Cells(7, 4).Value 4Dim Var As Variant 5 Var = 0 6 7On Error Resume Next 8 Var4 = WorksheetFunction.Match(ShikibetsuNo, Worksheets("Sheet2").Range("A2:ZZ2"), 0) 9On Error GoTo 0 10 11 If Var4 = 0 Then 12 MsgBox "値がありません" 13 Else 14    (その後の処理)

試したこと

・Application.Matchを使う→特に変化なし(この際エラーのところはIf IsError(Var) Thenとかで書き直しました)
・matchの検索範囲を狭める→ダメでした

補足情報(FW/ツールのバージョンなど)

エクセル バージョン2016

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

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

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

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

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

guest

回答1

0

ベストアンサー

Dim Var As Variant と変数宣言してますが、Varは使用されてません。
Var4を使用してますので、このVar4Varに変更すれば動くのでは。

あと、ShikibetsuNo は文字列になるので、検索対象のセル値が数値だと値が見つからないとなりますので、
ShikibetsuNoを数値型に変換する必要があるかもしれません。


モジュールの先頭に Option Explicit と記述して変数宣言を強制しておくとこのような単純ミスを防ぐことができます。

【Excel小ネタ】ExcelのMATCH関数は実は2つある? - FI's Story

Office TANAKA - 今さら聞けないVBA[変数って宣言しなくちゃいけないの?]

投稿2022/08/11 01:06

編集2022/08/11 01:32
hatena19

総合スコア33715

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

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

ame410

2022/08/11 02:35

ありがとうございます! >Var4をVarに変更すれば動くのでは。 これに関しては自分の書いたコードをteratailに書き写して編集するときにミスしたものです、混乱を招き大変申し訳ありませんでした。 >ShikibetsuNo は文字列になるので、検索対象のセル値が数値だと値が見つからない まさにこれが原因でした。解決策として=Val()で数値に変換しましたが、これでうまくいきました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問