Excel 列のすべてのセルの先頭に = を追加して分数の計算を強制します

Excel 列のすべてのセルの先頭に = を追加して分数の計算を強制します

22/7、355/113、3927/1250 などの形式の Excel セルが複数あります。

実際の数値が計算されるように、各セルの先頭に = を追加するにはどうすればよいでしょうか?

質問に示されているようにテキスト連結を使用します。列内の各セルの先頭にテキストを挿入します動作しません(テキストが追加されます)。

セルの書式設定(数値、科学など)を変更してみましたが、改善はありませんでした。

また、A1 が 22/7 の場合、B1 =VALUE(A1) にしても機能せず、#VALUE が返されます。

では、各セルの値を強制的に計算するにはどうすればよいでしょうか?

答え1

次のようなデータがあるとします:

ここに画像の説明を入力してください

この短い VBA マクロを実行します。

Sub MakeEquation()
    Dim N As Long, i As Long

    N = Cells(Rows.Count, "A").End(xlUp).Row

    For i = 1 To N
        With Cells(i, 1)
            .Formula = "=(" & .Value & ")"
        End With
    Next i
End Sub

生成されます:

ここに画像の説明を入力してください

答え2

Powershellの使い方がわかれば、それを使ってセルの内容を変更することもできます。次のスクリプトを使用して、ExcelスプレッドシートExample.xlsxのsheet1のセルA1からA3の値を変更します。

$FilePath = 'C:\Users\Username\Documents\Example.xlsx'
# Instantiate the COM object
$Excel = New-Object -ComObject Excel.Application
$Workbook = $Excel.Workbooks.Open($FilePath)
$Sheet = $Excel.WorkSheets.item("sheet1")
$Sheet.activate()

$Sheet.Range('A1:A3').NumberFormat="" 

foreach ($Cell in $Sheet.Range('A1:A3').Cells) {
 $Cell.Value2 = '=' + $Cell.Value2
 }

$WorkBook.Save()
$WorkBook.Close()
$Excel.Quit()

答え3

次のワークシート関数は、まさに要求どおりに動作します。

=LEFT(A1,FIND("/",A1)-1)/RIGHT(A1,LENGTH(A1)-FIND("/";A1))

この関数は、分数内のスラッシュを見つけて、スラッシュの前の部分とスラッシュの後ろの部分で文字列を分割します。次に、両方の部分を分割して小数点を取得します。

答え4

以下は、コメントのリンクの最初のものと似ています。ただし、当時 (2010 年) の回答は、現在は存在しない Excel の側面に基づいていたため、より「明確」になっています。

計算された結果でデータを置き換えたいと想定しています。その場合は、次の操作を行います。そうでない場合は、結果を都合のよい別の場所に置くようにします。

ヘルパー列を挿入し、次の数式を入力します (たとえば、B1 に)。

= "=" & A1

Excel では、1-2-3 が行っていたような先頭の文字を書式設定文字と見なすという忌まわしいことはもう行われません'が、Excel ではテキスト文字列を "=" で始めても問題ないため、それを使用する必要はまったくありません。したがって、これは実際に実行できる最も簡単なことです。

必要に応じて入力するか、コピー/貼り付けします。すべての数式セルをハイライト表示してコピーします。次にセル A1 に移動し、Paste|Special|Values上記の数式の結果 (数式ではありません) を開始データの「上」に配置します。次にヘルパー列を削除します。次のようになります。

=22/7

形式を数値形式に変更しても、テキストとして扱われます。

すべてをもう一度強調表示し (または、P|S|M の直後にこれを実行し、後でヘルパー列を削除し)、 を使用してFind and Replace"=" を検索し、それを "=" に置き換えます...

はい、等号を見つけて、それ自身に置き換えます。Excel は喜んでそれを実行し、他の多くのテクニックとは異なり、それを実行した後はそれをテキストとして扱い続けません。元の内容が何であったかを常に知りたい場合は、そのままにしておきます。セルを調べると、たとえば、このセルは「=」の後にまだ残っているため、「22/7」で始まっていることが常にわかります。それが必要ない場合は、すべてを強調表示してコピーし、もう一度 P|S|V を実行して、計算結果のみを残します。

すべて完了。

(ちなみに、これは (奇妙なことに、一度も話題にされたことのない) 状況の 1 つです。一般的ではありませんが、突然現れて驚かされます。Paste|Special|Multiply連結の出力を 1 で割っても、すべてが値に変わるのがわかりません。"=22/7" のまま、セルの左端にテキストのように表示されます。 でそれぞれを手動で変更する必要がありますF2-Enter。)

とはいえ、小さくて素敵なマクロは「ゴールド スタンダード」です。すばやく簡単に、新しい資料で使用するためにボタンに割り当てることができ、すべて問題ありません。使用が許可されている限りは。しかし、これはスプレッドシートの作成者のための管理作業のように見えますが、スプレッドシートを作成した後にユーザーが行うものではありません。したがって、ほとんどの組織はこれで問題ないと思われます。Gary の学生のマクロは非常に簡単に見えます。Antony のマクロはより複雑に見えますが、非常に簡単に見えます。

そして... 面倒なことになるとは思いませんが... スプレッドシートを開いている間に、このような雑用用のマクロをいつでも追加して、使用してから削除したり、.xlsx 形式で保存して Excel がマクロを削除するようにしたりすることができます。念のため...

私が言及したリンクされた質問から、EVALUATE()使用するのは楽しいでしょう。しかし、上記のアプローチよりも少し難しいいくつかのことを行う必要があるため、より面倒です。

Michthan が提案する「分解して再びまとめる」アプローチは、文字通りすべてを分割してスラッシュを使用して表示するよりも複雑なデータになる可能性があるため、お勧めしません。その場合、現在または将来、考えられるすべての状況に対応するために、その数式で検索するものを拡張する必要があることに気付くでしょう。この状況では、問題が最小限ではないかもしれませんが、それを回避できる簡単な解決策が存在する場合は、代わりにそれを使用してみてはいかがでしょうか。とはいえ、そのアプローチも機能し、将来データが提供される方法によっては必要になる場合があります。

(そして、これらの回答は誰もが恩恵を受けるものであるため、他の誰かがすでにより複雑なデータセットを持っていて、すべての基礎をカバーするには作業量が多くなるものの、そのアプローチが有用であると考えている可能性があります。)

関連情報