[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『スペースを入れて表示』(ななえ)
生年月日が「昭12.5.19」などと入力されていて、
1ケタの数字のところは1マス空けて、「昭12.□5.19」
(□はスペース)というふうに表示できないでしょうか。
「明9.12.7」なら「明□9.12.□7」としたいのですが。
よろしくお願いします。
いま入力されている値は、 昭12.5.19 とのことですが、数値が全角で、最初のピリオドが半角、次が全角なのですか? またセルの書式設定の「表示形式」は、何でしょうか?(文字列かな?)
(INA)
きっとマクロだとすっきりと処理できるのでしょうが、、関数編です。 数式がごちゃごちゃしてしまうので、4列使います。
生年月日がA列にあるとして B1 =JIS(A1) ・・・全角に変換 C1 =IF(MID(B1,3,1)=".",REPLACE(B1,1,1,MID(B1,1,1)&" "),B1) ・・・元号の桁をあわせる D1 =IF(MID(C1,6,1)=".",REPLACE(C1,4,1,". "),C1) ・・・月の桁をあわせる E1 =IF(LEN(D1)<9,REPLACE(D1,7,1,". "),D1) ・・・日付の桁をあわせる としてみました。E列だけをコピーし、形式を選択>値で貼り付けて使ってください。 う”〜、、それにしても美しくない式だわ・・・。先輩方の更なる書き込みに期待(kuro)
見事に長いですが、同じくA列に入力があるとして
B1に =LEFT(A1,1)&JIS(SUBSTITUTE(SUBSTITUTE(TEXT(MID(SUBSTITUTE(ASC(A1),".","/"),2,20),"yy/mm/dd"),"0"," "),"/","."))
下にフィルします。コピペはkuroさんと同じく行います。
(ramrun)
あれ〜? この質問と似たようなのが以前あったような気がします。 kazuさんのライブラリーにあったような。 ゴシック系フォントを使うんだということのみ脳裏に焼きついています。 仕事では明朝系フォントしか使えないので、どこにあったか覚えていません。 (EUREKA)
それならばゴシック系、明朝系の違いではなく、 Pが付くか付かないかです。 プロポーショナルフォントってやつですね。
ちなみにPが付かないほうが等幅フォントです。
[[20030911094158]] 『年月日表示を揃えたい』(みど)
(ramrun)
お〜! これでした。 少し興味が薄かったので、しっかり把握が出来ていませんでした。 桁揃えとなれば、Pじゃだめですね。 失礼をいたしました。 (EUREKA)
私の10、20、30に対応してないですね(汗)。 アフォだな。
とりあえず無視しておいてください。 (ramrun)
残念。どうあがいてもネストが... あと一つなのにダメぽ。
B1に =LEFT(A1,1)&SUBSTITUTE(RIGHT(SUBSTITUTE(SUBSTITUTE("/"&TEXT(MID(SUBSTITUTE(ASC(A1),".","/"),2,8),"yy/mm/dd"),"/0","/ "),"/","."),8)," .","0.")
C1に =JIS(B1)
(ramrun)とりあえず形にしときました(汗)。
Function Date2(myDate As Range, Kugiri As Integer)
Dim Bunkathu() As String, s As String Dim KugiriMoji As String, Str As String, Moji As Integer Dim i As Integer
If myDate <> "" Then
Str = StrConv(myDate.Text, vbNarrow)
For i = 1 To Len(Str) If IsNumeric(Mid(Str, i, 1)) Then Moji = i - 1 Exit For End If Next i
s = Left(Str, Moji)
Select Case Kugiri Case 1 KugiriMoji = "/" Bunkathu = Split(Mid(Str, Moji + 1), "/", , vbTextCompare) Case 2 KugiriMoji = "." Bunkathu = Split(Mid(Str, Moji + 1), ".", , vbTextCompare) Case 3 ReDim Bunkathu(2) Bunkathu(0) = Val(Mid(Str, Moji + 1)) Bunkathu(1) = Val(Mid(Str, InStr(1, Str, "年") + 1)) Bunkathu(2) = Val(Mid(Str, InStr(1, Str, "月") + 1)) End Select
For i = LBound(Bunkathu) To UBound(Bunkathu) If Len(Bunkathu(i)) = 1 Then Bunkathu(i) = " " & Bunkathu(i) End If Next i
Select Case Kugiri Case 1 To 2 Date2 = s & Join(Bunkathu, KugiriMoji) Case 3 Date2 = s & Bunkathu(0) & "年" & Bunkathu(1) & "月" & Bunkathu(2) & "日" End Select
End If
End Function
kazuさんのマクロを参考に作りました 使い方はワークシート関数と同じように使います
Date2(対象セル,区切り文字) となっています 区切り文字は 1〜3 の数字で指定してください "/"なら 1 、 "." なら 2 、"平成9年10月2日" のように入力されていれば 3 を指定してください
たとえば、セルA1に 明9.12.7 と入力されていれば、Date2(A1,2) 、2000/10/4 なら Date2(A1,1) 2001年12月2日 や 昭和44年2月2日 なら Date2(A1,3) と入力してください (りな)
面白そうなので無理矢理B1だけで処理する数式を作ってみました。 長すぎて自分でも合ってるのか良く分からなくなっちゃいましたけど。(Yosh!)
=IF(FIND(".",JIS(A1),1)<4,JIS(LEFT(A1,1)&" "&MID(A1,2,1)),JIS(LEFT(A1,3)))&"."&IF(FIND(".",JIS(A1),IF(FIND(".",JIS(A1),1)<4,4,5))-FIND(".",JIS(A1),1)=3,""," ")&SUBSTITUTE(SUBSTITUTE(JIS(A1),LEFT(JIS(A1),FIND(".",JIS(A1))),""),RIGHT(JIS(A1),IF(FIND(".",RIGHT(JIS(A1),3))=1,3,2)),"")&"."&IF(FIND(".",RIGHT(JIS(A1),3))=1,JIS(RIGHT(A1,2)),JIS(" "&RIGHT(A1,1)))
チャレンジャー発見(笑)。
通りすがりの者さんの方法ってネストの壁を越えられる〜 って やつですね。 そんなのがあるって知ってはいたけど、初めてやってみました。 なかなか使えそう。
こんなときはりなさんのVBAが一歩秀でてますね。 なんといっても汎用性がある。
それにしてもYosh!さんのは、すごいですね。 おみそれしました。
結局最後に思いついたのは、区切り位置で年号を区切ってからなら 1レベルかせげるな〜 なんて程度です。 作業用に2列使うことになるんだけど(汗)。
(ramrun)
Function Date2(myDate As Range) As String '↓全角は vbWide 半角はvbNarrow Const HANKAKU_ZENKAKU As Long = vbNarrow
Dim Bunkatsu() As String, s As String Dim KugiriMoji As String, Str As String, Moji As Integer Dim i As Integer
If myDate <> "" Then
Str = StrConv(myDate.Text, vbNarrow)
For i = 1 To Len(Str) If IsNumeric(Mid(Str, i, 1)) Then Moji = i - 1 Exit For End If Next i
s = Left(Str, i - 1)
For i = Moji + 1 To Len(Str) If Not IsNumeric(Mid(Str, i, 1)) Then KugiriMoji = Mid(Str, i, 1) Exit For End If Next i
Select Case KugiriMoji Case "/", "." Bunkatsu = Split(Mid(Str, Moji + 1), KugiriMoji, , vbTextCompare) Case "年", "月" ReDim Bunkatsu(2) Bunkatsu(0) = Val(Mid(Str, Moji + 1)) Bunkatsu(1) = Val(Mid(Str, InStr(1, Str, "年") + 1)) Bunkatsu(2) = Val(Mid(Str, InStr(1, Str, "月") + 1)) End Select
For i = LBound(Bunkatsu) To UBound(Bunkatsu) If Len(Bunkatsu(i)) = 1 Then Bunkatsu(i) = " " & Bunkatsu(i) End If Next i
Select Case KugiriMoji Case "/", "." Date2 = StrConv(s & Join(Bunkatsu, KugiriMoji), HANKAKU_ZENKAKU) Case "年" If Bunkatsu(2) = 0 Then Date2 = StrConv(s & Bunkatsu(0) & "年" & Bunkatsu(1) & "月", HANKAKU_ZENKAKU) Else Date2 = StrConv(s & Bunkatsu(0) & "年" & Bunkatsu(1) & "月" & Bunkatsu(2) & "日", HANKAKU_ZENKAKU) End If Case "月" Date2 = StrConv(s & Bunkatsu(1) & "月" & Bunkatsu(2) & "日", HANKAKU_ZENKAKU) End Select
End If
End Function
少し変更しました。区切りを指定せずに =Date2(A1) などと入力してください 全角にする場合は Const HANKAKU_ZENKAKU As Long = vbNarrow ↑を vbWide に変更 ついでに 2000年2月 や 3月10日 にも対応 (りな)
このようなことでは、どうでしょう? =IF(A1="","", JIS(LEFT(A1)&IF(MID(A1,3,1)="."," "&MID(A1,2,2),MID(A1,2,3)) &TEXT(MONTH(REPLACE(A1,1,1,VLOOKUP(LEFT(A1),{"明","M";"大","T";"昭","S";"平","H"},2,))),"??.") &TEXT(DAY(REPLACE(A1,1,1,VLOOKUP(LEFT(A1),{"明","M";"大","T";"昭","S";"平","H"},2,))),"??"))) (LOOKUP)
とぉりゃ〜 みなさん頑張っているようなので Ver.3 投下。 閏年の2/29以外は大丈夫です(爆)。その物件だけは手直しということで(汗)。 Ver.1よりはましかな。
(ramrun)お昼〜
B1に =LEFT(A1,1)&JIS(RIGHT(SUBSTITUTE("."&TEXT(SUBSTITUTE(MID(ASC(A1),2,20),".","/"),"y.mm.dd"),".0",". "),8))
LOOKUPさんもramrunさんも式が短くて良いですね^^; TEXTの使い方が鍵になるんですかね。TEXTは数値に表示形式の設定をする物だと 思いこんでいたので、今回の場合、シリアル値への変換等の必要性があるなら TEXTは使いにくいかなぁと勝手に思考から除外してしまっていました。勉強になりました。
りなさんのVBAは素晴らしいですね。敬服します。(Yosh!)
LOOKUPさんのを参考に同じよう和暦処理にしてみました。 私的にもこれで満足いく数式になったと思うので、ここで終了します。 続けすぎか(汗)。
しかし、残念なのは和暦に置き換えたことで明治33年1月1日以前は扱えないという ことになります。 したがって、質問者の明治9年には対応しません。
私が最初に組んでいたのは西暦として扱っていたため、閏年が合わないかわりに 何年でも大丈夫でした。 あと、先に上げたTEXTの"/"と"."区切りは単に私の勘違いのようで消します(汗)。
Ver.1は西暦処理。失敗作。 Ver.2は西暦処理。閏年の2/29に未対応。数式が2つに分かれてしまった。 Ver.3は西暦処理。閏年の2/29に未対応。数式的には満足。 Ver.4は和暦処理で閏年に対応。明治33年以降が処理対象。だけど私的に満足。
(ramrun)完結〜
B1に =LEFT(A1,1)&JIS(RIGHT(SUBSTITUTE("."&TEXT(HLOOKUP(LEFT(A1,1),{"明","大","昭","平";"M","T","S","H"},2,0)&MID(ASC(A1),2,20),"ee.mm.dd"),".0",". "),8))
ご質問をよく読まず、勘違いしまして、昭和9.9.9→昭和 9. 9. 9 なのかと思いまして、回答差し上げましが、掲載後、誤りに気がつきまして、 行きがかり上、訂正はさせていただきましたが、VLOOKUP()などで長くなって しまいました。無用な投稿をしまして申し訳ありませんでした。(LOOKUP)
そんなことないと思いますよ。 そもそも10レス目で終了しているわけですから(笑)。
LOOKUP系の使い方のいい見本になったと思います。 (ramrun)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.