Wie kann ich den angezeigten Wert einer Zelle in MS Excel abrufen (für Text, der in Datumsangaben konvertiert wurde)?

9

Wie kann ich den angezeigten Wert einer Zelle in MS Excel abrufen (für Text, der in Datumsangaben konvertiert wurde)?

Ursprung der Excel-Datei

Ich habe eine Excel-Datei, die ursprünglich eine CSV-Datei war. Derzeit habe ich keinen Zugriff auf die ursprüngliche CSV-Datei. Als die CSV-Datei ursprünglich in Excel geöffnet wurde, wurden viele Zellen in der DateSpalte automatisch konvertiert.

Beispielwerte

Hier ist ein Beispiel für einige Elemente aus der DateSpalte (der Abstand steht für links und rechts ausgerichtete Zellen, hauptsächlich um zu zeigen, dass das zweite Datum nicht konvertiert wurde):

Ausstellung 1:

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

Und wenn ich eine dieser Zellen auswähle und mit der rechten Maustaste klicke und die Formatierung auswähle, erhalte ich verschiedene Dinge:

m/d/yy
General
General
General

Mögliche Logik

Es sieht also so aus, als hätte Excel das Datum des 01.12.1882 nicht konvertiert - vielleicht weil es "zu alt" ist oder vielleicht aus einem anderen Grund.

Wenn ich die gesamte Spalte auswähle und in die Formatierung "Allgemein" ändere, erhalte ich Folgendes (Text linksbündig, Zahlen rechtsbündig):

       25993
12/01/1882
Fall 1988
        1993

Was ich möchte

Ich hätte gerne eine Spalte, in der das Format auf "Allgemein" oder "Text" eingestellt ist, und die Daten, die ab Exponat 1 oben angezeigt wurden .

Ich habe diese Frage zur Verwendung einer DataFormatter-Klasse (sieht aus wie Java?) Und einige ähnliche Fragen gesehen, die Makros und VB-Skripte verwenden - aber wenn möglich, möchte ich wirklich eine Möglichkeit, eine Excel-Funktion zu verwenden, um dies zu tun.

Was ich versucht habe

Ich habe versucht, diese Dinge zu verwenden, die nicht funktioniert haben:

CONCATENATE- um das Datumsfeld abzurufen und mit einem Leerzeichen zu versehen
INDIRECT(ADDRESS(ROW(),5))- den Wert indirekt abzurufen
VALUE()- den "Wert" der Zelle abzurufen - entgegengesetzt zu dem, was ich möchte
TEXT()- kann das Format explizit angeben, kann es aber immer noch nicht zum Laufen bringen
CELL()- kann verwendet werden Zellinformationen wie "Inhalt" zu erhalten - kein Glück damit, aber ich habe gesehen, dass ich es auch verwenden könnte, um zu erhalten, formatwas mir sagen würde, ob die Zelle als Nummer oder als "allgemein" angezeigt wird, was dann möglicherweise mit einem verwendet werden könnte IFFunktion irgendwie, um eine Zahl, die als Datum angezeigt wird, in ein tatsächliches Datum umzuwandeln ... möglicherweise?

Kopier-Einfügemethode

Eine Methode, die ich gesehen habe und die zu funktionieren scheint, besteht darin, die Werte auszuwählen, sie zu kopieren und in den Editor einzufügen und sie dann zu kopieren und wieder in Excel einzufügen (sie gibt effektiv den angezeigten Wert an - was ich will)

Das einzige Problem ist, dass ich eine Funktion haben möchte, um dies zu tun, da das Excel-Blatt einige hunderttausend Zeilen enthält.

cwd
quelle
Wenn Notepad eine Lösung ist, sollten Sie in der Lage sein, nur die Zellen zu kopieren und dann "Spezial einfügen" und nur Text auswählen
Mattias Åslund
@ MattiasÅslund - ja, aber für Hunderttausende von Zeilen ist das einzige Problem ...
cwd
Wie wäre es, wenn Sie einfach das richtige Datumsformat für die Spalte auswählen und dann links die Zellen ausrichten? Es wird richtig aussehen, obwohl einige Zellen tatsächlich noch Daten sind
Mattias Åslund
Danke - ich brauche die tatsächlichen Werte als Text - die Datei wird in ein anderes Programm importiert
cwd

Antworten:

4

Wenn Sie uns alle möglichen Formate gezeigt haben, sollte dies funktionieren:

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

Wenn Sie andere Datumsformate als m / t / jj haben, fügen Sie Tests für diese hinzu.

Scott
quelle
1
Keine große Erklärung und scheint keines der allgemeinen Probleme zu lösen, das zu erhalten, was als Ergebnis einer Formel auf dem Bildschirm angezeigt wird. Möglicherweise eine Hilfe beim Erraten, welches nicht verwandte vordefinierte Format verwendet werden soll, aber nicht sicher, wie es die Frage ergänzt.
Ebyrob
(1) Gibt es einen bestimmten Teil davon, den Sie nicht verstehen? (2) Was meinen Sie mit „dem allgemeinen Problem, das zu erhalten, was als Ergebnis einer Formel auf dem Bildschirm angezeigt wird“? (3) OK, vielleicht löst dies nicht ein allgemeines Problem, das Sie haben. Ich sagte in meinem Beitrag, dass es auf die Daten in der Frage zugeschnitten war. (4) Antworten sollen Fragen nicht ergänzen ; sie sollen ihnen antworten . Das OP schien dies für angemessen zu halten. Können Sie erklären, warum Sie denken, dass dies nicht der Fall ist?
Scott
1
Warum, nicht wie oder was, scheint wichtig und fehlt. Ich entschuldige mich dafür, dass ich abrupt bin.
Ebyrob
7

Eine allgemeine Antwort:

Anstatt zu versuchen, sich mit den Ergebnissen der CELL-Funktion ("format" ...) zu beschäftigen, ist es möglicherweise einfacher, eine benutzerdefinierte Funktion zu verwenden, um die NumberFormat-Eigenschaft der Zelle direkt zurückzugeben.

In diesem Fall würde der Ausdruck "= TEXT (A1, NumberFormat (A1))" den angezeigten Wert ziemlich direkt anzeigen.

Um dies zu aktivieren, benötigen Sie Folgendes in einem Modul des Arbeitsblatts:

  Public Function NumberFormat(CellRange As Range) As String

  NumberFormat = CellRange.NumberFormat

  End Function
NickNaylor
quelle
4

Die gleiche Antwort, aber mit einer anderen Funktion (die bei mir funktioniert hat):

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

Verwenden Sie einfach = DisplayText (A1). Wenn Sie das Zellenformat ändern, gibt diese Funktion den angezeigten Text zurück

alvaroc
quelle
0

Das funktioniert bei mir. Es ist dasselbe wie der obige Beitrag, enthält jedoch eine Fehlerprüfung:

Schritt 1: Kopieren Sie die folgende öffentliche Funktion und fügen Sie sie in ein VBA-Modul ein:

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

Schritt 2: Probieren Sie es in Ihrer Tabelle aus. Geben Sie in eine beliebige Zelle die Formel ein, zum Beispiel: = CELLTEXT (A1). Dies gibt dann alles aus, was A1 angezeigt hat.

Duncan O'Donnell
quelle