-1

次のようなシート A があります。

Name     Phone Number  Title         Id
Ron      08900108      Carpenter     440
Bob      48951230      Painter       830
Ron      14890560      Carpenter     561
Steve    98023023      Carpenter     112

Carpenter と呼ばれる別のシート (および同じフォーマットの Painter と呼ばれる別のシート)

Name     Phone Number  Id     Comment
Ron      08900108      440    Cool dude
Bob      48951230      830    Less Awesome Dude

A の行を Carpenter と Painter という名前のシートにコピーし、名前、電話番号を既存の ID と同じ行に配置するか (たとえば、誰かが番号を変更した場合)、新しい ID の場合は新しい行を追加します。 . 私は既存のコメントを保持したい。

私は VBA の経験がまったくないので、問題を解決するコードを提供するか、どの関数 (?) やその他の言語構造を使用するか、それらに関する情報をどこで見つけることができるかについてのヒントを提供してください。

A の行を繰り返し処理し、それを何らかの方法で正しいシートに送信する配列にコピーする必要があると思います。

4

1 に答える 1

1

まず、通常はデータベース関連の操作に Excel を使用しており、Access を使用して簡単に実行できるという事実を考慮してください。Excel がデータシートとして使用されているという事実にますます気づきます。状況によってはこれが実用的な場合もありますが、Excel の主な機能はスプレッドシートであり、データベースではないことを忘れないでください。

それでも Excel でこれを行う場合は、これを行う方法がたくさんあります。

1) ソース範囲と宛先範囲を配列にロードします。ロードされた 2 つの配列の比較を開始し、自由に操作を実行します。新しい ID を設定する必要がある場合は、配列を動的に拡張し、ubound(array) を使用して配列のサイズを取得できます。配列のサイズを入力パラメーターとして使用して、範囲を動的に設定することもできます。あなたのケースでそれをどのように行う必要があるかを理解するのはあなた次第です。

2) レコードを表すインスタンスのディクショナリを返す各シートのカスタム自立クラスを作成します。ディクショナリはキー プロパティの使用を許可します。これは、さらなる操作のベースにもなります。かなり奇妙な方法に思えるかもしれませんが、機能しますが、大量のデータには使用しません)。利点は、このクラスがかなり柔軟で、非常に限られたコードで後で簡単に再度呼び出すことができることです。

3) ADODB を使用して、シートに対してクエリを実行します (ライブラリを参照することを忘れないでください)。ADODB では、シートの最初の行がフィールド ヘッダーと見なされるテーブルとして Excel シートを扱うことができます。

これらの方法はどれも最終的にはうまくいくでしょうが、あなたは自分自身でそれを難し​​くしています. 前述したように、外部キーに基づいてリレーショナル テーブルを作成できるため、Access の方がはるかに優れています。Excel でこれらのデータが必要な場合でも、ADO を使用して Excel - Access 間の接続を作成できるため、問題ありません。

これを返信として申し訳ありませんが、私は Stack Overflow にあまり参加していないため、コメントを投稿できません。私はあなたのためにコードを書くことはできませんが、これがあなたの役に立つことを願っています.

于 2012-06-27T10:20:47.520 に答える