0

私はコーディングにかなり慣れていないので、簡単に説明します。Excelで処理する非常に大きなデータセットがあります。2つのスプレッドシートから、データを一緒にプールしました。

したがって、各セットには4つの列があります。1つの列には、データポイントの英数字の名前が含まれています。(例、NC000023、NC000224など)。一致する英数字の名前を1つのシートから別のシートに並べたい。最初に頭に浮かんだのは、両方の列をアルファベット順に並べ替えることでした。これは最も一致していました。ただし、あるシートから別のシートにいくつかのデータポイントが欠落しているため、データ全体にいくつかのフレームシフが発生します。

これらのフレームシフトを修正するために、次のマクロを作成しました。

1つ目は、2つの列が特定の行で一致するかどうかを判断することです。

Sub Matching()
'
' Macro1 Macro
'
' Keyboard Shortcut: Ctrl+m
'
    Range("I2").Select
    ActiveCell.FormulaR1C1 = "=EXACT(RC[-4],RC[-5])"
    Range("I2").Select
    Selection.AutoFill Destination:=Range("I2:I40028"), Type:=xlFillDefault

これにより、D3がE3と一致するかどうかに応じて、TRUEがFALSEの新しい列が表示され、D550はD550と一致します。

次に、FALSEでI列のセルを探し、その一致を修正するために削除する必要がある4つのセルを判別します。このコードは、原因を切り取り、邪魔にならないように貼り付け、下の行を上に移動してその場所に配置するように設計されています。

Sub RedCut()
'
' Macro2 Macro
' Shortcut CTRL + r

'
    ActiveCell.Offset([0], [-3]).Select
    Range(ActiveCell, ActiveCell.Offset(0, 3)).Cut
    ActiveCell.Offset([0], [12]).Select
    ActiveSheet.Paste
    ActiveCell.Offset([0], [-12]).Select
    Range(ActiveCell, ActiveCell.Offset(0, 3)).Select
    Selection.Delete Shift:=xlUp

End Sub

そして他のために

Sub Bluecut()
'
' Bluecut Macro
'
' Keyboard Shortcut: Ctrl+b

  ActiveCell.Offset([0], [3]).Select
    Range(ActiveCell, ActiveCell.Offset(0, -3)).Cut
    ActiveCell.Offset([0], [9]).Select
    ActiveSheet.Paste
    ActiveCell.Offset([0], [-9]).Select
    Range(ActiveCell, ActiveCell.Offset(0, -3)).Select
    Selection.Delete Shift:=xlUp
'
End Sub

これらのマクロを作成して、次の手順を実行してきました。

  1. Ctrlキーを押しながらMキーを押すと、一致するタイトル行のTRUEまたはFALSEのリストが呼び出されます。
  2. FALSEで行を探します。削除する必要があるのは、データセット1またはデータセット2の4つのセルかどうかを判別します
  3. もう一度CTRL+Mを押して、その行を修正します。

私の質問は、「列Dの対応するセルが左下の1つのセルと同一である場合、列IにFALSEが含まれる行に対してサブブルーカットを実行するか、行に対してサブレッドカットを実行する」というコードを記述できるかどうかです。列Dの対応するセルが右上の1つのセルと同一である場合、列にFALSEが表示されます。」

申し訳ありませんが、これは私が入力を開始したときに説明するのがはるかに簡単に思えました。このコードのほんの一部でも書くためのヒントであっても、あなたが私に与えることができるどんな助けにも感謝します。

前もって感謝します。

4

1 に答える 1

1

for/next または for/each ループがニーズに合うはずです。

一緒に簡単なスローとして、私はこのようなことをして、あなたのマッチングを実行します:

Dim I as range
for each I in Range("I2:I40028").Cells
     I.select
     if activecell.offset(0,-5)=activecell(1,-6) then 
         bluecut
     else
         redcut
     end if
next

もちろん、各セルを選択するのではなく、すべてのテストを内部で行います。これは、application.ScreenUpdating=Falseすべての画面更新を表示する必要がなくなったとしても、はるかに高速に実行されるためです。

于 2013-01-21T18:51:51.440 に答える