プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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
でもよいかもしれません
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/01 22:11

こんにちは。



>時刻を数値として持っているためでしょうが、数値ではなく時刻として処理したいのですがどのようにしたらよろしいでしょうか?

それは、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

'==========================================================
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/01 22:13

No.1です。

失礼、質問を読み違えたので訂正します。
時刻だけが入っている場合に数値になるのですね。
時刻が入っている列がQ列と決まっているのなら、

str4 = "セルQ:" & Format(Workbooks(FileName).Worksheets(SheetName).Range("Q" & CopyRows).Value, "h:mm") & kai

とすればいかがでしょうか。

この回答への補足

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

補足日時:2006/12/01 09:53
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/12/01 22:09

もし日付が入っているのがZ列と決まっているのなら、



str10 = "セルZ:" & Format(Workbooks(FileName).Worksheets(SheetName).Range("Z" & CopyRows).Value, "yyyy/m/d h:mm") & kai

としてみてはいかがでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!