2012-12-04 22 views
5

Excel2003'te bir çalışma kitabındaki tüm hücreleri formüllerle bulmak ve farklı bir sayfadaki birkaç sütunda adreslerini ve formüllerini almak için bir makro yazıyorum.Bir hücrenin formülünü excel vba kullanarak metne dönüştürme

ben sadece iyi çalışır

Public Function ShowFormula(cell As Range) As String 

    ShowFormula = cell.Formula 

End Function 

kullanarak tek hücre formülünü gösterebilir biliyorum ama elle tüm hücreleri bulmak zorunda istemiyordu çünkü ben şu makro yazdım tüm hücreler gayet, ancak bunun yerine metin olarak formüle görüntüleme bulur beni

Sub Macro2() 


Dim i As Integer 
Dim targetCells As Range 
Dim cell As Range 
Dim referenceRange As Range 
Dim thisSheet As Worksheet 

Set referenceRange = ActiveSheet.Range("CA1") 

With referenceRange 
    For Each thisSheet In ThisWorkbook.Sheets 
     If thisSheet.Index >= referenceRange.Parent.Index Then 
      Set targetCells = thisSheet.Cells.SpecialCells(xlCellTypeFormulas, 23) 
      For Each cell In targetCells 
       If cell.HasFormula Then 
        .Offset(i, 0).Value = thisSheet.Name 
        .Offset(i, 1).Value = cell.Address 
        .Offset(i, 2).Value = CStr(cell.Formula) 
        i = i + 1 
       End If 
      Next 
     End If 
    Next 
End With 

End Sub 

için hepsini bulmak için, liste formül sonuçlarını görüntüler.

Formülleri formül yerine metin olarak çıkarmak için ne kaçırıyorum?

cevap

5

bu deneyin: Ayrıca

.Offset(i, 2).Value = "'" & CStr(cell.Formula) 

, bu biraz daha hızlı işler yapacaktır. Bunun yerine

For Each thisSheet In ThisWorkbook.Sheets 
    If thisSheet.Index >= referenceRange.Parent.Index Then 

ait bir şeyleri hızlandırmak için ipucu için

For j = referenceRange.Parent.Index to Sheets.Count 
    Set thisSheet = Sheets(j) 
+0

Teşekkür deneyin! Cevabınız hakkında hızlı bir soru. Bu çalışırken, '= A1 + B2 + C3 + ... 'çıktılar. Bu formülleri daha sonra farklı hücrelere geri takmayı planlıyorum ve bu da "'" nin kaldırılmasını gerektirecek. Metin formatı zorlamadan bunu yapmanın bir yolu var mı? Makroda değil, neden UDF ile birlikte çalıştığını merak ediyorum ...? –

+0

"'" nin kaldırılması önemsizdir 'Sağ (s, Len (s) - 1)' ama ben sizin dikkatinizi çekerim. Değiştirilmemiş formülü yapıştırmadan önce hedef hücrenin biçimini Metne ayarlamayı deneyebilir ve bunun nasıl gittiğini görebilirsiniz. –

+0

Metni biçimlendirmek bu hile yaptı. Çok basit, henüz bana gelmedi :(Çok teşekkürler! –