2つの列を個別に完全にループする


-1

関連する質問はこちら

長さの異なる2列があります。

以下のDo Whileループでは、

Do While main.Offset(i, 0).Value <> "" Or main.Offset(i, 1).Value <> ""

ORを使用すると、大量の無関係なデータ(sheet2の名前/タグと一致しないなど)が生成されるため、ANDに変更すると、両方の列が同じ行で終わる場合にのみ完全に動作します。(重複はありますが、今は私の主な関心事ではありませんでした)

Do While main.Offset(i, 0).Value <> "" And main.Offset(i, 1).Value <> ""

しかし、論理演算子「And」を使用すると、途中で停止します(列の1つが他の列より短い場合。ある列が別の列より短い場合でも、データを取得する方法について専門家に光を当てることはできますか?

両方のステートメントの間に括弧を追加するか、列の1つを別のシートに配置するか、入れ子になったdo whileループを作成しようとしましたが、データは同じままです。以下のコードも試してみましたが、sheet2の "Ken、summer、wendy"のような無関係なデータがすべて表示されます。

Do While (main.Offset(i, 0).Value <> "" And main.Offset(i, 1).Value <> "") Or (main.Offset(i, 0).Value <> "" And main.Offset(i, 1).Value = "")

だから私はAnd演算子を置き換えるために何を使用でき、正しい結果が得られるのか疑問に思っていましたか?

ああこれがXsheet、Sheet1、Sheet2です。
2枚以上の写真を投稿することはできないため、すべてを1つにまとめました。上に示した写真のように、BelleはXsheetにあり、アクティブなケースでもあります。したがって、3355はSheet2にあるはずです。4987の重複がある別の欠陥。

*最新のスクリーンショットを追加しました

私はプログラミングが初めてであり、不必要な間違いを犯した場合は謝罪します。アドバイスをありがとう。


@ejbytesで述べたように、あなたが望むものを理解することは困難です。私にとっては、自然な音声でのあなたの基準とあなたのコードは同じ論理に従わないようです。データと基準で何をしたいのか説明してください。ループまたはif節にいくつかの追加の基準が必要だと思います。
IQV

ここでの実際の目標は何ですか?ループをネストできますが、外側は早く終了します。したがって、おそらく長さを事前に確認し、その情報に基づいて処理方法を決定する必要があります。
セス

こんにちは@IQV、自分自身をうまく説明できなかったことをおizeび申し上げます。言い訳はできませんが、私はまだ英語を母国語とする人ではありません。ejbytesが述べたように、「マスターリスト(Xsheet)の名前または説明がデータシート(Sheet1)で見つかり、それもアクティブな場合、新しいシートにコピーする」、それが私が取得しようとしているものです。しかし、より大きなデータと異なる長さの2つの列(名前と説明)に出くわしたので、質問で述べたように問題があります。+スクリーンショット
ExcelNovice

回答:


0

あなたのdo-while-loopはあなたのニーズに合っていないと思います- ORまたはであるかどうかに関係なくAND。私が理解しているように、XSheetの2つの列を次々に処理できます。私にとっては、A列とB列のデータは独立しているようです。

したがって、最初に名前がSheet1の列Eにあるかどうかを確認し、次にデータをSheet2にコピーします。その後、説明がSheet1の列Fにあるかどうかを確認し、データをコピーします。

ただし、列「description」にあるデータを挿入する前に、これらの行をすでにコピーしているかどうかを確認する必要があります。したがって、descでヒットした場合は、列Aの「コード」を取得し、それが既にSheet2にあるかどうかを確認します。そうであれば、何もしません。そうでなければ、データをコピーします。

そしてもちろん、ヒットが「アクティブ」かどうかを常に確認する必要があります。

編集: do-while-loop自体は正しいです。ただし、ANDまたはの条件ORは必要ありません。上記のチェックは両方です

Do While main.Offset(i, 0).Value <> ""

colunm Dの場合 列E


こんにちは、@ IQV、ありがとう。はい、それは私がやりたいことであり、両方の列は独立しています。そのため、最初に名前列をチェックし、次に以下を確認するメソッドを検索します。do-whileループが適合しない場合、私のニーズを満たすことができる他のオプションは何ですか?
ExcelNovice

明確にするために回答を編集しました。
IQV

こんにちは@IQV、私は以前この行で試しました。動作していません。出力スクリーンショットをアップロードしました。そう、だから一番近いのはAndである。奇妙なことに、私は別の条件で述べることで解決できると思った。Do While(main.Offset(i、0).Value <> "" And main.Offset(i、1).Value <> "")または(main.Offset(i、0).Value <> "" And main.Offset(i、1).Value = "")。しかし運がない
-ExcelNovice
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.