- 締切済み
エクセル マクロ Matchの使い方
前回の質問で、大変親切に回答して頂き、大変感謝しております。 でも、私自身がこの質問サイトのルールを把握していなっかたので、まだ問題が解決していないのに、親切に回答してくださった方を、ベストアンサーに選んでしまいました。 でも、まだ問題が解決していないので、再度質問をさせて頂きます。 私のやりたい事は下記のような事です。 現金出納帳シートのA列(大科目)B列(小科目)の文字列の中の 大科目(たとえば会費・入会金)小科目(たとえば会費) この二つの文字が、決算シートのA列(大科目)の範囲のB列(小科目)の同じ文字と一致したときに 現金出納帳シートのB列(小科目)の一致した文字の行の4列目の数値を決算シートのB列(小科目)の同じ文字の行の右隣のセルに、出納帳に入力した数値を入れたいのです。 前回の回答を参考に、下記のようなマクロを試してみたのですがどうしてもうまくいくません。 Dim s Dim h As Variant Private Sub Worksheet_SelectionChange(ByVal Target As Range) h = Sheets("決算").Range("B3:B103").Value For Each ws In Worksheets s = ws.Index Next ws For K = 5 To s Step 1 Set KaMoku = Sheets(K).Range("D3:J103").Columns(1) Next K If IsError(Application.Match(h, KaMoku, 0)) = False Then この用にするとここでエラーになります。 MyRNo = Application.WorksheetFunction.Match(h, KaMoku, 0) 実行時エラー方が一致しません MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) N = N + MyUNo Sheets("決算").Cells(3, 5).Value = N End If End Sub もう一例 Dim s Dim h As Variant Private Sub Worksheet_SelectionChange(ByVal Target As Range) h = Sheets("決算").Range("B3:B103").Value For Each ws In Worksheets s = ws.Index Next ws For K = 5 To s Step 1 Set KaMoku = Sheets(K).Range("D3:J103").Columns(1) Next K If IsError(Application.Match(h, KaMoku, 0)) = False Then では、.WorksheetFunctionがいけないのかと思って、この用にすると、アプリケーション定義と出ます。 MyRNo = Application.Match(h, KaMoku, 0) MyUNo = KaMoku.Cells(MyRNo).Offset(, 4) 実行時エラー アプリケーション定義またはオブジェクトの定義エラー N = N + MyUNo Sheets("決算").Cells(3, 5).Value = N End If End Sub 素人の私には皆目見当がつきません、どうすれば良いのですか。 教えてください、どうかよろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- TAKA_R
- ベストアンサー率32% (26/79)
- piyo_dansyaku
- ベストアンサー率75% (12/16)
- Rilakkuma_san
- ベストアンサー率32% (33/101)
- Rilakkuma_san
- ベストアンサー率32% (33/101)
- Rilakkuma_san
- ベストアンサー率32% (33/101)
- Rilakkuma_san
- ベストアンサー率32% (33/101)
- Rilakkuma_san
- ベストアンサー率32% (33/101)
お礼
有り難うございます。 説明付きの丁寧なマクロを書いて頂き有り難うございます。 このマクロも参考にして勉強させていただきます。
補足
現金出納帳にこの用に書いてみました。 Dim h Dim s As Long, k As Long, v As Long, a As Long, b As Long Dim kamoku As String Dim ws1 As Worksheet, ws2 As Worksheet Private Sub Worksheet_Change(ByVal Target As Range) Set ws1 = Worksheets("決算") Set ws2 = Worksheets("現金出納帳") 'シート名は正しく入れなおして s = ws2.UsedRange.Rows.Count h = ws1.Range("c3:c103") 'ws1.Activate '書き込むシートは選択されていないと書くことができないので For k = 3 To s If ws2.Range("e" & k) <> "" Then '現金出納の小科目が空欄だとエラーになるだろうから kamoku = ws2.Range("e" & k) v = Application.Match(kamoku, h, 0) a = ws1.Range("e" & 2 + v) '&の後ろは3+v-1を計算した数、aは決算の科目の隣のセルの数字 b = ws2.Range("h" & k) '現金出納の数字の入っている列がF(?) If v <> 0 Then a = a + b ws1.Range("e" & 2 + v).Value = a End If End If Next End Sub 現金出納帳 月 日 大科目 小科目 摘要 金額 残高 会費・入会金 会費・入会金 2000 2000 決算 大科目 小科目 合計金額 会費・入会金 会費・入会金 2000円(これはうまくいきました) 現金出納帳 月 日 大科目 小科目 摘要 金額 残高 会費・入会金 会費・入会金 2000 2000 会費・入会金 会費 2000 この時点で型が一致しませんと出ます。 決算 大科目 小科目 合計金額 会費・入会金 会費・入会金 2000円 会費 どのようにすればいいのですか、教えてください。