• ベストアンサー

エクセルマクロで時刻が数値になる

Excel2000を使用しています。 複数のセルの中身を繋げて別のシートの一つのセルに入れるマクロを作っています。 (イメージ) セルA、セルJ、セルO、セルQ、・・・・セルZ "aaaa","jjjj","ooo","qqqq",・・・・,"zzzzz" ↓ セルXXX "セルA:aaaa*セルJ:jjjj*セルO:ooo*セルQ:qqqq*・・・・*セルZ:zzzzz" 以下のようにマクロを作成しましたが、セルに時刻が入っているとなぜか数値として処理されます。(日付が入っている場合には問題ない) (イメージ) セルA、セルJ、セルO、セルQ、・・・・セルZ "aaaa","jjjj","ooo","12:00",・・・・,"2006/10/11 13:00" ↓ セルXXX "セルA:aaaa*セルJ:jjjj*セルO:ooo*セルQ:0.5*・・・・*セルZ:2006/10/11 13:00" 時刻を数値として持っているためでしょうが、数値ではなく時刻として処理したいのですがどのようにしたらよろしいでしょうか? どうか教えてください。 (マクロ部分) CopyRows = 2 PasteRows = 2 kai = "*" Do Until CopyRows = 1000 str1 = "セルA:" & Workbooks(FileName).Worksheets(SheetName).Range("A" & CopyRows).Value & kai str2 = "セルJ:" & Workbooks(FileName).Worksheets(SheetName).Range("J" & CopyRows).Value & kai     : str10 = "セルZ:" & Workbooks(FileName).Worksheets(SheetName).Range("Z" & CopyRows).Value & kai strall = str1 & str2 & str3 & str4 & str5 & str6 & str7 & str8 & str9 & str10 Workbooks(NewWorkbookName).Worksheets("Sheet1").Range("O" & PasteRows).Value = strall CopyRows = CopyRows + 1 PasteRows = PasteRows + 1 Loop

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

「中身を繋げて別のシートの一つのセルに入れる」のですからどのみち文字列になってしまいますね これは先般ここで教えていただいた方法ですが、 str1 = "セルA:" & Workbooks(FileName).Worksheets(SheetName).Range("A" & CopyRows).Text & kai に変えたらどうでしょう また余計ながらstr1~str10の変数は再利用しないのであれば  With Workbooks(FileName).Worksheets(SheetName)   strall = "セルA:" & .Range("A" & CopyRows).Text & kai & _        "セルJ:" & .Range("J" & CopyRows).Text & kai & _              :        "セルZ:" & .Range("Z" & CopyRows).Text & kai  End With でもよいかもしれません

toorisugari
質問者

お礼

「.Text」を使用する事で解決しました。ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >時刻を数値として持っているためでしょうが、数値ではなく時刻として処理したいのですがどのようにしたらよろしいでしょうか? それは、Value プロパティではなく、Text プロパティです。 ためしに、私もコードを書いてみました。参考にしてみてください。 実際の列は、Cols のArray の中に入れてください。 ただし、以下のマクロは、両方のブックが開いていることが条件です。 '========================================================== Sub Concatenate_Copy()  Dim i As Long  Dim j As Long  Dim Cols As Variant  Dim v As Variant  Dim buf As String  Dim strAll() As String   Dim Sh1 As Worksheet  Dim Sh2 As Worksheet    Const KAI As String = "*"  '-----------------------------------------------------  'ユーザー設定欄  Set Sh1 = Workbooks("Book1.xls").Worksheets("Sheet1")  Set Sh2 = Workbooks("Book2.xls").Worksheets("Sheet1")    Cols = Array("A", "J", "O", "Q", "R", "S", "T", "Z")  '-----------------------------------------------------  buf = ""  Application.ScreenUpdating = False  With Sh1   For i = 2 To 1000    For Each v In Cols     buf = buf & "セル" & v & ":" & .Cells(i, v).Text & KAI    Next v    ReDim Preserve strAll(j)    strAll(j) = buf    buf = ""    j = j + 1   Next i  End With     Sh2.Range("O2").Resize(UBound(strAll)+1).Value = WorksheetFunction.Transpose(strAll())   Application.ScreenUpdating = True   Set Sh1 = Nothing   Set Sh2 = Nothing    End Sub '==========================================================

toorisugari
質問者

お礼

「.Text」を使用する事で解決しました。ありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

No.1です。失礼、質問を読み違えたので訂正します。 時刻だけが入っている場合に数値になるのですね。 時刻が入っている列がQ列と決まっているのなら、 str4 = "セルQ:" & Format(Workbooks(FileName).Worksheets(SheetName).Range("Q" & CopyRows).Value, "h:mm") & kai とすればいかがでしょうか。

toorisugari
質問者

お礼

参考になりました。ありがとうございました。

toorisugari
質問者

補足

説明し忘れましたが、時刻が入っている列は決まっていません。(これでややこしくなって困ってます)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

もし日付が入っているのがZ列と決まっているのなら、 str10 = "セルZ:" & Format(Workbooks(FileName).Worksheets(SheetName).Range("Z" & CopyRows).Value, "yyyy/m/d h:mm") & kai としてみてはいかがでしょうか。

関連するQ&A

専門家に質問してみよう