25

次のように、条件付き書式を挿入するマクロを含む Excel スプレッドシートがあります。

Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=UND($A3=""" & lastName & """; $B3=""" & firstName & """)"

ご覧のとおり、"AND" (つまり "UND") にドイツ語の数式を使用しましたが、明らかに、このコードは、フランス語版または英語版の Excel で使用するとすぐには機能しません。通常、数式は自動的にローカライズされますが、実行時にすべてのバージョンで機能する数式を挿入するにはどうすればよいですか?

4

7 に答える 7

16

わかりました、これで私を助けてくれてありがとう、あなたは私がこれを解読するのを手伝ってくれました.

確かに英語だけでは無理です。数式を操作するときに英語を使用できます。コーディングを設定しますRange("A1").formula="AND(TRUE)"が、これは では機能しませんFormatConditions

私の解決策は、数式を一時的にセルに書き込み、FormulaLocalプロパティを介して読み取り、次のようにローカライズされた数式を返す関数です。

Function GetLocalizedFormula(formula As String)
' returns the English formula from the parameter in the local format
  Dim temporary As String
  temporary = Range("A1").formula
  Range("A1").formula = formula
  Dim result As String
  result = Range("A1").FormulaLocal
  Range("A1").formula = temporary
  GetLocalizedFormula = result
End Function

返された数式は で使用できますFormatConditions。これは、ドキュメントが後で別の言語バージョンの Excel で開かれたときに、再ローカライズまたはローカライズ解除されます。

于 2012-11-06T15:46:33.767 に答える
10

ドイツの Excel フォーラムで、この問題に対する非常に洗練された解決策を見つけました。これはダミーのセルに書き込むのではなく、一時的な名前付き範囲を使用します。元のアイデア (bst の功績) を使用して、両方向の変換関数を作成しました。

ローカライズされた数式を英語の数式に変換します。

Public Function TranslateFormula_LocalToGeneric(ByVal iFormula As String) As String
    Names.Add "temporaryFormula", RefersToLocal:=iFormula
    TranslateFormula_LocalToGeneric = Names("temporaryFormula").RefersTo
    Names("temporaryFormula").Delete
End Function


英語の数式をローカライズされた数式に変換します。

Public Function TranslateFormula_GenericToLocal(ByVal iFormula As String) As String
    Names.Add "temporaryFormula", RefersTo:=iFormula
    TranslateFormula_GenericToLocal = Names("temporaryFormula").RefersToLocal
    Names("temporaryFormula").Delete
End Function

これらの数式は常にローカライズされた数式として保存されるため、条件付き書式で数式を処理する必要がある場合、これは非常に便利です(ただし、 を使用する場合など、一般的なバージョンが必要になる場合がありますApplication.Evaluate(genericFormula))。

于 2015-10-13T18:45:48.280 に答える
5

ワークブックの (非表示の) セルに数式を (簡単なバージョンで) 格納します。

次に、ワークブックを開くと、その式はユーザーのために Excel によって自動的に翻訳されます。

次に、スクリプトでこの式を分析する必要があります (開始ブラケット "(" を見つけて、その過去の左を取ります:

次のようなものを使用します。

strLocalizedFormula = Mid(strYourFormula, 2, InStr(1, strYourFormula, "(") - 2)

strYourFormulaワークシートの数式からのコピーはどこになりますか。

私は英語環境のみを使用しているので、これが機能することを願っています。

また、これを読むことから : http://vantedbits.blogspot.nl/2010/10/excel-vba-tip-translate-formulas.html VBA。

于 2012-11-06T09:32:10.747 に答える
2

たぶんこれを試してみてください(英語版しかインストールされていないため、テストされていません)

を使用して、数式の国際バージョンを邪魔にならないセルに書き込みますRange.Formula。次に から読み返しRange.FormulaLocal、その文字列をFormatConditions

于 2012-11-06T10:42:42.490 に答える
-1

みんな、ありがとう!この投稿は非常に役に立ちました。

私の解決策は他のものを組み合わせたものです。誰かが役に立つと思った場合に備えて追加します。

Dim tempform As String
Dim strlocalform1 As String
Dim strlocalform2 As String

' Get formula stored in WorksheetA Cell O1 =IFERROR(a,b)
tempform = Worksheets("Sheet").Range("O1").Formula

' Extract from the formula IFERROR statement in local language.
strlocalform1 = Mid(tempform, 2, InStr(1, tempform, "(") - 1)

' Extract from the formula separator , (comma) in local settings.
strlocalform2 = Mid(tempform, InStr(1, tempform, "a") + 1, 1)

' Add formula in local language to desired field.
pvt.CalculatedFields.Add Name:="NewField", Formula:="=" & strlocalform1 & "FORMULA" & strlocalform2 & ")"

お役に立てれば!

于 2016-08-23T15:47:01.327 に答える