[[20180428233458]] 『データを入力したら読込みさせるマクロ』(右近) >>BOT

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

 

『データを入力したら読込みさせるマクロ』(右近)

お尋ねいたします。
以下のマクロは、以前ご教授いただいたものです。
データーベースとして登録したデータを読み込みをさせるものです。
読込みのボタンをつくっておいて、それを押すと読込みができます。
これについて、教えていただきたいのですが、
例えば、C2セルに数字を入力した時点でデータを読込みさせるには、どこを修正する必要があるでしょうか。ご教授ねがいます。

 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

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


 リクエスト内容に応えるとすれば、
 イベントプロシージャというものを使うことになるでしょう。
 例えば、下記参照。
 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html

 で、今のコートを活かすには、シートモジュールに以下のようなコードを書いてみては?
 Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count > 1 Then Exit Sub
     If Target.Address <> "$C$2" Then Exit Sub
     If Target.Value <> "" And IsNumeric(Target.Value) Then
         Application.EnableEvents = False
         Call Posting_Output
         Application.EnableEvents = True
     End If
 End Sub
 (なお、提示のコードは見ておりません。)

 ただ、イベントプロシージャにするより、
 意識的にマクロ実行したほうがよいと感じます。

(γ) 2018/04/29(日) 07:11


お邪魔します

 >      MsgBox "日付が未入力なので読込できません。"
 >      Exit Sub

とか

 >     MsgBox "該当の日付のデータがありません。"
 >      Exit Sub

の場合、日付を入力しなおしますか。
その際には、ボタンで読み込むのでしょうか。

 > sh1.Range(v(2, 2))

それとも、v(2, 2)が、「C2」なのでしょうか

(マナ) 2018/04/29(日) 10:17


みなさん、ありがとうございます。
マナさんからのご質問は、v(2,2)がC2です。
(右近) 2018/04/29(日) 10:28

そのコードの出典を教えてください。
正常に機能しているのですか?
また、当方のコメントへの受け止めを
明記してください。
(γ) 2018/04/29(日) 16:50

ボールはわたしにあるのかな?
本当に邪魔しただけで、コード修正については考えていませんでした。
もし、待っていらしたのなら、ごめんなさい。

オリジナルは、↓のsyさんのコードですよね。

[[20170204150113]] 『データを蓄積したい。』

データを書き込むときのことも考慮すると
現在のボタンのクリックで実行のままが、よいかも知れません。

(マナ) 2018/05/03(木) 10:42


回答ではなく便乗質問失礼します。
    Set sh1 = Sheets(sh1Name)
    Set sh2 = Sheets(sh2Name)
    Set sh3 = Sheets(sh3Name)

これって機能するんでしょうか?
sh1Name、sh2Name、sh3Name がモジュールレベルなどで変数や定数として定義されていれば問題ないとおもいますが、質問文からはそれが読み取れないので、私が知らないだけで実はなんかの予約語だったりするんでしょうか?

Excel2007で「Option Explicit」つけてテストすると、変数が定義されてないってExcel君に怒られるんですが・・・
(もこな2) 2018/05/03(木) 11:50


私も目でみただけで動かしていませんが、OneWayって何?と思いました。
モジュールレベルの定数定義がされている模様。
 
最初のスレッドを拝見しました。
そのうえでの感想ですが、
イベントプロシージャの提案は取り下げます。
(値の修正や消去などに伴って何が起きるかわかりません。危険です。)
 
コード提供するまでのご苦労を拝見すると、
今はなにもしないことが得策だと思います。
 
少なくとも、他人に頼っている段階での機能追加は、
よほどの障害が発生しているのでも無い限り
やめたほうがよいと思います。(失礼を承知で申し上げました。)

(γ) 2018/05/03(木) 13:32


コメント返信:

[ 一覧(最新更新順) ]


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