数式を使用して複数のセルの内容を1つのセルにマージする場合、KrisはExcelで元のセルの書式を保持するのに問題があります。たとえば、セルA1とB1にそれぞれ1と0.33が含まれているとします。セルC1に、次の数式を入力します。

=A1 & " : " & B1

セルC1の結果は次のようになります:

1 : 0.3333333333

結果のC1がB1(0.33)に示されているものと一致しない理由は、B1の値が実際には0.33ではないためです。内部的には、Excelは15桁の値を維持するため、セルB1に= 1/3などの数式が含まれている場合、内部的には0.33333333333333として維持されます。ただし、セルB1に表示される内容は、セルのフォーマット方法によって異なります。この場合、フォーマットはおそらく小数点を超えて2桁のみを表示するように設定されています。

ただし、セルC1で目的の結果を得るにはいくつかの方法があります。 1つの方法は、セルA1とB1から取得した値がフォーマットされるように、数式を少し変更することです。たとえば、次の例では、TEXT関数を使用してフォーマットを実行します。

=TEXT(A1,"0") & " : " & TEXT(B1,"0.00")

この場合、A1は整数のみを表示するようにフォーマットされ、B1は小数点以下2桁のみを表示するようにフォーマットされます。ROUND関数を使用して同様の結果を得ることができます。

=ROUND(A1,0) & " : " & ROUND(B1,2)

別の可能な解決策は、Excelがブックの精度を処理する方法を変更することです。次の手順に従ってください:

。 [ツール]メニューから[オプション]を選択します。 Excelに[オプション]ダイアログボックスが表示されます。

。 [計算]タブが表示されていることを確認します。 (図1を参照)

。 [表示される精度]チェックボックスがオンになっていることを確認します。

。 [OK]をクリックします。

現在、Excelは、通常維持している15桁の完全な精度で計算を行う代わりに、すべての計算と連結で画面に表示される精度を使用します。このアプローチは一部のユーザーには受け入れられるかもしれませんが、他のユーザーにとっては、解決するよりも多くの問題が発生します。期待どおりに出力をフォーマットするには、より低い精度で動作できるかどうかを判断する必要があります。

さらに別のアプローチは、ターゲットセルに格納されているものではなく、ターゲットセルに表示されているものを返す独自のユーザー定義関数を作成することです。次のマクロは、この点でうまく機能します:

Function FmtText(rng As Range)

Application.Volatile     FmtText = rng.Cells(1).Text End Function

このマクロを使用するには、ワークシートで次のような式を使用します。

=FmtText(A1) & " : " & FmtText(B1)

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3213)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。