2016-03-31 7 views
0

これを行うためのコードがあります。しかし、私はこのコードをカスタマイズすることは私の状況のた​​めです。 現在コード:参照の代わりにセル式に値を表示する方法

Sub Finalone() 
Dim lastrow As Long, r1 As Long 
Dim temp As String, arTemp 
Dim temp2 As String 
Dim temp3 As String 

temp3 = "" 

    ' Get the last row in the worksheet 
lastrow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row 

For r1 = 1 To lastrow 

    ' If A & B aren't blank, make the formula of cell C equal to A + B. 
    If ActiveSheet.Range("$C$" & r1).Value <> "" And Mid(ActiveSheet.Range("$C$" & r1).Formula, 1, 1) = "=" Then 
     If Asc(Mid(ActiveSheet.Range("$C$" & r1).Formula, 2, 1)) >= 65 And Asc(Mid(ActiveSheet.Range("$C$" & r1).Formula, 2, 1)) <= 90 Then 
      ' Get the formula for the current C cell 
      temp = Replace(ActiveSheet.Range("$C$" & r1).Formula, "=", "") 

      ' Create an array by splitting the formula on the + sign 
      arTemp = Split(temp, "+") 

      temp2 = ActiveSheet.Range(arTemp(0)).Value 

      For i = 1 To UBound(arTemp) 
       temp3 = ActiveSheet.Range(arTemp(i)).Value 

       temp2 = temp2 & "+" & temp3 

      Next i 

      ActiveSheet.Range("$C$" & r1).Value = "=" & temp2 
     End If 

    End If 

Next 

End Sub 

上記のコードは、場合にのみ、AとB列の仕事である値を有し、C列は、以下の式を有し、式は+ Bです。 私のsiutionのようなものです - 値の列は、varryかもしれません。数式の列はCではなく、私の状況の式の使用はたとえば(R12-Q12)/ 2です。 上記の数式を値に変換する列をユーザーが選択しなければならないように、ユーザーからの入力を得るにはマクロが必要です。

+0

あなたは 'ActiveCell.FormulaR1C1 =" =(RC [-1] -RC [-2])/ 2 "'を試すことができます。 – Davesexcel

+0

あなたの返事をありがとう。しかし、実際には、セルの値ではなく、セルの値をセルの式で表示する必要があります。上記の数式は、セル参照を作成します。 – sabarigiri

+0

オフセットを使用します。 'ActiveCell =(ActiveCell.Offset(、-1) - ActiveCell.Offset(、-2))/ 2' – Davesexcel

答えて

0

Excelは簡単な方法でセル/数値/演算子の論理解析をサポートしていません。私は少しの挑戦が好きなので、私は何かtogeherをノックしました。

以下は、同じシート上の4つの標準演算子、角括弧、数字、およびセル参照を使用して簡単な数式を解析し再結合するために役立ちます。

Sub FinalOne() 

Dim rng As Range, rngPrecedents As Range, rngPrecedent As Range 
Dim i As Integer, j As Integer, x As Integer, b As Integer, rCount As Long 
Dim tmp As String 
Dim ws1 As Worksheet, ws2 As Worksheet 

'FIRST WE SET SOME VARIABLES FOR OUR ACTIVESHEET AND A TEMP SHEET TO HOLD THE PARSED FORMULAE 
Set ws1 = ActiveSheet 
Set ws2 = Sheets.Add 
ws1.Activate 
rCount = 1 

'WE SET THE RANGE BASED ON USER SELECTION 
Set rng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8) 

'THEN WE ITERATE THROUGH EACH CELL 
    For Each c In rng 
     x = 1 
     i = 0 
     'AND THROUGH EACH CHARACTER ALONG THE LENGTH OF THE FORMULA 
     For j = 1 To Len(c.Formula) 
      Select Case Mid(c.Formula, j, 1) 
       'WE CHECK IF THE GIVEN CHARACTER IS AN OPERATOR 
       Case "=", "+", "-", "/", "*", "(", ")" 
        ws2.Range("A" & rCount).Offset(0, i).Value = Mid(c.Formula, j, 1) 
        i = i + 1 
       'WE CHECK IF THE GIVEN CHARACTER IS A NUMERIC VALUE 
       Case 0 To 9 
        ws2.Range("A" & rCount).Offset(0, i).Value = Mid(c.Formula, j, 1) 
        i = i + 1 
       'OR WE ASSUME THAT IT'S A CELL REFERENCE 
       Case Else 
        Set rngPrecedents = c.Precedents 
        Set rngPrecedent = rngPrecedents(x) 
        ws2.Range("A" & rCount).Offset(0, i).Value = rngPrecedent.Value 
        i = i + 1 
        j = j + Len(rngPrecedent.Address) - 3 
        x = x + 1 
      End Select 
     Next j 
     rCount = rCount + 1 
    Next c 

'AFTER WE'VE PARSED THE CELL CONTENTS INTO DIFFERENT CELLS ON OUR TEMP SHEET 
'WE RE-COMBINE THEM IN A TEMP COLUMN ON OUR WORKING SHEET 

rng.Offset(0, 1).EntireColumn.Insert 

rCount = 1 
i = 0 

    For Each c In rng 
     For i = 0 To ws2.Cells(rCount, ws2.Columns.Count).End(xlToLeft).Column 
      tmp = tmp + ws2.Range("A" & rCount).Offset(0, i).Text 
     Next i 
     c.Offset(0, 1).Value = tmp 
     tmp = "" 
     rCount = rCount + 1 
    Next c 

'NOW WE TIDY UP 

rng.Formula = rng.Offset(0, 1).Formula 
rng.Offset(0, 1).EntireColumn.Delete 

Application.DisplayAlerts = False 
ws2.Delete 
Application.DisplayAlerts = True 

End Sub 

あなたの参照がシートから外れている場合は先例の方法は、同じシート上の参照文献で動作するように、あなたが苦労します。

+0

忘れました。それは同じ前例としてそれを見るのと同じように同じ式で同じ参照を2回使用することをうまく扱いません。 '=(R12-Q12)/ 2'は動作しますが、' =(R12-Q12)/ R12'は動作しません。 –

関連する問題