Excel VBA 質問スレッド №2052 (解決済)

VBAで〇×で表したい

投稿者 : とわこ     投稿日時 : 2024/11/27(Wed) 15:58:31     OS : Windows 10     EXCEL : Office 365
質問させていただきます。どうぞよろしくお願いいたします。

シート台帳のB列から他シートC列の数字が合っていればD列に〇、合っていなければ×で表したいです。
下記は私が作成したものですが、速度が重くて遅くて使い物になりません。
もっとシンプルで速度が早くなるようなマクロの式はないでしょうか?

ご教示お願いします!


Range("D2:D200").Formula = "=VLOOKUP(台帳!B5,C2:C200,1,FALSE)"
Range("D1:D200").Copy
Range("E1:E200").PasteSpecial _
Paste:=xlPasteValues, _
Operation:=xlNone, _
SkipBlanks:=False, _
Transpose:=False

Dim i As Long
For i = 1 To Cells(Rows.Count, "E").End(xlUp).Row
If Cells(i, "E").Text = "#N/A" Then
Cells(i, "F").Value = "×"
Else
Cells(i, "F").Value = "○"
End If
Next i

スポンサーリンク
[返信 1] Re : VBAで〇×で表したい
投稿者 : らたたた     投稿日時 : 2024/11/28(Thu) 07:13:07
F列もD列と同じようにすれば良いんでない

[返信 2] Re : VBAで〇×で表したい
投稿者 : ごんぼほり     投稿日時 : 2024/11/28(Thu) 15:09:57
■Range("D2:D200").Formula = "=VLOOKUP(台帳!B5,C2:C200,1,FALSE)" について、
 ・D2へ入力する関数式が、B5を参照しているが、このずれはなにか
 ・C2:C200は絶対参照にすべきではないか(意図的なのかわからず)

■For i = 1 To Cells(Rows.Count, "E").End(xlUp).Row について
 ・iが2からではなく1から始まっているのはなぜか
 ・処理の最終行をCells(Rows.Count, "E").End(xlUp).Row としているが 200決め打ちで良くないか

など、よく意図が分からない部分がおおいです。

速度については、コードを見る限り、この程度の処理で遅いというのはあまり無いことです。
関数の再計算をOFFにするなどすると改善するかもしれませんが原因が分からないのでなんともいえません

速度が改善するかどうかはわかりませんが、シンプルにしてみました。
B列とE列では同じ行にある値に対して処理しています。
(E2は、B2の値を台帳!C2:C200から探してあれば○なければ×)

Sub sample()
  Range("B2", Cells(Rows.Count, "B").End(xlUp)).Offset(, 5).Formula = "=IF(COUNTIF(台帳!C$2:C$200,B2),""○"",""×"")"
End Sub

[返信 3] Re : VBAで〇×で表したい
投稿者 : とわこ     投稿日時 : 2024/12/04(Wed) 16:53:55
■[返信 1] らたたたさん(2024-11-28 07:13:07)の記事
> F列もD列と同じようにすれば良いんでない

ご回答ありがとうございます。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2024-12-07 22:59:22 )
タイトルとURLをコピーしました