dポイントプレゼントキャンペーン実施中!

入力したデータがテーブルの複数行に対応している、運行管理表です。
Application.InputBoxで指定したデータ(検索ID、日付)の行の初めから終わり行までの範囲を別のシートにコピーしたいと思っています。

A列に2020/01/01-001(検索ID)日付と車両管理IDを合体したもの
同じ検索IDが複数あります。(1日の運行回数分)
B列に2020/01/01(運行日)があります。(検索IDと同数)

Sub 運行期間転記()(A列、検索IDを対象として)
Dim dai As Worksheet '台帳A
 Dim kanri As Worksheet '管理表
Dim s As Long 'コピー対象の開始行位置
Dim e As Long 'コピー対象の終了行位置
'台帳A、管理表を参照
Set dai = Sheets("台帳A")
Set kanri = Sheets("管理表")
'台帳Aの最終行を調べる
z = dai.Range("A1").End(xlDown).row
'コピー対象を入力
s = Application.InputBox("検索IDを入力して下さい", Type:=2)
'コピー対象の範囲を調べる
key = s
s = WorksheetFunction.Match(key, tbl.Range("A2:A" & z), 0) + 1
e = WorksheetFunction.Match(key, tbl.Range("A2:A" & z), 1) + 1
'対象行をコピー
kanri へペースト
End Sub

これで、一応コピーできましたが、車両の台数分の操作をしなければならないので、B列の日付を検索対象にしようと思い下記の様に修正しましたが、※位置でエラーになります。
(B列日付を対象として)
z = dai.Range("B1").End(xlDown).row(B列参照)
'コピー対象を入力
s = Application.InputBox("検索IDを入力して下さい", Type:=2)
'コピー対象の範囲を調べる
key = s
s = WorksheetFunction.Match(key, dai.Range("B2:B" & z), 0) + 1※(A2➡B2:A➡B)
e = WorksheetFunction.Match(key, dai.Range("B2:B" & z), 1) + 1)

ちなみに、WorksheetFunction.Matchプロパティを取得できませんと表示されます。
key = sはApplication.InputBoxで入力した日付を取得しています。Application.InputBoxを使用したのは初めてで、InputBoxでも試してみましたが同じ結果でした。
何が原因なのか、全く不明です。お判りに方がいらっしゃれば、教えてください。よろしくお願いします。

A 回答 (2件)

検索結果が見つからないというエラーです。



※の前に閉じかっこがないのは気にしなくていいですよね?
tbl→daiになってますが、全部daiでいいですか?

イミディエイトウィンドウに
debug.print(key)
debug.print("B2:B" & z)
等を使って出力してみて下さい。

http://tooljp.com/qa/WorksheetFunction-1004-Matc …
https://www.relief.jp/docs/excel-vba-error-trap- …
https://oshiete.goo.ne.jp/qa/3637799.html
    • good
    • 2
この回答へのお礼

ありがとうございました。Application.InputBoxの Type:を3に変更し、.Match(Val(key)にしたら
認識しました。先に進めそうです。助かりました。

お礼日時:2020/01/03 17:03

InputBoxメソッド


https://www.239-programing.com/excel-vba/func/fu …

の引数 Type:=2 は文字列です。
B列に入力されているのは多分日付なのでシリアル値なので検索は難しいかも知れません。
http://www.excel.studio-kazu.jp/kw/2019081622562 …

CDate 関数
https://www.tipsfound.com/vba/05cdate

で日付型に変換してみてどうなるか?

データを頭から調べていってと言う手段もありそうですけど、データ数と頻度によりますよね。
    • good
    • 2
この回答へのお礼

新年早々お手数をおかけしました。シリアル値の問題だったんですね。シリアル値を文字列
に変換するために、未使用の最終列の1行目に「日付2」と入力し、2行目以降に[=IF(B2="","",TEXT(B2,"yyyy/m/d")]と入れて文字列に変換して、その列を基準に検索したところ認識してコピーできました。ペースト先では必要以外のデータは削除しますので、問題はないようです。

以前めぐみさんにご紹介頂いた本で勉強しています。いつもありがとうございます。

お礼日時:2020/01/01 16:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!