[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Match関数でforループをまわす際のエラー』(vba初心者です)
Sub Macro()
Dim i As Long
Dim K As Long
For i = 14 To 80
K = WorksheetFunction.Match(Range("A1"), Columns(i), 0)
If K <> 0 Then
Columns(i).Hidden = True
End If
Next
End Sub
大変お世話にあっております。
A1に記述されている文字列が各列において一つもない場合はその列を非表示にする、それを14〜80列で行う、という挙動にしたいのですが
K = WorksheetFunction.Match(Range("A1"), Columns(i), 0)
の箇所で止まってしまいます。
修正方法についてご教授いただけますと幸いです。
よろしくお願いいたします。
< 使用 Excel:Office365、使用 OS:Windows10 >
やり方は2つあります。
WorksheetFunction.Match は検索値がみつからないと実行時エラーになります。 On Error Resume Next を使って、実行時エラーを無視する方法があります。 ただし、エラーが発生しても K の値は更新されないので、都度 K の値を初期化してください。
別の方法として、 Application.Matchを使う方法があります。 実行時エラーは起きませんが、エラー値が返ってきます。 なので、K は Variant 型である必要があります。 エラー値かどうかの判定は、IsError関数を使います。 (´・ω・`) 2020/06/12(金) 11:12
Dim K As Range '変数Kをオブジェクト変数で宣言(Rangeオブジェクト)
Set K = Columns(i).Find(What:=Range("A1"), Lookat:=xlWhole) 'Columns(i)の中からA1セル(の値)を探してセルのRangeオブジェクトをKに入れる(無ければKは空っぽ(Nothing)) If Not K Is Nothing Then Columns(i).Hidden = True 'Kが空っぽでない(Kに値がある)ならcolumns(i)を隠す
たとえばこんな感じです。
xlWholeは全部一致、ここをxlPartに変えると部分一致になります。
参考までに。
(虎ノ門ヒルズ) 2020/06/12(金) 11:17
私なら、SUMIFを使うけどなぁ。 エラーの心配がないので。
(半平太) 2020/06/12(金) 11:35
> 私なら、SUMIFを使うけどなぁ。 ↓ COUNTIFの間違い m(__)m
(半平太) 2020/06/12(金) 11:46
With WorksheetFunction k = .IfError(.Match(Range("A1"), Columns(i), 0), 0) End With
にしますね。
(tkit) 2020/06/12(金) 12:54
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.