2016-04-08 9 views
0

私はVBAで絶対ゼロの初心者です。私がしていることはExcelで利用可能な機能では不可能であり、VBAコードが必要なことだけです。だから、誰かが親切に手伝ってくれるなら、私は実行する準備ができた完全なVBAコードが必要です!ありがとう。すべてのセルを "!"でコピーするにはどうすればいいですか?数式でそれらの上に値を貼り付けますか?

タスク:非常に大きなシートでは、「!」を含むすべてのセル(散在している)をコピーする必要があります。 (すなわち、他のシートを参照するすべてのセル)をそれらのそれぞれの値(「ペースト値」と同様)で置き換えます。この作業の目的は、すべての値をそのまま維持しながら、完全にスタンドアロンのシートを作成するために、他のワークシートへの参照をすべて削除することです。

私が必要とするのは、シート全体を通るループであり、数式に感嘆符がある場合はセルをコピーし、正確に同じ場所に値をペーストします。ループはシート全体を覆う必要があります。

それは意味がありますか?

答えて

2

方法について:

Sub dural() 
    Dim r As Range 

    For Each r In ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas) 
     If InStr(r.Formula, "!") > 0 Then r.Value = r.Value 
    Next r 
End Sub 

  • あなたが反復することになるだろうセルへの参照を保持するオブジェクト変数を宣言します。

    Dim r As Range 
    
  • 獲得取得した全てのセルを介して

    ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas) 
    
  • ループ式を有するアクティブなシート内のすべてのセル。各セルは、1行目と1列にまたがるRangeオブジェクトであるので、あなたの「繰り返し変数」としてあなたrオブジェクト変数を使用し、For Eachループ構文は、すべての個々のセル反復する:あなたはまた、抽出している可能性が

    For Each r In ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas) 
    

    Dim cellsWithFormula As Range 
    Set cellsWithFormula = ActiveSheet.UsedRange.Cells.SpecialCells(xlFormulas) 
    
    For Each r In cellsWithFormula 
    
  • あなたは、そのFormulaプロパティを使用して、セルの数式にアクセスし、そしてそれがexclamatが含まれているかどうかを確認するために、ビルトインInStr機能を使用することができます:あなたが反復することになるだろう、細胞を保持するオブジェクト変数イオンマーク:

    If InStr(r.Formula, "!") > 0 Then 
    

    InStrは、それが見つかった場合は、探している文字列の開始インデックスを返します。戻り値が0より大きい場合、式に感嘆符が含まれていることがわかります。20番目の文字に感嘆符が含まれている場合、関数は20を返します。

  • その値と式を置き換えるために
  • 、あなたは、単にそれにそのValue

    r.Value = r.Value 
    

    を割り当てるこれは、式を排除し、それが最後に評価された何に置き換えます。 Application.CalculationxlCalculationManualに設定されているためにワークシートが計算されない場合、これは間違った値を書き込むことを意味します。あなたを願って、

    r.Calculate 
    
+1

私はより多くの「釣り竿」を含めるようにあなたの答えを編集した:あなたはこのように、あなたが式を上書き前に、そのCalculate方法を呼び出すことにより、個々の細胞の再計算を強制することができます気にしないでください。 –

+1

@ Mat'sMugあなたの編集は素晴らしいと思います!この貴重なチュートリアル資料を追加していただきありがとうございます。 –

関連する問題