• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:matchプロパティを取得できません…と出ます。)

エクセルVBA初心者によるMATCHプロパティの取得エラー

fumufumu_2006の回答

  • ベストアンサー
回答No.1

とりあえず、「keyは年度で」と言っていますが、モジュール中ではkeyを文字列で宣言していますので、 Application.WorksheetFunction.Match(val(key), Range・・・ と、検索値をval(key)で数値に変換して呼び出してみては? これでだめなら、st=(またはed=の行)にブレークポイントを設定して、その時のzとkeyの値を調べて、本当にその範囲に値があるか、そのセルの形式(書式->セル->表示形式)が文字列になっているか確認してください。 それでもダメなら、A列のデータを教えてください。

sakurako00
質問者

お礼

ありがとうございます!!!! いけました。動きました! 初心者な質問で本当にすいませんでした。 でも、本当に助かりました。 ありがとうございました!

関連するQ&A

  • エクセルVBAマクロの質問です。

    マクロ初心者です。行き詰まってます。 sheet1には300件程度のデータがあります。 このデータの3列目の値を、VLOOKUPでsheet3のA1:B30範囲から参照します。そこで取得した回数分、sheet1の各行のデータをsheet2にコピーしたいんです。 そこで、コード文を作ってみましたが、マクロがうまく動きません。 すみませんが、お知恵を貸していただけないでしょうか? Dim Z as Long Dim L As Long Dim P As Long Dim Kensaku As String Dim M4 As Range Dim PRow As Long Dim i As Long Set M4 =Sheets(“sheet3”).Range(“A1:B30“) L = Sheets(“sheet1”).Range(“A1”).End(xlup).Row For Z = 1 to L-1 Kensaku = Sheets(“sheet1”).Cells(Z+1,3).Value P=Worksheetfunction.Vlookup(Kensaku,M4,2,False)    For i = 1 to P      Prow=Sheets(“sheet2”).Range("A1").End(xlDown).Row      Sheets(“sheet1”).Rows(Z+1).Copy Sheets(“sheet2”).Rows(Prow)    Nexti Next Z

  • 複数シートにわたる連番を自動作成するfunctio

    複数シートにわたる連番を自動作成するfunction関数をoffice 365のEXCELで作りました。 variant型で定義しており、連番途中に右側のセルが空白だった場合、対象セルを空白にし、上のセルが空白だった場合は、数字が出てくるセルまで上に行き+1します。 左端のシート以外の最上のセルは左のシートの最大の数字+1に設定しています。 Function renban1() As Variant Dim temp As Integer, a_row As Long, a_col As Long Dim range1 As Range, ind As Integer Const a_spc = " " ind = ActiveSheet.Index a_row = ActiveCell.Row a_col = ActiveCell.Column renban1 = a_spc Set range1 = Range(Cells(a_row, a_col + 1), Cells(a_row, a_col + 7)) If a_col = 2 And a_row = 5 Then renban1 = 1 Exit Function End If If a_row = 12 And a_col = 2 Then If ind = 1 Then renban1 = 2 Exit Function Else If WorksheetFunction.CountA(range1) = 0 Then '右が空白 renban1 = a_spc Exit Function Else For temp = 80 To 12 Step -2 If ActiveSheet.Previous.Cells(temp, a_col).Value <> a_spc Then '上が空白以外≒数値 renban1 = ActiveSheet.Previous.Cells(temp, a_col).Value + 1 Exit Function End If Next temp End If End If End If If a_row > 10 And a_row < 82 Then '番号のセル範囲 If WorksheetFunction.CountA(range1) = 0 Then '右が空白 renban1 = a_spc Exit Function Else For temp = a_row - 2 To 12 Step -2 If Cells(temp, a_col).Value <> a_spc Then '上が空白以外≒数値 renban1 = Cells(temp, a_col).Value + 1 Exit Function End If Next temp End If End If End Function これで、動作自体は正しいのですが、いちいちセルをクリックしてENTERを押さないと正しく更新されません。(トリガーが無いので当然と言えなくもないのですが) 1シートに35行ほどあり、同様のシートが11枚あるので、出来れば自動で更新させたいのですが、calculateやapplication.volatileを試してもうまくいきませんでした。 VBAにお詳しい方、どうやれば良いか教えて下さい。よろしくお願い致します。

  • 登録する行の変更

    以下のコードで「入力」シートのデータから「DB]シートに登録するんです。「DB」シートの一行目A1は題名ですが新しいデータに入ってくるとどんどん題名は下の行に下がっていく。 題名は固定し、新しいデータはA2から入ってくるようにしたいですがどこに変更すればいいかわからなくて困っています。(ExcelのVBAはまったくわかりません) よろしくお願いします。 Excel 2007 Sub 登録_Click() 'On Error GoTo Err_登録 Dim n As Integer '入力明細の数 Dim x As Long 'DBの検索範囲の最終行 Dim rng As Range '検索したセル Dim z As Long 'DBのデータの最終行 Dim tbl As Worksheet '[DB]シート Dim key As String '検索キー Dim from_key As Long '更新範囲(自) Dim to_key As Long '更新範囲(至) '警告メッセージ非表示 Application.ScreenUpdating = False Worksheets("入力").Activate Set tbl = Sheets("DB") z = tbl.Range("A1").CurrentRegion.Rows.Count Check_登録: key = Range("B2").Value If key = "" Then MsgBox "発注番号が未入力です。" Exit Sub End If '[発注番号]でソート tbl.Range("A1").Sort Key1:=tbl.Range("A1"), Header:=xlGuess '存在チェック x = tbl.Range("A1").End(xlDown).Row With tbl.Range("A1:A" & x) Set rng = .Find(key, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If Not rng Is Nothing Then MsgBox "既存の番号が存在します。" Exit Sub End If End With '明細行有無チェック n = WorksheetFunction.CountIf(Range("M46:M65"), "*") If n = 0 Then MsgBox "明細行がありません。" Exit Sub End If Add_登録: '空白行を省く Selection.AutoFilter Field:=14, Criteria1:="<>" 'コピー&貼り付け Range("A47:U66").Copy tbl.Range("A" & z + 1).PasteSpecial Paste:=xlPasteValues '[発注番号]でソート tbl.Range("A1").Sort Key1:=tbl.Range("A1"), Header:=xlGuess 'コピーモード解除 Application.CutCopyMode = False '空白行を省くを解除 Selection.AutoFilter Field:=14 'ブック保存 'ActiveWorkbook.Save '画面クリア Call 画面クリア '警告メッセージ表示 Application.ScreenUpdating = True Exit_登録: MsgBox "登録しました。" Exit Sub Err_登録: MsgBox "エラーが発生しました

  • エクセルmatch関数を使った日付の検索

    株価の表があり、項目は日付、初値、高値、安値、終値、出来高のA列からF列になっています。 もう一つデータの入ってない表があり、そちらにデータの入っている元の表から日付で検索して合致 するデータを持ってきたいのです。(呼び出し側の表の最後のデータから、日付を取り出して検索しています) 項目日付の書式は日付型になっています。 自分なりに調べて次のようにしました。 Sub sinkabuka() Dim ken As Variant Dim motorow As Integer Dim sinrow As Integer Dim han As Object Dim a As Variant motorow = Worksheets(2).Range("a65536").End(xlUp).row sinrow = Worksheets(1).Range("a65536").End(xlUp).row If sinrow = 1 Then Exit Sub End If ken = Worksheets(1).Range("a" & sinrow).Value2 Worksheets(2).Activate Worksheets(2).Select Set han = Range("a2:f" & motorow) a = Application.WorksheetFunction.Match(ken, han, 0) <ーエラーになります match関数でアドレスをとれるようになったら、合致したデータの次のデータをとるようにしたいと おもっています。 試しにvlookup関数を使ったらデータを返してくれました。 excel2010 windows7です。 アドバイスをお願いします。 

  • EXCELでSheetにデータを蓄積したい

    Sheet1に入力シートを作成し、Sheet2に蓄積シートを作成しました。 Sheet1で作成されたデータをSheet2に蓄積させておきたい。 Sheet1のA2の値が入力された場合に実行するとすると Sheet1のデータ数は、毎回異なります。 他を参考に以下のように作ってみたのですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim lastA As Long, lastB As Long, ws1 As Worksheet, ws2 As Worksheet Set ws1 = Sheets("入力シート") Set ws2 = Sheets("蓄積シート") With Target If .Address <> "$A$2" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub If WorksheetFunction.Count(ws1.Range("a1:s1")) <> 19 Then Exit Sub lastA = ws2.Range("a65536").End(xlUp).Row lastB = ws1.Range(("a2:s2"), Selection.End(xlDown)).Select ws2.Range("a" & lastA + 1).Resize(1, 19).Value = _ ws1.Range("a2:S2").Resize(1, 19).Value End With End Sub 'ws1.Range("a2:S2").Resize(1, 19).Value の部分で '上記ws1の範囲の内、Row2の値しかws2へ反映されません どなたか教えて頂けないでしょうか。

  • エクセルシートをアドインファイルにした場合、シートのありかの指定方法は?

    エクセルシートのデータを別の色んなシートから「関数呼出」で利用したい為 アドインファイルにしたいのですがうまくいきません。ご指導下さい。 下記のコード(一部表示)を実行した場合 2: で引っ掛かりエラーとなります。 「err= 91 オブジェクト変数またはwith ブロック変数が設定されていません。」 1: Dim tempRange As Range 2: tempRange = Workbooks("psteel.xla").Worksheets(1).Range("B4:Y4") 3: iti = Application.WorksheetFunction.Match(seinou, tempRange, 0) シートの範囲指定が悪いと思うのですがどう指定すれば良いのでしょうか? よろしくお願い致します。 =============================================== 下記の 普通の.xlsファイルでは実行できます。 Public Function pss(ryaku, seinou) On Error GoTo errhandle iti = Application.WorksheetFunction.Match(seinou, Range("B4:Y4"), 0) pss = Application.WorksheetFunction.VLookup(ryaku, Range("B6:Y209"), iti, False) Exit Function errhandle: If Err = 1004 Then pss = "name?" Else MsgBox "err= " & Err & " " & Err.Description End If End Function

  • Excel のアドイン

    Excel2003です。 xlaファイル内に次のような関数があった場合、  Function addinfunc(a As long, b As long) As long  Dim c As long  c = a + b  addinfunc = c  End Function シート上からは =addinfunc(B1,C1) という風に利用できますが、 xlsファイル内のプロシージャーから Debug.Print addinfunc(Sheets("Sheet1").Range("C1")), Sheets("Sheet1").Range("B1")) という風には使えません。 プロシージャー内で使うということはもともとできないのか、 何か設定があるのかどういうものでしょうか?

  • シート1の氏名をシート2に反映

    sheet1の氏名をsheet2の日付、記号(A,B,C)にマッチした位置に入力させたいのですが下記コードで他で試したのですがうまくいきません。どなたかコードが解る方よろしくお願いします。 Sub 入力() Dim i As Long, j As Long, k As Long, L As Long Dim wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") i = wS2.Range(wS2.Cells(6, 1), wS2.Cells(8, 1)) j = wS2.Cells(3, Columns.Count).End(xlToLeft).Column Range(wS2.Cells(3, 2), wS2.Cells(i, j)).ClearContents On Error Resume Next For i = 2 To wS1.Cells(Rows.Count, 4).End(xlUp).Row If WorksheetFunction.CountA(wS1.Rows(i)) > 1 Then For j = 2 To wS1.Cells(i, Columns.Count).End(xlToLeft).Column If wS1.Cells(i, j) <> "" Then k = WorksheetFunction.Match(wS1.Cells(i, 4), wS2.Range(wS2.Cells(6, 1), wS2.Cells(8, 1)), False) L = WorksheetFunction.Match(wS1.Cells(5, j), wS2.Rows(3), False) wS2.Cells(k, L) = wS1.Cells(i, j) End If Next j End If Next i End Sub

  • Excel2003のVBAで教えてください

    以下のようなコードのプログラムを書いています。 使用しているシートは、"data"と"入力"という2つのシートです。 "入力"シート上で入力したデータを"data"シート上に追加していく予定です。 しかし、どうしても、"入力"シート上にペーストされてしまい"data"シート上にペーストすることができません。 Range("A" & z + 1).PasteSpecial Paste:=xlPasteValues が問題だとおもうのですが、これを Range("data!A" & z + 1).PasteSpecial Paste:=xlPasteValues と変更すると、実行時エラー1004になってしまいます。 アドバイスお願いします Private Sub CommandButton1_Click() Dim n As Integer Dim z As Long n = WorksheetFunction.CountA(Range("b9:b23")) Range("b51:f" & 51 + n - 1).Copy Set data = Worksheets("data").Range("A1") z = data.Rows.Count Sheets("data").Select Range("A" & z + 1).PasteSpecial Paste:=xlPasteValues MsgBox "登録しました" End Sub

  • VBA sheet2データーから平均取得 sheet1へコピー

    sheet2指定セルデーターから平均 sheet1指定セルに取得したいのですがうまくいきません。 例 sheet1       sheet2 列A  列B 列C  列A  列B 列C 1  2 指定  1  2  3 1  2  3   1  2  3 1  2  3   1  2  3 sheet2・列C1~3の平均を、sheet1・指定セルに取得したいのですが Sub test() Dim r As Long, u As Long, ws1 As Object, ws2 As Object, y As Long r = 10 u = 1 Set ws1 = Sheets(1) Set ws2 = Sheets(2) y = ws1.Range("A" & Rows.Count).End(xlUp).Row Dim myAve As Long myAve = Application.WorksheetFunction.Average(ws2.Range(Cells(3, u), Cells(7, u))) ws1.Cells(r, 7).Value = "myAve" r = r + 1 u = u + 1 End Sub 変数y r u を使いfor~nextでデーターを一括取得するつもりなのですが この段階でうまくいきません。