Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7556 / 13645 ツリー ←次へ | 前へ→

【37479】文字列を日付に変換したいのですが。 haru 06/5/9(火) 13:10 質問[未読]
【37480】Re:文字列を日付に変換したいのですが。 Jaka 06/5/9(火) 13:41 発言[未読]
【37481】Re:文字列を日付に変換したいのですが。 Jaka 06/5/9(火) 13:44 発言[未読]
【37495】Re:文字列を日付に変換したいのですが。 inoue 06/5/9(火) 20:01 発言[未読]
【37497】Re:文字列を日付に変換したいのですが。 ponpon 06/5/9(火) 20:08 発言[未読]
【38272】参考までに 杉本 06/5/30(火) 20:28 回答[未読]
【38296】Re:参考までに かみちゃん 06/5/31(水) 0:07 発言[未読]

【37479】文字列を日付に変換したいのですが。
質問  haru  - 06/5/9(火) 13:10 -

引用なし
パスワード
    1桁目、元号英字
 2、3桁目、年
 4、5桁目、月
 6、7桁目、日
 (例えば、S551230なら、昭和55年12月30日、です。)

 がある列に入っています。
 右隣の列に日付型にそれを変換したデータを入れたいのですが、
できますでしょうか?
 cdateを使ってみましたが、うまくいきませんでした。
 よろしくお願いします。

【37480】Re:文字列を日付に変換したいのですが。
発言  Jaka  - 06/5/9(火) 13:41 -

引用なし
パスワード
   他にもやり方があったような...。

st = "S551230"
st1 = CDate(Left(st, 3) & "/" & Mid(st, 4, 2) & "/" & Right(st, 2))
MsgBox Format(st1, "gge/m/d")

【37481】Re:文字列を日付に変換したいのですが。
発言  Jaka  - 06/5/9(火) 13:44 -

引用なし
パスワード
   訂正
>MsgBox Format(st1, "gge/m/d")
             ↓
          "ggge/m/d"

【37495】Re:文字列を日付に変換したいのですが。
発言  inoue E-MAILWEB  - 06/5/9(火) 20:01 -

引用なし
パスワード
   > cdateを使ってみましたが、うまくいきませんでした。
同様に「/」は必要ですが、DateValue関数ではいかがでしょう。
MsgBox DateValue("S55/12/30")

【37497】Re:文字列を日付に変換したいのですが。
発言  ponpon  - 06/5/9(火) 20:08 -

引用なし
パスワード
   ▼haruさん inoue さんこんばんは。
>同様に「/」は必要ですが、DateValue関数ではいかがでしょう。
DateValue関数で作ってみました。
A列にデータがあるとして、

Sub test()
  Dim i As Long
  Dim myVal As String
  Dim myVal2 As Date
  For i = 1 To Range("A65536").End(xlUp).Row
   myVal = Cells(i, "A").Value
   myVal2 = DateValue(Mid(myVal, 1, 3) & "/" & Mid(myVal, 4, 2) & "/" & Mid(myVal, 6, 2))
   Cells(i, "B").Value = Format(myVal2, "ggge/m/d")
  Next
End Sub

【38272】参考までに
回答  杉本  - 06/5/30(火) 20:28 -

引用なし
パスワード
   自分が別の処理で日付変換している実際のコードをアップしておきます。

実際の文字が「19990512」
と並んでいるときの処置です。

西暦固定で元々処理してます。
和暦の場合は処置としては
昭和元年が1926年
平成元年が1987年
ですので それぞれ S=1925を加算
H=1986を加算すれば西暦になります。
よってそれらを加算するものをつくれば下のものをそのまま応用可能です

別の方法は
DateValue関数を利用することですが
和暦の場合[H16-4-2]
と表示が基本ですので前処理が必要です
また、文字列しか認識しないため、文字列にする前処理も
必要です


----------------------------------------
Sub 日付変換処理()
'
' 日付変換処理 コア部分
'
'
' 文字列8文字をエクセル日付書式に変更
'
' セルの書式も日付に変更

  Dim varA As Variant   '20020909で表示
  Dim strC(3) As String
  Dim datB As Date    '代入後そのセルが日付属性をもつことになる
  Dim strD As String

  strD = "/"
  
  varA = ActiveCell.Value
    strC(1) = Left(varA, 4)   '西暦(4桁)
    strC(2) = Mid(varA, 5, 2)  '月(2桁)
    strC(3) = Right(varA, 2)  '日(2桁)
    datB = CDate(strC(1) + strD + strC(2) + strD + strC(3))
  ActiveCell.FormulaR1C1 = datB
  
End Sub
------------------------------------------------------------------------
Sub 日付に変換()
'
' 範囲を選択して そのデータを日付にする。
'
  Dim 行数 As Long, 列数 As Integer
  Dim i As Long, j As Integer
  Dim セル As Variant
  
    
'  ActiveCell.CurrentRegion.Select
' 範囲選択の行列(サイズ)を変数に代入
  列数 = Selection.Columns.Count
  行数 = Selection.Rows.Count
  
  For i = 1 To 行数
    For j = 1 To 列数
      Selection.Cells(i, j).Activate
      セル = ActiveCell.Value
      ' 8桁以外は無視
      If Len(セル) = 8 Then
        Application.Run "日付変換処理"
      End If
      
    Next j
  Next i
End Sub

【38296】Re:参考までに
発言  かみちゃん  - 06/5/31(水) 0:07 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>自分が別の処理で日付変換している実際のコードをアップしておきます。

私も、こんな方法でしているというみのをご紹介させていただきます。

Sub Sample1()
 Dim st As String
 Dim st1 As Date
 
 st = "S551230"
 st1 = CDate(Left(st, 1) & Format(Mid(st, 2), "00/00/00"))
 MsgBox Format(st1, "ggge/m/d")

 st = "20060530"
 st1 = CDate(Format(st, "0000/00/00"))
 MsgBox Format(st1, "ggge/m/d")
End Sub

7556 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free