マクロを使用して、列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
マクロは何ですか? 'formx'とは何ですか? – BruceWayne
Formulaに割り当てる前に、formxの内容を注意深く見ていきます。そこにCRやLFがありますか?または他の特殊文字ですか?スペースと他のテキストの束はいかがですか? –
数式を適用する前にDebug.Print formxまたはMsgBox formxを使用し、文字列が本物のExcel式と同等かどうかを確認します。それ以外の場合、数式のスペルが間違っていると#NAMEエラーが発生することがあります。 – sktneer