Excel VBA 質問スレッド No.742 (解決済)

条件に合う複数のセルを値に置換/配列に格納したセル番地のセルを値に置換

投稿者 : ぬん     投稿日時 : 2022/05/23(Mon) 21:55:23     OS : 未指定     EXCEL : 未指定
・条件は特定の文字を含む数式(下記の例では仮に1+2+3を含む数式としています)
・複数のシート、複数のファイルで共通で使えるものを作りたい
・セルの位置はシートによって変わる、連続するセルもあれば離れたセルもある

速いのは配列ということで、今以下の方法までたどり着いたのですが、配列に格納したセル番地をうまく活用してそのセルを値に置き換える方法はありますか?
全然別の方法でもよいのですが、もっと処理の速くなる書き方があれば教えていただきたく、よろしくお願い致します。

Sub TEST()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False

Dim FoundCell As Range
Dim FoundAddr() As String

Target = "1+2+3"
If Target = "False" Then Exit Sub

Set FoundCell = ActiveSheet.UsedRange.Find(what:=Target, LookIn:=xlFormulas, LookAt:=xlPart, MatchCase:=False, MatchByte:=False)
If FoundCell Is Nothing Then Exit Sub
Addr = FoundCell.Address

Do
FoundCell = FoundCell.Value
Set FoundCell = ActiveSheet.UsedRange.FindNext(After:=FoundCell)
i = i + 1
If FoundCell Is Nothing Then Exit Do
Loop Until FoundCell.Address = Addr

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

End Sub

[返信 1] Re : 条件に合う複数のセルを値に置換/配列に格納したセル番地のセルを値に置換
投稿者 : てらてら     投稿日時 : 2022/05/24(Tue) 06:55:09
こんにちは。

配列を使って速度を上げたいなら、
一旦シート上の値を二次配列に入れてしまって、その後、検索・置き換え作業を行い、
その後、二次配列をセルに転記するのが一般的だと思います。

それと、「特定の文字を含む数式」
Target = "1+2+3"
If Target = "False" Then Exit Sub
これは、ちょっと意味不明で、何をしたいのか分かりません。

[返信 2] Re : 条件に合う複数のセルを値に置換/配列に格納したセル番地のセルを値に置換
投稿者 : ぬん     投稿日時 : 2022/05/24(Tue) 08:15:22
■[返信 1] てらてらさん(2022-05-24 06:55:09)の記事
早速ありがとうございます。調べながらとなりますが試してみます。

> それと、「特定の文字を含む数式」
> Target = "1+2+3"
> If Target = "False" Then Exit Sub
> これは、ちょっと意味不明で、何をしたいのか分かりません。

特定の文字を含む数式は、例が余計意味わからなくしてしまっていたかもしれませんが、"vlookup"とかでも同じです。実際は、別のシステムの数値をエクセル上に抽出できるようなものを使っており、その専用の関数みたいな部分を値に置換する方法を検討しています。

If Target〜は、対象がなければ終了、かと認識していますがおかしいのでしょうか。

[返信 3] Re : 条件に合う複数のセルを値に置換/配列に格納したセル番地のセルを値に置換
投稿者 : てらてら     投稿日時 : 2022/05/24(Tue) 19:10:37
Target = "1+2+3"
If Target = "False" Then Exit Sub

このコードは、対象の有無にかかわらずExit Subは通りません。

"1+2+3"という文字列が代入されることでTargetは文字列型となり、
If Target = "False" は、 If "1+2+3" = "False" と同じなので、
常に(Boolean型の)Falseとなりますので無意味です。

[返信 4] Re : 条件に合う複数のセルを値に置換/配列に格納したセル番地のセルを値に置換
投稿者 : ぬん     投稿日時 : 2022/05/24(Tue) 22:51:49
■[返信 3] てらてらさん(2022-05-24 19:10:37)の記事

> このコードは、対象の有無にかかわらずExit Subは通りません。

> "1+2+3"という文字列が代入されることでTargetは文字列型となり、
> If Target = "False" は、 If "1+2+3" = "False" と同じなので、
> 常に(Boolean型の)Falseとなりますので無意味です。

ありがとうございます。おっしゃるように、削除してみても、対象がなくても特にエラーなど起こりませんでした。
二次元配列に入れてから置き換えはまだ格闘中ですが、再度質問するとしても質問内容変わりますのでこちらはいったん解決済とさせていただきます。

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

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


( 処理日時 : 2022-07-07 13:25:06 )

Page
Top