Excel VBA 質問スレッド №2059 (未解決)

VBAで〇×で表したい

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

シート台帳のB列からシートマクロ取り込みのC列の数字が合っていればシートマクロ取り込みD列に〇、合っていなければ×で表したいです。

前回、ごんぼほりさんから以下の式を教えていただきました。
間違えて解決済みにしてしまい、質問できなくなってしまったので、再度どなたか教えていただけたら幸いです。

速度が早くなるようなマクロの式を教えていただきたいです。
ご教示お願いします!


Sub sample()
  Range("B2", Cells(Rows.Count, "B").End(xlUp)).Offset(, 5).Formula = "=IF(COUNTIF(台帳!C$2:C$200,B2),""○"",""×"")"
End Sub
 ↑
以上の式
Rows.Count, "B")
⇨このBは何を指すのか?
教えてください。

Offset(, 5).
⇨5は何を指しているのか?
教えてください。

スポンサーリンク
[返信 1] Re : VBAで〇×で表したい
投稿者 : てらてら     投稿日時 : 2024/12/04(Wed) 19:02:13
こんにちは。
速度が速くなるかどうかは知りませんが、コードの内容は以下の通りです。


Range("B2",
 Cells(Rows.Count, "B").End(xlUp)    ここは、B列で記述のある最終行
)

上記のRange全体では、B2から記述のあるB列最終行までの範囲


.Offset(, 5)   そこから列方向に5つ移動 → G列になると思います。


以下を実行すれば、どこを範囲指定しているか判ると思います。

Sub macro()
    Range("B2", Cells(Rows.Count, "B").End(xlUp)).Offset(, 5).Select
End Sub

[返信 2] Re : VBAで〇×で表したい
投稿者 : dama     投稿日時 : 2024/12/05(Thu) 14:23:06
質問について


Rows.Count, "B")
⇨このBは何を指すのか?


ExcelのシートのB列です
あまり使われませんが、Cellsは列を英語で指定することもできます
以下はどちらも2列目(B列)の一番下のセルを指定しています
cells(Rows.count,"B")
cells(Rows.count,2)



Offset(, 5).
⇨5は何を指しているのか?

右に5列ずらすことを意味しています

Offsetは位置をずらすための処理です
Offset(行,列)の形なので
行はずらさず、列だけ5ずらしてね
という意味です



速度が早くなるようなマクロの式を教えていただきたいです

これについては、やりたいことの全容が掴めていないので具体的に挙げるのは難しいです
重い原因はCOUNTIF関数だと思います


元マクロの中身についてなのですが

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

これの意味は
(B2~B列の最終データ)の範囲→右に5ずらした範囲を対象に式を書き込む
式の内容は =IF(COUNTIF(台帳!C$2:C$200,B2),"○","×")

簡単に書くと
G列に式を書き込む
となります

要するに、このマクロは「式を書き込むだけ」となっています
判定を行っているのはあくまで「シートにある関数式」です

式の中のCOUNTIF関数の計算にかかっている時間が大部分だと思われます

[返信 3] Re : VBAで〇×で表したい
投稿者 : らたたた     投稿日時 : 2024/12/06(Fri) 12:17:02
>速度が早くなるようなマクロの式を教えていただきたいです

ええと勘違いしているようなので
ループ組んでセルの内容を見ながら1個1個書き込むから遅くなるんです
加えて1つのセルに書き込むたびに、D列のVlookupが再計算されるから
マクロの式とか論外

だから、一括で書き込んだ方が単に速いという事なだけ
礼として自分でコード書いたというので、同じように書き込めばという事です結果だけ張り付ける
自分で書いたコードにそんな風に書いてありますよね??????

数式なら簡単なこんなのでいい
=IF(ISNA(E1),"×","○")
なんなら、これら数式を書き込んだセルをコピーして同じところに張り付け

質問者以外は、ここも読んだ方がいいです
https://www.239-programing.com/cgi-bin/excelvba_bbs.cgi?id=2052

[返信 4] Re : VBAで〇×で表したい
投稿者 : らたたた     投稿日時 : 2024/12/06(Fri) 12:19:07
礼として →例として

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

ステータス  :

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




( 処理日時 : 2025-01-25 12:21:13 )
タイトルとURLをコピーしました