- ベストアンサー
エクセルマクロで時刻が数値になる
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
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
「中身を繋げて別のシートの一つのセルに入れる」のですからどのみち文字列になってしまいますね これは先般ここで教えていただいた方法ですが、 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 でもよいかもしれません
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >時刻を数値として持っているためでしょうが、数値ではなく時刻として処理したいのですがどのようにしたらよろしいでしょうか? それは、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 '==========================================================
お礼
「.Text」を使用する事で解決しました。ありがとうございました。
- ham_kamo
- ベストアンサー率55% (659/1197)
No.1です。失礼、質問を読み違えたので訂正します。 時刻だけが入っている場合に数値になるのですね。 時刻が入っている列がQ列と決まっているのなら、 str4 = "セルQ:" & Format(Workbooks(FileName).Worksheets(SheetName).Range("Q" & CopyRows).Value, "h:mm") & kai とすればいかがでしょうか。
お礼
参考になりました。ありがとうございました。
補足
説明し忘れましたが、時刻が入っている列は決まっていません。(これでややこしくなって困ってます)
- ham_kamo
- ベストアンサー率55% (659/1197)
もし日付が入っているのがZ列と決まっているのなら、 str10 = "セルZ:" & Format(Workbooks(FileName).Worksheets(SheetName).Range("Z" & CopyRows).Value, "yyyy/m/d h:mm") & kai としてみてはいかがでしょうか。
お礼
「.Text」を使用する事で解決しました。ありがとうございました。