[[20170503090537]] 『「「データを蓄積したい。」[初心者] について」』(トランプ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『「「データを蓄積したい。」[初心者] について」[トランプ] について』(トランプ)

投稿
[[20170325225457]] 『「データを蓄積したい。」[初心者] について』(トランプ) 
について...

皆さまにお力添えいただいた上記のマクロを活用して、別のデータを作成中なのです。
基本的なつくりは同様で、キーとなるものは、西暦と月の組合せです。
例)201705
このキーは、Sheet1のB5セルにあります。
これで、データの登録、クリアは実行できるのですが、読込の際に以下のようなエラーメッセージが出てしまいます。
「実行時エラー'1004': WorksheetFunction クラスの Match プロパティを取得できません。」
どのように修正が必要か分かりません。
ご教授のほど、よろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


回答ではありません。

エラーがでた現在のコードを提示したほうがよいです。
どのように改変したかわからないのに、回答しようがないです。

(マナ) 2017/05/03(水) 10:17


ありがとうございます。
ちなみに改変はしていません。以前、様々な方々にご教授いただいたコードのままです。
これを他のデータに流用させていただいている次第です。
読込しようとすると、以下の←部分の行にデバックが発生します。
どうぞよろしくお願いいたします。

 Sub Posting_Output()
 'データベースのデータを読込
    Dim sh1 As Worksheet
    Dim sh2 As Worksheet
    Dim sh3 As Worksheet
    Dim v As Variant
    Dim row1 As Long
    Dim i As Long

    '変数の設定
    Set sh1 = Sheets(sh1Name)
    Set sh2 = Sheets(sh2Name)
    Set sh3 = Sheets(sh3Name)
    v = sh3.Range("A1").CurrentRegion.Value

    'データの存在チェック
    If sh1.Range(v(2, 2)).Value = "" Then
        MsgBox "日付が未入力なので読込できません。"
        Exit Sub
    End If
    If WorksheetFunction.CountIf(sh2.Range("A:A"), sh1.Range(v(2, 2))) Then
        row1 = WorksheetFunction.Match(sh1.Range(v(2, 2)), sh2.Range("A:A"), 0) ←この行がデバック
    Else
        MsgBox "該当の日付のデータがありません。"
        Exit Sub
    End If

    'データの転記
    For i = 2 To UBound(v, 1)
        If v(i, 4) <> OneWay Then
            sh1.Range(v(i, 2)).Value = sh2.Cells(row1, v(i, 3)).Value
        End If
    Next i

 End Sub
(トランプ) 2017/05/03(水) 10:22

横から失礼します。
アンマッチのときのMatchの振る舞いの話でしょう。

https://www.moug.net/tech/exvba/0100035.html
にあるように Application.Matchをつかったほうが、
対象なしの場合のハンドリングが楽です。
参考にしてください。
あえて、修正コード例は書きません。

(γ) 2017/05/03(水) 10:26


γさん

すみません。
こちらでも教えてください。

 >If WorksheetFunction.CountIf(sh2.Range("A:A"), sh1.Range(v(2, 2))) Then

これで、対策になっていると思っていたのですが、
他に、どのようなケースでエラーが考えられるのでしょうか。

(マナ) 2017/05/03(水) 11:10


 取り敢えずコード実行中の、v(2, 2)の中身はどうなってますか?
 またデータベースのA列にキーコードが格納されてるんですか?

 もし変数の中身の見方が分からない場合、デバッグの仕方は分かりますか?
 以下のページなどを熟読してデバッグの仕方を習得して下さい。
http://www.239-programing.com/excel-vba/basic/basic021.html
http://www.excel-excel.com/vbachair/step1-7.html
http://www.tipsfound.com/vba/01010

(sy) 2017/05/03(水) 11:12


マナさんへ。
滅相もありません。
すみません。コードは見ていませんでした。(WorksheetFunction.Matchのところだけしか)
どういう原因なんでしょうね。ちょっと分かりません。
いずれにせよ、エラー対応が必要になっています、という(誰にも自明な)こと
しか言っていなかったようです。

(γ) 2017/05/03(水) 11:20


皆さん、ありがとうございます。
今、母の病院に来ているもので、後ほど返信させていただきます。

(トランプ) 2017/05/03(水) 13:02


 ちょっと気になる事があったので試してみました。

 201705 こう言う数字データを扱う時は注意しないといけないのが、片方が文字で片方が数値の時は、
 COUNTIFは一致と判断されますが、MATCHの方は不一致と判断されます。

 キーの格納されたデータベースのA列や、帳票の方のB5セル?の書式を確認してみて下さい。

(sy) 2017/05/03(水) 15:25


返事が遅くなってしまい、すみません。
みなさん、ありがとうございます。
syさんの最後のご指摘どおり、201705がA列が数字、B5セルが文字列で書式が異なっておりました。
書式をどちらも文字列に統一したところ、うまく読込ができました。
ご指摘どうもありがとうございました。

このデータを基に複数値で検索する方法について、再度ご質問させていただきたいと思います。

(トランプ) 2017/05/03(水) 18:07


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.