No.3ベストアンサー
- 回答日時:
こんばんは、
簡単そうな処理の様に思われますが、その前に考えなくてはいけない事があるように思います。
>データ量が多い のであれば、ボタンを押下処理で行う場合、全データを処理し直す事になるのではないでしょうか?それともフラグが空白のみを判断して処理をするのでしょうか?または、ボタンでデータ自体を追加する処理がありその処理に加える構想でしょうか?
いずれにしても、多少ファイルが重くなるにしても数万データあるのなら、
照合元でも照合先でも一意になるデータセルを作れれば、(例えばC列、AA列でも良いですが、数式が重ければ、VBAで値でも)VBAの処理の負担が減ると思います。ただ、VBAの中で作っても良いのですが、、
要望とは、違う形ですが色々なものを?入れた最小単位のサンプルです。
サンプルは、対象のシートモジュールに書きます。
図の構成の時、F列のセルをダブルクリックするとそのセルに結果が出力されるものです。
IFの左辺は配列にしています。
また、仮にC列にA列&B列の値があった時の処理を参考として追記しています。Target.Offset(, -2) は、D列、Target.Offset(, -1) は、E列を示しているので 全行に対して実行する場合は、Cells(ループ変数,"D")のようにすれば、処理できると思います。
2重ループにする場合は、GoTo TrueEndをExit Forに変え、一致した時にいち早く次の処理に移るようにします。出来るのであれば、データを降順などに並び替えて一致を探すループ回数を減らすように考えると良いと思います。
悪い癖で長文になってしまいました。参考程度で
Private Sub Worksheet_BeforeDoubleClick _
(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Columns(6)) Is Nothing Then Exit Sub
Cancel = True
Dim Ary
Dim i As Long, LsRow As Long
LsRow = Cells(Rows.Count, "E").End(xlUp).Row
Ary = Range(Cells(1, "A"), Cells(LsRow, "B"))
Application.ScreenUpdating = False
For i = 1 To UBound(Ary, 1)
If Ary(i, 1) & Ary(i, 2) = Target.Offset(, -2) & Target.Offset(, -1) Then
Target = ""
GoTo TrueEnd
Else
Target = 1
End If
Next
TrueEnd:
Application.ScreenUpdating = True
End Sub
C列に書き出してあればFor~Nextは不要
If Application.CountIf _
(Columns(3), Target.Offset(, -2) & Target.Offset(, -1)) > 0 Then
Target.Value = ""
Else
Target.Value = 1
End If
No.7
- 回答日時:
こんばんは
>関数でフラグを付与させることも考えましたが、
>データ量が多い為処理が遅くなることを懸念し
どのくらいのデータ量か不明ですが、以下の関数利用の方法で試してみたところ、A:B列は10000行、D:E列は1000行のデータ量で、私の環境(←遅くはありませんが)では、約0.2秒で処理が終わりました。
環境にもよるので何とも言えませんが、上記データ量程度であれば、数秒かからずに終わるのではないでしょうか?
以下、ご参考まで。
Sub Sample_12187689()
Dim rng As Range, fn As String
Const f = "=IF(COUNTIFS(@1,D2,@2,E2),"""",1)"
Application.ScreenUpdating = False
Set rng = Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
fn = Replace(Replace(f, "@1", rng.Address), "@2", rng.Offset(, 1).Address)
Set rng = Range(Cells(2, 4), Cells(Rows.Count, 4).End(xlUp)).Offset(, 2)
If rng(1).Row < 2 Then Exit Sub
rng.FormulaLocal = fn
rng.Value = rng.Value
Application.ScreenUpdating = True
End Sub
※ 最初の f が関数文字列(F2セル用)ですので、これを変更することで内容の変更も可能です。
@1にはA列の範囲の絶対参照が、@2にはB列の範囲の絶対参照が入ります。
>No6様
Filter利用は面白いアイデアですが、B、E列の比較も必要と思われますので、もう一工夫必要になりそうな気がします。
No.6
- 回答日時:
こんなのが面白いかな!!
Sub sample()
With Range("F2:F" & Cells(Rows.Count, "E").End(xlUp).Row)
.Value = "1"
Range("D1").CurrentRegion.AdvancedFilter _
Action:=xlFilterInPlace, _
CriteriaRange:=Range("A1").CurrentRegion
.ClearContents
End With
ActiveSheet.ShowAllData
End Sub
No.4
- 回答日時:
#3です。
偶然、VBA COUNTIFS高速 で検索していたらご質問にあった解説サイトを見つけました。
サンプルコードは少し難しいかも知れませんが、少し手を加えれば使えそうですし、しっかり解説もあります。
検証はしておりませんが参考になるかも知れません。
https://officedic.com/excel-vba-countifs-dic/
No.1
- 回答日時:
sub 新規チェック()
Dim 値1 As String,値2 As String, 値3 As String,値4 As String,値0 As String
Dim i As Long,Endrow As Long
値1=Cells(2,1).Text And Cells(2,2).Text
値2=Cells(3,1).Text And Cells(3,2).Text
値3=Cells(4,1).Text And Cells(4,2).Text
値4=Cells(5,1).Text And Cells(5,2).Text
Endrow=Cells(1048576,4).End(Xlup).Row
For i = 2 to Endrow
値0=Cells(i,4).Text And Clees(i,5).Text
If 値0<>値1 And 値0<>値2 And 値0<>値3 And 値0<>値4 Then
Cells(i,6).Value=1
End if
Next i
これならどう?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数指定セルの可視セルのみを別シートに転記するVBAについて 2 2022/05/27 21:19
- MySQL SQLでカラムを追加し、条件に合致した場合にフラグ(レコード)を付与する方法 2 2022/05/18 23:54
- Excel(エクセル) 名前と日付が一致する箇所にフラグを立てる関数が知りたいです 4 2022/08/11 02:24
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 1 2022/06/18 21:20
- Visual Basic(VBA) 【困っています2】VBA 追加処理の記述を教えてください。 2 2022/08/26 11:42
- Excel(エクセル) Excel M365 データチェックの仕掛けを作りたい 2 2023/06/03 23:54
- Visual Basic(VBA) Excel(VBA) 特定の条件に該当する行の値、書式を同じセルにコピ&ペーストしたいです 1 2022/05/21 18:18
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Visual Basic(VBA) エクセル 2つの列にある値の完全一致を抜き出すVBA 15 2022/12/15 03:22
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字列の結合を空白行まで実行
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
Changeイベントでの複数セルの...
-
VBAを使って検索したセルをコピ...
-
エクセルでフォームのチェック...
-
VBA 値と一致した行の一部の列...
-
VBAで、特定の文字より後を削除...
-
VBAで10行おきにセルの下に罫線...
-
VBAコンボボックスで選択した値...
-
データグリッドビューの一番最...
-
マクロ 最終列をコピーして最終...
-
VBAのFind関数で結合セルを検索...
-
rowsとcolsの意味
-
空白セルをとばして転記
-
追記する列を増やしたい 2つの...
-
【VBA】複数行あるカンマ区切り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報