別のワークシートで実行でき、以下のデータを参照できる式を考え出そうとしています。
基本的に、D の各セルについて上向きにチェックしたいのですが、「請求書」という文字列が見つかったら、上の次の行と列 B を選択します。基本的に、毎回会社名を見つけることになります。ご覧のとおり、各会社のレコードの行数は異なる場合があります。
もっと簡単に言えば、数式は列 B で機能し、文字列 "Status" の最初の出現のすぐ上にある文字列を返すことができます。
これがどれほど複雑かは嫌いですが、受信しているデータ形式を制御することはできず、ソースはそれを変更することを拒否しています.
元データ
A B C D
1 ABC Widgets, Inc.
2 Account Status Date Invoice
3 1423 Open 4/25/2011 123748
4 1423 Closed 5/1/2011 432741
5 1423 Open 5/2/2011 522211
6
7 XYZ Sprockets, Inc.
8 Account Status Date Invoice
9 3222 Open 5/3/2011 529999
10
完成データ
A B C D E
2 Account Status Date Invoice Client
3 1423 Open 4/25/2011 123748 ABC Widgets, Inc.
4 1423 Closed 5/1/2011 432741 ABC Widgets, Inc.
5 1423 Open 5/2/2011 522211 ABC Widgets, Inc.
9 3222 Open 5/3/2011 529999 XYZ Sprockets, Inc.
ヌッチ、
あなたの VBA コードを正しく動作させることはできませんが (コメントを参照)、「ステータス」の最初の出現を見つけて上の 1 セルをオフセットするこのコードを思いつくことができました。これは本質的に私がしようとしていることですが、フォーミュラ形式です。
Sub findFirstStringAbove()
'
Cells.Find(What:="Status", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase _
:=False).Offset(-1, 0).Select
End Sub