2016-04-22 5 views
0

Excel 2013ワークブックを使用して、Col FとCol AD​​を数式からMFG Hourly Employeesワークシートの値に変更しました。数式を持ち、値として保存し、次に2番目の列(現在はF4とAD 4)として保存する最初の列を認識するようにコードを調整する方法はありますか?私のコードは、これまでのところです:数式からのみ値として保存式で列を認識

Sub SaveAsValuesOnly() 
    Sheets("MFG Hourly Employees").Select 
    Range("F4").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues 
    Application.CutCopyMode = False 

    Range("AD4").Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.Copy 
    Selection.PasteSpecial Paste:=xlPasteValues 
    Application.CutCopyMode = False 
    Range("F4").Select 
End Sub 
+1

[range.hasformula](https://msdn.microsoft.com/en-us/library/office/ff837123.aspx)。 – findwindow

答えて

2
Dim rngCell As Range 

For Each rngCell In Selection 
    If rngCell.HasFormula Then 
     rngCell.Value = rngCell.Value 
    End If 
Next 

rng.Value = rng.Value 

は、式を削除し、値を保持します。あなたがMakroを記録したように見えるので、私はそれを指摘します。
編集:説明付きのより明示的なコード。

Sub removeFormulas() 
Dim rngCell As Range 
Dim searchRange As Range  
searchRange = Worksheets("Sheet1").Range("A1:D10") 

For each rngCell In searchRange 
     If rngCell.HasFormula Then 
      rngCell.Value = rngCell.Value 
     End If 
Next 
End Sub 

説明:
まず、私たちはあなたの問題のためのトリックを行いますsubprogramm、あるサブを起動します。 SubはSub removeFormulas()で始まり、End Subで終わります。ここでは変数Dim X As Yを設定します。ここで、Xは名前で、Yというデータ型です。ここではRangeオブジェクトです。
今度はsearchRangeを設定しました。ここでは数式を探したいので、ニーズに合わせて設定することができます。 Forループでは、にrngCellをループすることができます。Nextになると、すべてのセルをsearchRangeにループするまで、Forに戻ります。 Ifステートメントは、Cellが.HasFormula属性を持つ任意の数式を含んでおり、数式を持っている場合にセル内に表示された.Valueを書き、数式を上書きするだけです。

+0

ありがとう、ヨハネス。はい、私はマクロを記録しました。記録に現れているのは、正確には実行ごとに(2週間ごとに)実行される必要がありますが、両方の列について正確に1つの列が上書きされます。申し訳ありませんが、私はこのすべてを手に入れるための長い道のりを持っています。お待ち頂きまして、ありがとうございます。ところで、上記のコードでコンパイルエラーが発生しました。 –

+0

はい、Subに書き込む必要があるコードはありません。今のところ解決策がありますか? VBAを使い始めるには、いくつかのチュートリアルを試してみることをお勧めします。もし私があなたにいくつかのアドバイスをあげることもできます。 –

+0

確かに。それを感謝します。 –

関連する問題