質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

ループ処理が遅いので配列化に出来ないでしょうか?

sankichi4301
sankichi4301

総合スコア2

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

3回答

0リアクション

0クリップ

549閲覧

投稿2022/08/25 06:19

編集2022/08/25 08:55

セル通しを比較して下記のような処理を行っています。
セルの値を書き換えているので遅くなっているので
配列で処理する方法はないでしょうか?

イメージ説明

上画像が現データ 下画像がやりたい事です。
基準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

よろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Matsumon0104

2022/08/25 06:41

「セル通しを比較して下記のような処理」の内容を詳しく記載いただけますでしょうか? before, afterのような記載が見られますが、同じデータのようで、どんな処理結果を望んでいるのかわかりません。 掲載いただいたソースを確認すれば、どういった処理をしたいのかが見えてくるとは思うのですが、わざわざプログラムの処理を回答者側で追わないと質疑内容がわからないとなると、回答もつきにくいかと思います。
sankichi4301

2022/08/25 06:59

イメージを画像に変更させていただきました。
okakemetal

2022/08/25 07:25

A列からG列の最終業までを範囲指定して、2次元配列Aへ格納 同様に、I列からO列の最終行までを範囲指定して、2次元配列Bへ格納 ループ1で行数のカウンタ、ループ2で列数のカウンタをまわして 配列Aと配列Bを比較して・・・・ 比較結果を最終的にどうしたいのか読み取れませんでしたので、ここまで
sankichi4301

2022/08/25 08:56

早速の返事ありがとうございます。 再度イメージを画像に変更させていただきました。 画像したにやりたい内容を追記しました。
sankichi4301

2022/08/26 00:20

全ては載せられなかったので、一部分を載せました。 >1.ソースをみると、For x = 3 To 17になっていて、C列からP列が対象になっています。 現状はC列からP列なのですが、A列からP列をまで行いたいです。 >2.ソースをみると、比較を開始する行は4行目からになっています。 3行目も比較します。 >3.セルを比較するときに、InStrを使用しています。 ①search_strの文字列内にbase_str の文字列が含まれないならセルを右へ移動する。 です。
sankichi4301

2022/08/26 00:22

shiketaさんへ  回答ありがとうございます。 記載していないだけで、画像更新停止処理は行っています。
sankichi4301

2022/08/26 09:09

hatena19 回答ありがとうござます。 やりたいことができ、速度も体感で10の1になりました。 末端からループの使い方も勉強になりました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。