2017-04-22 10 views
1

マクロを使用して、列Cの対応するセルを評価して、シートのすべての行に簡単な式を適用したい 式は単純にExcelマクロ式を適用するが評価しない

=YEAR(C2) 

C2が正しい行のC3、C4 ...に更新されるとき。マクロ内の行は

sca.Range("R2:R" & fA2 + fA1 + fA0).Formula = formx 

であり、式はformx

マクロ書き込み式の変数私の文字列から、私のシートscaに正しく書き込まれますが、計算が実行されません。 #NAMEエラーメッセージが表示されます。 Enterキーを押してもone of other methods suggested hereを使わないでください。しかし、近くの欄(または自動作成された数式)に手作業で同じ数式を書いても、それは機能します。年が正しく表示されます。 =YEAR(Sheet1!C2)でも、マクロで適用しても機能しません。

編集:sktneerとしての完全なコードが要求されました。

Sub myMacro() 

Dim sh0 As Worksheet, sh1, sh2 As Worksheet 
Dim sca As Worksheet 
Dim fA0 As Long, fA1 As Long, fA2 As Long 
Dim rng0, rng1, rng2 As Range 
Dim Annom0 As String 
Dim Annom1 As String 
Dim Annom2 As String 
Dim formx As String 
Dim annomax() As Variant 
Dim annomin() As Variant 
Dim StartDate As Integer, EndDate As Integer 

'extract correct names of sheets from principal sheet 
Annom0 = Cells(13, 6).Value 
Annom1 = Cells(13, 7).Value 
Annom2 = Cells(13, 8).Value 

'extract correct number of rows from secondary sheets 
fA0 = Sheets(Annom0).Cells(Rows.Count, 1).End(xlUp).Row 
Cells(14, 6).Value = fA0 
fA1 = Sheets(Annom1).Cells(Rows.Count, 1).End(xlUp).Row 
Cells(14, 7).Value = fA1 
fA2 = Sheets(Annom2).Cells(Rows.Count, 1).End(xlUp).Row 
Cells(14, 8).Value = fA2 

Set sh0 = Sheets(Annom0) 
Set sh1 = Sheets(Annom1) 
Set sh2 = Sheets(Annom2) 
Set sca = Sheets("GLOBAL") 

'calculate the minimum and the maximum dates 
annomax = sh0.Range(sh0.Cells(2, 3), sh0.Cells(fA0, 3)).Value2 
annomin = sh2.Range(sh2.Cells(2, 3), sh2.Cells(fA2, 3)).Value2 
Cells(15, 7).Value = CDate(Application.Max(annomax)) 
Cells(16, 7).Value = CDate(Application.Min(annomin)) 

sca.Cells.Clear 
formx = "=YEAR(GLOBAL!C2)" 

'create the new sheet copying all the 3 secondary sheets one bunch of rows below the other 
Set rng2 = sh2.Range("A2:A" & fA2) 
rng2.EntireRow.Copy sca.Cells(2, 1).End(xlUp)(2) 
Set rng1 = sh1.Range("A2:A" & fA1) 
rng1.EntireRow.Copy sca.Cells(fA2 + 1, 1).End(xlUp)(2) 
Set rng0 = sh0.Range("A2:A" & fA1) 
rng0.EntireRow.Copy sca.Cells(fA2 + fA1 + 1, 1).End(xlUp)(2) 
'then reorder it 
sca.Columns("A:O").Sort key1:=sca.Range("C:C"), order1:=xlAscending, Header:=xlYes 
sca.Range("R2:R" & fA2 + fA1 + fA0).Formula = formx 
'sca.EnableCalculation = True 'none of these method was useful 
'Application.CalculateFull 
'Calculate 

End Sub 
+2

マクロは何ですか? 'formx'とは何ですか? – BruceWayne

+0

Formulaに割り当てる前に、formxの内容を注意深く見ていきます。そこにCRやLFがありますか?または他の特殊文字ですか?スペースと他のテキストの束はいかがですか? –

+0

数式を適用する前にDebug.Print formxまたはMsgBox formxを使用し、文字列が本物のExcel式と同等かどうかを確認します。それ以外の場合、数式のスペルが間違っていると#NAMEエラーが発生することがあります。 – sktneer

答えて

0

セルはテキストとして書式設定できます。セルのフォーマットをGeneralに変更してみてください。

With sca.Range("R2:R" & fA2 + fA1 + fA0) 
    .Cells.NumberFormat = "General" 
    .Formula = formx 
End With 
+0

お試しいただきありがとうございますが、効果がありませんでした。私は同じ振る舞いを得ます(セルに書かれた数式、#NAMEエラー、式のテキストを選択してENTERキーを押すか別のセルを選択すると、数式が機能し始めます)。 – marcoresk