2016-10-17 27 views
0

VBAでインターンシップを始めたばかりで、現在のプロジェクトでは少し問題があります。私はそれがオンラインで何もないので、これは私が見ていない簡単な修正だと確信しています。Excel VBAの範囲内でテーブル内のセルを操作する

私のワークシートは、リストオブジェクトの行に2つの入力値を取り、マッピングから関連する値を同じ行の他の列に返します。

私はそれだけではすべての行の各を通じて起こっている私はこのように、この

If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _ 
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then 
    For Each lr in lo.ListRows 
     rowCount = rowCount + 1 
     FindBankInfo lo, loMap, loMap2, rowCount 
    Next lr 
End If 

のように、この作業を行うことができます

If Not Intersect(Target, lo.ListColumns("Document Type").Range) Is Nothing Or Not Intersect(Target, lo.ListColumns("Bank").Range) Is Nothing _ 
Or Not Intersect(Target, lo.ListColumns("Transit Type").Range) Is Nothing Then 
'rowCount in the sub is used as lo.listrow(rowcount), it's the table row I am working with 
    FindBankInfo lo, loMap, loMap2, rowCount 
End If 

ユーザーが変更された行に対するFindBankInfoサブを実行したいです何かが変更された時刻と、既にサブミットされている場合はサブメニューでスキップします。しかし、これは気が利くと非効率的で、人口が多い行の間で空白の行をチェックしているときに行がたくさんあると遅くなるので、空白で終わることはできません。

私が必要とするのはターゲットです。どのようにターゲット範囲を関連するリストオブジェクト範囲に変換し、リストオブジェクトの行番号を取得できますか?

Target.ListObject私にはテーブルに適切な範囲が与えられていますので、それに触れることができ、対話したい範囲を正確に取得できますが、行番号はシートの行数と関連しています。私は本当にいくつかの指導に感謝します、ありがとう。

+0

残りのコードは表示されませんが、target.rowをチェックアウトすると正確にはわかりません... – MacroMarc

+0

私は後でその質問を編集する必要があります。 Target.rowに関しては、それは私に絶対行を与えますが、テーブルに関連する行は与えません。私のテーブルがA5で始まるならば、それをもっと明確にするために、テーブルを数えているテーブルの2番目の行はA7です。 Target.rowは私に7を与えます。しかし、lo.Listrow(インデックス)では7ではなく、インデックスは2になります。明快さの欠如について再度申し訳ありませんが、私が帰るときに編集します。 – KlRod

+0

あなたの 'FindBankInfo'はサブルーティングのようですが、簡単に関数に変更できると思います。それをUDFとして使用して、シート全体をスクリプトで実行するのではなく、適切な列に数式として配置し、探している行を見つけて値を書き込むのはなぜですか? – nbayly

答えて

0

サブルーチンをUDFに変換し、テーブルの式として使用します。

関連する問題