セル通しを比較して下記のような処理を行っています。
セルの値を書き換えているので遅くなっているので
配列で処理する方法はないでしょうか?
上画像が現データ 下画像がやりたい事です。
基準2行目のA列からG列と3行目のA列からG列を順番に比較し不一致だったらセル値を右へ一つ移動する。
基準2行目のA列からG列と4行目**のA列からG列を順番に比較し不一致だったらセル値を右へ一つ移動する。
Sub test()
Dim ws As Worksheet
Set ws = Sheets("test1")
Dim last_row, x, y As Long last_row = ws.Cells(Rows.Count, 1).End(xlUp).Row x = 3 y = 4 Dim base_str, search_str As String Do While y <= last_row For x = 3 To 17 base_str = Cells(2, x) search_str = Cells(y, x) If InStr(search_str, base_str) = 0 Then Range(ws.Cells(y, x), ws.Cells(y, 17)).Offset(0, 1).Value _ = Range(ws.Cells(y, x), ws.Cells(y, 17)).Value ws.Cells(y, x).Value = "" End If Next x y = y + 1 Loop
End Sub
よろしくお願いいたします。
「セル通しを比較して下記のような処理」の内容を詳しく記載いただけますでしょうか?
before, afterのような記載が見られますが、同じデータのようで、どんな処理結果を望んでいるのかわかりません。
掲載いただいたソースを確認すれば、どういった処理をしたいのかが見えてくるとは思うのですが、わざわざプログラムの処理を回答者側で追わないと質疑内容がわからないとなると、回答もつきにくいかと思います。
イメージを画像に変更させていただきました。
A列からG列の最終業までを範囲指定して、2次元配列Aへ格納
同様に、I列からO列の最終行までを範囲指定して、2次元配列Bへ格納
ループ1で行数のカウンタ、ループ2で列数のカウンタをまわして
配列Aと配列Bを比較して・・・・
比較結果を最終的にどうしたいのか読み取れませんでしたので、ここまで
早速の返事ありがとうございます。
再度イメージを画像に変更させていただきました。
画像したにやりたい内容を追記しました。
全ては載せられなかったので、一部分を載せました。
>1.ソースをみると、For x = 3 To 17になっていて、C列からP列が対象になっています。
現状はC列からP列なのですが、A列からP列をまで行いたいです。
>2.ソースをみると、比較を開始する行は4行目からになっています。
3行目も比較します。
>3.セルを比較するときに、InStrを使用しています。
①search_strの文字列内にbase_str の文字列が含まれないならセルを右へ移動する。 です。
shiketaさんへ
回答ありがとうございます。
記載していないだけで、画像更新停止処理は行っています。
hatena19
回答ありがとうござます。
やりたいことができ、速度も体感で10の1になりました。
末端からループの使い方も勉強になりました。
回答3件
あなたの回答
tips
プレビュー