Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


13015 / 13644 ツリー ←次へ | 前へ→

【7401】数式を値に置換 翡翠 03/9/4(木) 10:58 質問
【7412】Re:数式を値に置換 INA 03/9/4(木) 13:11 回答
【7416】Re:数式を値に置換 ichinose 03/9/4(木) 13:51 回答
【7443】Re:数式を値に置換 翡翠 03/9/5(金) 9:56 お礼

【7401】数式を値に置換
質問  翡翠  - 03/9/4(木) 10:58 -

引用なし
パスワード
   データ保存用ブックを作成する際に、複数シート内の特定の数式を値に置換したいと思っています。

  With ActiveSheet.UsedRange
    Set C = .Find("VLOOKUP", , xlFormulas, xlPart)
    
    If C Is Nothing Then Exit Sub
    Do
      C.Value = C.Value
      Set C = .FindNext(C)
    Loop Until C Is Nothing

    Set D = .Find("ISERROR", , xlFormulas, xlPart)
    
    If D Is Nothing Then Exit Sub
    Do
      D.Value = D.Value
      Set D = .FindNext(D)
    Loop Until D Is Nothing

現在は上記のように外したい数式をひとつひとつ指定、各シート毎にマクロ実行しています。(シート数が非常に多いのでかなり手間がかかっています・・・)

すべてのシートについて「SUM関数を除いたすべての数式」というような記述方法もしくは上記記述を簡素にする方法があれば、どなたかご指南ください。よろしくお願いします。

【7412】Re:数式を値に置換
回答  INA  - 03/9/4(木) 13:11 -

引用なし
パスワード
   >すべてのシートについて
For Each...Next を使ってはいかがですか?

【7416】Re:数式を値に置換
回答  ichinose  - 03/9/4(木) 13:51 -

引用なし
パスワード
   ▼翡翠 さん:
こんにちは。

>データ保存用ブックを作成する際に、複数シート内の特定の数式を値に置換したいと思っています。
>
>  With ActiveSheet.UsedRange
>    Set C = .Find("VLOOKUP", , xlFormulas, xlPart)
>    
>    If C Is Nothing Then Exit Sub
>    Do
>      C.Value = C.Value
>      Set C = .FindNext(C)
>    Loop Until C Is Nothing
>
>    Set D = .Find("ISERROR", , xlFormulas, xlPart)
>    
>    If D Is Nothing Then Exit Sub
>    Do
>      D.Value = D.Value
>      Set D = .FindNext(D)
>    Loop Until D Is Nothing
>
>現在は上記のように外したい数式をひとつひとつ指定、各シート毎にマクロ実行しています。(シート数が非常に多いのでかなり手間がかかっています・・・)
>
>すべてのシートについて「SUM関数を除いたすべての数式」というような記述方法もしくは上記記述を簡素にする方法があれば、どなたかご指南ください。よろしくお願いします。
一例ですが、SpecialCellsメソッドで数式セルだけ先に取得する方法です。
例は、Sum関数以外は、値に変換。

'===========================================
Sub main()
  Dim rng As Range
  Dim crng As Range
  Set rng = get_数式セル群(ActiveSheet.UsedRange)
  If Not rng Is Nothing Then
    For Each crng In rng
     If Not crng.Formula Like "=SUM(*)" Then
       crng.Value = crng.Value
       End If
     Next crng
    End If
End Sub
'==========================================================
Function get_数式セル群(rng As Range) As Range
  On Error Resume Next
  Set get_数式セル群 = Nothing
  Set get_数式セル群 = rng.SpecialCells(xlCellTypeFormulas)
  On Error GoTo 0
End Function

【7443】Re:数式を値に置換
お礼  翡翠  - 03/9/5(金) 9:56 -

引用なし
パスワード
   ichinoseさん、INAさん

問題解決、作業効率もアップしました。
ご指南ありがとうございました。

13015 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free