web-dev-qa-db-ja.com

MS Excelでセルの表示値を取得するにはどうすればよいですか(日付に変換されたテキストの場合)?

MS Excelでセルの表示値を取得するにはどうすればよいですか(日付に変換されたテキストの場合)?

Excelファイルの原点

元はCSVファイルであったExcelファイルがあります。現時点では、元のCSVファイルにアクセスできません。 CSVファイルが最初にExcelで開かれたとき、Date列のセルの多くは自動的に変換されました。

値の例

Date列の一部の項目の例を次に示します(間隔は左揃えと右揃えのセルを表し、主に2番目の日付が変換されなかったことを示しています)。

展示1:

_        3/1/71
12/01/1882
Fall 1988
          1993
_

そして、これらのセルの1つを選択し、右クリックしてフォーマットを選択すると、さまざまな結果が得られます。

_m/d/yy
General
General
General
_

可能なロジック

したがって、Excelが12/02/1882の日付を変換していないように見えます。おそらく、「古すぎる」ためか、別の理由のためです。

列全体を選択して「一般」フォーマットに変更すると、次のようになります(テキストは左揃え、数値は右揃え)。

_       25993
12/01/1882
Fall 1988
        1993
_

私が欲しいもの

形式を「一般」または「テキスト」に設定した列が1つあり、そこに別紙1上記。

私は この質問 を使用してDataFormatterクラス(Javaのように見えますか?)と、マクロとVBスクリプトを使用する同様の質問をしました。これを行うには、Excel関数を使用する方法と同じです。

私が試したこと

私はうまくいかなかったこれらのものを使ってみました:

CONCATENATE-日付フィールドを取得し、それにスペースを追加します
INDIRECT(ADDRESS(ROW(),5))-間接的に値を取得します
VALUE()-セルの「値」を取得します-私が望むものの反対
TEXT()-形式を明示的に指定できますが、それを機能させることはできません
CELL()-「コンテンツ」などのセル情報を取得するために使用できます-これではうまくいきませんが、formatを取得するためにも使用できることがわかりました。セルが数値として表示されているのか、それともIF関数と一緒に使用して、日付として表示されている数値を実際の日付に戻すことができるのかを教えてください。

コピー貼り付け方法

機能していると思われる方法の1つは、値を選択してコピーし、メモ帳に貼り付けてから、コピーしてExcelに貼り付け直すことです(表示された値が効率的に表示されます-これは私が望んでいることです)。

唯一の問題は、Excelシートに数十万行が含まれているため、これを実行する関数が必要であることです。

9
cwd

可能なすべての形式を提示していただければ、これでうまくいくはずです。

=TEXT(A1, IF(CELL("format",A1)="D4", "m/d/yy", "General"))

M/d/yy以外の日付形式がある場合は、それらのテストを追加します。

4
Scott

一般的な答え:

CELL( "format" ...)関数の結果を混乱させるのではなく、ユーザー定義関数を使用してセルのNumberFormatプロパティを直接返す方が簡単な場合があります。

その場合、式「= TEXT(A1、NumberFormat(A1))」は、表示された値を直接提供します。

これを有効にするには、ワークシートのモジュールに次のものが必要です。

  Public Function NumberFormat(CellRange As Range) As String

  NumberFormat = CellRange.NumberFormat

  End Function
7
NickNaylor

同じ答えですが、機能が異なります(これは私にとってはうまくいきました)。

Public Function DisplayText(ByVal pRange As Range) As String  
  DisplayText = pRange.Text  
End Function  

= DisplayText(A1)を使用するだけです。セルのフォーマットを変更すると、この関数は表示されたテキストを返します

4
alvaroc

これでうまくいきます。上記の投稿と同じですが、エラーチェックが含まれています。

手順1:次のパブリック関数をコピーしてVBAモジュールに貼り付けます。

Public Function CELLTEXT(target As Range) As String
   If target.Cells.Count > 1 Then
    MsgBox "CELLTEXT function requires a single cell as an input, please try again"
     Exit Function
    Else
        CELLTEXT = target.Text
    End If
End Function

ステップ2:スプレッドシートで試してください。任意のセルに数式を入力します。例:= CELLTEXT(A1)。これにより、A1が表示していたものが出力されます。

0