Excel VBA質問箱 IV

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

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


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

【74864】シリアル値を時刻表示にしたい hamaki 13/10/13(日) 9:47 質問[未読]
【74866】Re:シリアル値を時刻表示にしたい kanabun 13/10/13(日) 15:11 発言[未読]
【74867】Re:シリアル値を時刻表示にしたい hamaki 13/10/13(日) 16:31 お礼[未読]

【74864】シリアル値を時刻表示にしたい
質問  hamaki  - 13/10/13(日) 9:47 -

引用なし
パスワード
   Dataセルの書式が時刻表示(hh:mm)の場合
他のセル書き入れた場合 下記表のごとく
シリアル値になります
これを8:30の時刻表示にしたいと思い
マクロを書きました
isdata関数で判定しましたが1行目がシリアル値のため
Falseとなり時刻表示ができません
2行目は書式が文字列のため時刻表示になります
Copyをしないで行いたいのです
よろしくお願いします

Sub Check()
  Dim Ch As Boolean
  Dim GetTime As String
  Dim strDate As String
  Dim Sht As Worksheet
  Dim Gyou As Integer
  Dim i As Integer
  Dim Mjs As Integer
   Set Sht = ThisWorkbook.Worksheets("Sheet1")
   Gyou = 5
   For i = 1 To 6
     GetTime = Sht.Cells(Gyou, 3)
     Ch = IsDate(GetTime)
     Sht.Cells(Gyou, 4) = Ch
     If Ch = False Then
       Sht.Cells(Gyou, 5) = GetTime
     Else
       strDate = FormatDateTime(GetTime, 4)
       Mjs = Len(strDate)
       If Mjs < 6 Then
          Sht.Cells(Gyou, 5) = strDate
       End If
       ' 読込Dataに[AM]等がある場合6文字以上になる判定
       Mjs = Len(GetTime)
       If Mjs > 5 Then
         Sht.Cells(Gyou, 5) = GetTime
       End If
     End If
     Gyou = Gyou + 1
   Next i
End Sub

No Data       値       結果   
1   8:30  FALSE  0.354166667
2  8:30       TRUE       8:30    
3  8:30 TRUE       8:30    
4 10:30AM TRUE      10:30AM    
5       FALSE        
6   15:30 FALSE   15:30

【74866】Re:シリアル値を時刻表示にしたい
発言  kanabun  - 13/10/13(日) 15:11 -

引用なし
パスワード
   ▼hamaki さん:こんにちは〜

>isdata関数で判定しましたが1行目がシリアル値のため
>Falseとなり時刻表示ができません

isdata関数 → IsDate関数ですね

思うに、Rangeのあとのプロパティを省略しないで、最適な
プロパティを明示したほうがいいと思う。
そうすれば、結局、

>  Dim Ch As Boolean
>  Dim GetTime As String

>   For i = 1 To 6
>     GetTime = Sht.Cells(Gyou, 3)
>     Ch = IsDate(GetTime)

の GetTime = Sht.Cells(Gyou, 3) を

GetTime = Sht.Cells(Gyou, 3).Text にするだけで、すべてが

目論見通りに動くとおもう。

(注)↓GetTime という変数は そういう関数と間違えやすいので、
strTime に変えてあります。

Sub Check2()
  Dim Ch As Boolean
  Dim strTime As String
  Dim strDate As String
  Dim Sht As Worksheet
  Dim i As Long
  Dim Mjs As Integer
  
   Set Sht = ThisWorkbook.Worksheets("Sheet1")
   For i = 5 To 10
     strTime = Sht.Cells(i, 3).Text
     Ch = IsDate(strTime)
     Sht.Cells(i, 4).Value = Ch
     If Ch = False Then
       Sht.Cells(i, 5).Value = strTime
     Else
       strDate = FormatDateTime(strTime, 4)
       Mjs = Len(strDate)
       If Mjs < 6 Then
          Sht.Cells(i, 5).Value = strDate
       End If
       ' 読込Dataに[AM]等がある場合6文字以上になる判定
       Mjs = Len(strTime)
       If Mjs > 5 Then
         Sht.Cells(i, 5).Value = strTime
       End If
     End If
   Next i
End Sub

【74867】Re:シリアル値を時刻表示にしたい
お礼  hamaki  - 13/10/13(日) 16:31 -

引用なし
パスワード
   ▼kanabun さん:
ありがとうございました
プロパティを手抜きしないで丁寧に明示することですね
以後気をつけて書くようにします

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