Excel2007のVBAについてご教授ください。
Application.Matchで特定列の文字列検索を使いたいんですが以下のような構文で使えますでしょうか?
-----------------
Set usWS = Worksheets("Sheet1")
KeyIdValue = "hogehoge"
JANCol = 9
m = Application.Match(KeyIdValue, usWS.Columns(JANCol), 0)
-----------------
Sheet1のワークシートの9(I列)列目に"hogehoge"が入っている行数をmに入れたいです。
(最初に見つかった行数で構いません。複数は見つかりません。)
検索されません?というようなエラー(エラー2042)が出るのですが、使い方が誤っていないかご教授させて頂きたいです。
変数の宣言はコンパイルエラーが出ないので問題ありません。
Application.Matchの使い方に問題ないか教えて頂けませんでしょうか?
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
No.1・2です。
>実コードは
>KeyIdValue = jpWS.Cells(jpWsRow, JANCol).Value
>m = Application.Match(KeyIdValue, usWS.Columns(JANCol), 0)
>という感じでセルを参照しています。。。
文字列ではうまくいって、数値でエラーになるというコトですね?
変数 KeyIdValue の型は何で宣言しているのか不明ですので、いっそのこと
変数に代入せず、MATCH関数の中に直接セルを入れてみてはどうでしょうか?
仮に参照セルが B3セルだとすると
>m = Application.Match(Range("B3"), usWS.Columns(JANCol), 0)
のような感じで・・・
他の変数の型も念のため確認した方が良いと思います。
部分的なコードだけでの回答ですので、これでもダメならごめんなさいね。m(_ _)m
ありがとうございました。
解決しました。一度String型の変数に置き換えているのが問題でした。
ドンピシャで正解でした。
そうですよね。よく考えれば、そこが一番怪しかったです。
ご指摘のとおり、直接比較するようにしたらきちんと解決されました。
いろいろアドバイスありがとうございました。
何とか解決できて先に勧めそうです。
ありがとうございました。
No.4
- 回答日時:
再です。
このような時は、うまくいかない原因の絞り込みをするために、簡単なテストを実施します。
考えられる原因:
A:Matchの使い方が間違っているのでは?
B:文字列と数値の違い?
C:質問者が説明してない部分に何か問題があり、そこからの連鎖
検証手順:
[1]新規ワークシートを用意する。テストのため、必ずまっさらな状態から始める。
[2]シート1のA5にhogehoge、A6に123と入力する。
[3]VBAを開き、次のコードを実行する。
Sub test()
MsgBox (Application.Match("hogehoge", Worksheets("Sheet1").[A:A], 0))
MsgBox (Application.Match(123, Worksheets("Sheet1").[A:A], 0))
End Sub
これが正常に走れば、AとBのセンは消えます。
あとはCですが、これ以上は、実際にそのシートを使っている本人にしかわかりません。
hogehogeをどこからどんなふうに引っ張って来ていて、そのセルにはどんな式が入ってるのか、元表があるならそれはどんな体裁なのか、そうした詳しい内容がわからなければ、こちらで判断できません。
文字列を加工している間に、目に見えない半角スペースが付いたりしてないか、等、色々調べてみてください。
ありがとうございました。
解決しました。一度String型の変数に置き換えているのが問題でした。
よく考えれば、そこが一番怪しかったです。
いろいろアドバイスありがとうございました。
何とか解決できて先に勧めそうです。
ありがとうございました。
No.3
- 回答日時:
9列目(I列)を検索したいのなら、9列目(I列)だけをセットすれば良い話と思われます。
Set usWs = Worksheets("Sheet1").[I:I]
KeyIdValue = "hogehoge"
m = Application.Match(keyIdValue, usWs, 0)
MsgBox m
情報ありがとうございます。
数字ではうまくいかず、文字列では動作しています。
書式なども”文字列”に変更してみましたが、変わりませんでした。
セルに"123"と入れると検索できなくて"123a"と入れると合致していました???
(123だと右寄せでセルに入りますが、123aだと左寄りでセルに入力されますが数字と認識しているかだけなので関係ないですよね。)
基本的な何かが問題があるのだと思います。
おなじ数字かは何回も見直しましたが。。。
何かわかればご教授方よろしくお願いします。
No.2
- 回答日時:
No.1です。
>数字はマッチしないように見えます。。。
>文字列ならOKでした
前回のコードの
>Set c = Range("I:I").Find(what:="hogehoge", LookIn:=xlValues, lookat:=xlWhole)
の
"hogehoge"
部分は文字列となりますので、
数値の場合、ダブルクォーテーションを付けないようにしなければなりません。
エラーの原因はこの辺では?
他の原因ならごめんなさいね。m(_ _)m
またまた、連絡ありがとうございます。
実コードは
KeyIdValue = jpWS.Cells(jpWsRow, JANCol).Value
m = Application.Match(KeyIdValue, usWS.Columns(JANCol), 0)
という感じでセルを参照しています。。。
正直、何かが問題だと思いますが、私の知識では歯が立ちません。。。
数字と文字列で何が違うんでしょう???
セルに"123"と入れると検索できなくて"123a"と入れると合致していました???
(123だと右寄せでセルに入りますが、123aだと左寄りでセルに入力されますが数字と認識しているかだけなので関係ないですよね。)
頂いたコードでも同じような結果になっているように見えました。。。
(こっちは、しっかり見ていないので確認してみます。)
No.1
- 回答日時:
こんばんは!
エラー2042は #N/A みたいですので、I列に「hogehoge」というデータがないのでは?
今回は敢えてMATCH関数を使いたい!というコトですので、
IF ~ Then などでエラー回避をしてみてはどうでしょうか?
余計なお世話かもしれませんが、私であれば
Sub Sample1()
Dim c As Range
Set c = Range("I:I").Find(what:="hogehoge", LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
MsgBox "該当データなし"
Else
MsgBox c.Row
End If
End Sub
といった感じにします。m(_ _)m
プログラムのコードまで大変ありがとうございます。
こちらに変更してみましたが、結果は同じでした。。。た
ぶん、基本的なことが理解していません。
また、きちんと見ていないので、移植が間違っていたら、すみません。
ただ、今、試していたんですが、数字はマッチしないように見えます。。。
文字列ならOKでした。
セルの書式などの指定など問題もありますでしょうか?
こういうものでしょうか?回避策はありますか???
はっきり言ってよくわかりません。ご教授頂きたいです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
2024年は「名探偵コナン30周年」「涼宮ハルヒ20周年」などを迎えますが、 あなたが「もうそんなに!?」と驚いた○○周年を教えてください。
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
好きな「お肉」は?
牛肉、豚肉、鶏肉、ラム肉、クマやシカの狩猟肉……。 いろ〜んな肉が食べられるようになりましたよね。 あなたがこれまで食べて「これはうまい!」とか「なんじゃこりゃ!」と好きになったお肉を教えてください。
-
ApplicationとWorksheetFunctionの違い
Visual Basic(VBA)
-
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
Application.Matchについて
Excel(エクセル)
-
-
4
VBA Match関数の限界
Excel(エクセル)
-
5
vba 時間の引き算 例えば 15:00から16:15の間の時間は1時間15分ですが、vbaのコード
Visual Basic(VBA)
-
6
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
7
excel match で日付が見つからない
PowerPoint(パワーポイント)
-
8
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
9
VBA エラー回避を教えてください。ループ内のMatchで値がないと止まってしまいます。
Excel(エクセル)
-
10
Excelマクロ 該当する値の行番号取得などのやり方について
Visual Basic(VBA)
-
11
VBAでのMATCH関数
Visual Basic(VBA)
-
12
ExcelVBAで、型が一致しませんのエラーについて
Visual Basic(VBA)
-
13
VBA 別ブックから条件に合うものを転記したいです
Visual Basic(VBA)
-
14
エクセルのマクロで印刷プレビューを閉じる方法
Excel(エクセル)
-
15
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
16
InputBoxの入力値を半角数字のみと限定する方法
Excel(エクセル)
-
17
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
18
EXCEL VBA 印刷プレビューダイアログのボタン操作を判定したい
Visual Basic(VBA)
-
19
VBA 数式を残して値をクリアについて
Excel(エクセル)
-
20
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
【VBA】指定したセルと同じ値で...
-
Excelで指定した日付から過去の...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
Excel VBAで比較して数値があっ...
-
VBからEXCELのセルの値を取得す...
-
VBAでセルをクリックする回...
-
Excelのプルダウンで2列分の情...
-
EXCELのVBA-フィルタ抽出後の...
-
VBA実行後に元のセルに戻りたい
-
VBA初心者です。結合セルを保持...
-
DataGridViewの各セル幅を自由...
-
セルに画像挿入すると、右セル...
-
vba 隣のセルに値がある行だけ...
-
Excel2003 複数セル1列の入力済...
-
TODAY()で設定したセルの日付...
-
EXCELで変数をペーストしたい
-
指定した条件で行セルを非表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定のセルが空白だったら、そ...
-
Excelで指定した日付から過去の...
-
Excelのプルダウンで2列分の情...
-
【Excel VBA】指定行以降をクリ...
-
特定の文字を条件に行挿入とそ...
-
EXCELで変数をペーストしたい
-
エクセルVBAでコピーして順...
-
TODAY()で設定したセルの日付...
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
VBA実行後に元のセルに戻りたい
-
【Excel】指定したセルの名前で...
-
”戻り値”が変化したときに、マ...
-
Excel vbaで特定の文字以外が入...
-
EXCELのVBA-フィルタ抽出後の...
-
指定した条件で行セルを非表示...
-
VBA初心者です。結合セルを保持...
-
ExcelのVBAで数字と文字列をマ...
おすすめ情報