[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字列として貼り付けられた日付』(EUREKA)
外部のエクセルデータからCopy&Pasteしたデータで、 和暦の生年月日の列があります。 S25/01/25 とか T10/12/20 という表示です。 このままでは、これらをシリアル値に変換できませんでした。 古い日付順に並べ替えることもままなりません。
別の列で =VALUE(参照セル) のワークシート関数を組み込んで、 文字列数字を数値に変換しなければなりませんでした。以前 [[20030811090130]]『手入力と貼り付けの違い』(Nyal) といったご質問がありましたが、似たようなことだと思います。
この =VALUE()関数の機能をVBAで記述できないものでしょうか。 つまり、貼り付けられた文字列の数字のセルを、 自動的に数値のセルにしてしまう機能が欲しいのです。
A B 1 S25/01/25 =VALUE(A1) B列の関数なしで、A列にデータが貼り 2 T10/12/20 =VALUE(A2) 付けられたら、即自動的にA列が数値に ・ ・ ・ 変換される方法。 ・ ・ ・
ご教授のほど、よろしくお願い致します。
よくわからないのですが、
> S25/01/25 とか T10/12/20 という表示です。
これらは文字列になっているのでしょうか? (りな)
横から失礼します。
Sub Str2Num() Dim Cc As Range For Each Cc In Selection Cc.Value = DateValue(Cc) * 1 Cc.ClearFormats Next End Sub
選択した範囲を変更します。S, T, H は変換してくれますが、M は駄目です。
日付じゃない文字列は、DateValue(Cc)*1 を単に、Cc * 1 と変えないとだめです。 書き加えて自動判別にすることは可能ですが…。
親分、ルーチン名の 2 を気にしないで下せえ!(通りすがりの者)
気がつきましたけど、気にしてません。 (なぜか親分と呼ばれる・kazu)
貼り付けが終わった後に、一括で日付(数値)にできます。
参考 [[20021209025031]] 『20020623を2002/06/23に変換する方法...』(yuki) 表示形式は適当なものに変更してください。
数値の1をコピーしておいて、日付(文字)の上に乗算で貼り付け、 もしくは0をコピーしておいて、同じく加算で貼り付けでも可です。
私の記憶が正しければ、親分の方が年下だったような。
(ramrun)お昼休み〜
りなさん/通りすがりの者さん/ramrunさんへ (EUREKA)
留守中にこんなにアドバイスをいただきありがとうございます。 全部トライして自分のモノにします。
りなさん・・・長年続いているイベントの参加者のリストが,開催日ごとに SQLサーバーに蓄積されています。端末機で呼び寄せるとエクセルブックで 再現され,ファイル保存ができます。たくさんの保存したファイルを統合して, ひとつのエクセルブックにまとめているのですが,延べ5万人超分のレコードの 生年月日フィールドが文字列なのです(当たり前のことなのかも)。
通りすがりの者さん・・・Mは対象外ですので,大丈夫です。
0 の加算または 1 の乗算は気がつきませんでした。これが一番! いいことを 聞きました。(通りすがりの者)
驚きです! (EUREKA)
=VALUE(参照セル)というのは,関数電卓の一発変換ボタンみたいなモンで, ramrunさんのおっしゃる通り,時刻・時間・年月日の文字列に四則演算子を ぶっつけると数値として戻る! =VALUE()はこれをやっている訳ですか?
文字列+0,文字列*1,文字列-0,文字列/1 で 数値に転ぶ! エクセルの正規のワザですか? ramrunさん。
以下はVALUE関数のヘルプです
>Excelでは、数式中の値は必要に応じて自動的に変換されるため、 >通常は数式の中でVALUE関数を使用する必要はありません。 >VALUE 関数は、他の表計算アプリケーションとの互換性を維持するために >用意されている関数です。
Excelでは全角で0001と入力した場合、勝手に 計算できる数値1として置き換えてしまいます。 他にも文字で9月19日と全角でワープロ風に入力しても、 きちんと右揃えで、数式バーにも2003/9/19と表示されていると思います。
ということでExcelはそもそも、裏で何とか数値にしてやれ〜 と働いているわけです。
ユーザー関数でも分かると思うのですが、
Function test(ByVal v As Integer) As Variant test = v End Function
で、この関数に'0001を与えたら、他の言語では間違いなくエラーです。 引数をInteger型で受けているのですから。 でもそこはVB。勝手に数値化して1を返してくれます。
ようはExcelに処理を促すようなきっかけを起こしてやれば いいんですよ。 A1に'0001とあるなら、=--A1という数式をB1に入れてもいいし、 T10/12/20という文字列などはファイルをCSV形式で出力して、 開きなおせば日付化してます。 (ramrun)
こんにちは
Sub Str2Num() Dim Cc As Range For Each Cc In Selection Cc.Value2 = CDate(Cc) Cc.ClearFormats Next End Sub
通りすがりの者さんのマクロ、こんなふうにすれば文字列としての数字も 数値に変換できるようですね (りな)
ramrunさん・りなさんへ (EUREKA) いろいろありがとうございます。 文字列を数値に変換したいケースには、結構遭遇します。 印刷された大量のリストをOCRフォント変換ソフトでデータ化する場合なんかも、 数字は見事に文字列として取り込まれちゃいます。 上記のコードをうまく役立てたいと思います。 通りすがりの者さんにも、感謝です。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.