• ベストアンサー

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

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

  • エクセルマクロ if文を繰り返したい

    マクロ初心者です。 以下のようなマクロを作ったのですが、 これをE34まで繰り返しの処理をしたいです。 どこにどんな文章を挟んでいいのかわかりません。 Sub けいさん() If Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "A" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "B" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("O22") = "D" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" ElseIf Workbooks("日報.xls").Worksheets("お手本").Range("C22") = "" Then Workbooks("test.xls").Worksheets("II-1(1)").Range("E11") = "" Else Workbooks("日報.xls").Worksheets("お手本").Range("C22").Copy Workbooks("test.xls").Worksheets("II-1(1)").Range("E11").PasteSpecial End If End Sub

  • エクセル2007のマクロについて

    実践で学ぶ Office Excel 2007 VBAというマクロの学習サイトで Sub Macro実践1() 'ブック シート セルアドレスを指定すればブック シートをアクティブにする必要はない             Workbooks("転記.xlsx").Worksheets("転記シート1").Range("A1").Value = _               Workbooks("データ.xlsx").Worksheets("データ1").Range("A1").Value                 End Sub         と入力すると「インデックスが有効範囲にありません」となってしまいます。なにか間違っているのでしょうか?

  • エクセルのマクロを教えてください。

    マクロの初心者です。 特に変数が全く使えず、下記もどのように記載していいのかわからないため教えていただけないでしょうか。 ユーザーフォームのtextbox2に開始番号があります。 textbox3に本数があります。 sheet1のB12セルには開始番号が入ります。 開始番号から本数分+1したものを順番にセルに入っていくようにしたいです。 ただ、入れたいセルが横→左下(開始番号の列)→横→左下(開始番号の列)・・・としたいため、どのように書いていいのかわかりません。 地道に書くのであれば、下記のようになると思うのですが、変数を使って書く場合はどのようになるのか教えていただけないでしょうか。 Worksheets("Sheet1").Range("B12").Value = TextBox2.Value If TextBox3.Value = 2 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 ElseIf TextBox3.Value = 3 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 ElseIf TextBox3.Value = 4 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 ElseIf TextBox3.Value = 5 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 Worksheets("Sheet1").Range("B14").Value = TextBox2.Value * 1 + 4 ・ ・ ・ End If

  • マクロをすっきりさせたい・・・

    いつもお世話になっております。 下記、マクロを組んだのですが、 簡潔にまとめるには、どうしたら良いでしょうか・・・ 宜しくお願い致します。 Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B24")) Range("D14").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B25")) Range("D15").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False) Set 範囲 = Workbooks("A.xls").Worksheets("マスター").Range("A2:G4000") ThisWorkbook.Activate 列番号 = 7 検索値 = (Worksheets("B").Range("B26")) Range("D16").Value = WorksheetFunction.VLookup(検索値, 範囲, 列番号, False)

  • エクセルVBAで他のbookのセルcellsで参照

    エクセルVBAで他のbookのセルの値(一定の範囲)を参照したいのですが、変数を使いたいため、cellsを使用したいのですがうまくいきません。方法はないでしょうか。 下記に例を示します。 rangeを使用すればすべてok((2)(5))(この場合はset文を使用しなくてもok(5))。同じbookならcells使用ok(4)。 他のbookをcells文使用する方法はないでしょうか(もちろんできれば、Thisbookの方もcellsを使用したい)。 よろしくお願いします。 sub test() Dim ThisBook As Workbook Dim Workbook2 As Workbook 'マクロを実行しているワークブック Set ThisBook = ThisWorkbook '他のワークブック Set Workbook2 = Workbooks("test11.xlsx") ' 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value  '(1)だめ 'ThisBook.Worksheets(1).Range("A1:B2").Value = Workbook2.Worksheets(1).Range("a1:b2").Value '(2) OK 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test11.xlsx").Worksheets(1).Range(Cells(1, 1), Cells(2, 2)).Value '(3) だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:B2").Value = Workbooks("test1.xlsm").Worksheets(1).Range(Cells(3, 3), Cells(4, 4)).Value  '(4)だめ 'Workbooks("test1.xlsm").Worksheets(1).Range("A1:ii8000").Value = Workbooks("test11.xlsx").Worksheets(1).Range("a1:ii8000").Value  '(5) ok End Sub

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

  • VBAについてです。

    VBAについてです。 当方VBA初心者です。初歩的な質問があり投稿しました。 Workbooks("aaaa.xlsx").Worksheets("aaa").Range("A3:A50").Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") というコピーはできるのに Workbooks("aaaa.xlsx").Worksheets("aaa").Range(cells(3, 1), cells(50, 1)).Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") というコピーはどうしてできないのでしょうか? また、最下行を判別して Workbooks("aaaa.xlsx").Worksheets("aaa").Range(cells(3, 1), cells(最下行, 1)).Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") という様に簡単に処理したいのですが、やはり無理なのでしょうか? ブックが違うのですが、これをなんとかこのような処理にしたいと思っています。

  • エクセルマクロ初心者です。

    タイトルのとおりですが、例えば Range("A1").Value = WorksheetFunction.VLookup(1, Worksheets("集計").Range("日付").Value, 3) を作成しましたが、その逆をしたいのですが教えてください。要は、VLOOKUP関数で検索したセルの場所に、 セルA1の数値を代入したいのですが・・・・

  • エクセルVBA 違うbookのフォームにデータを

    ひとつのエクセルに BOOK1,2 を 起こして BOOK1 から BOOK2 の 自作フォームの テキストに 値は 送り込めないのでしょうか? シートのセルと ボタンは 可能なのですが・・・ Workbooks("Book2.xlsm").Worksheets("Sheet1").Range("A1:a4").Copy Workbooks("test.xlsm").Worksheets("Sheet2").Range("A1:a4").PasteSpecial Workbooks("test.xlsm").Worksheets("Sheet2").opb2.Value = True フォームには何か書き方が有るのでしょうか

  • エクセル マクロ IF関数について

    Sheet1にグループボックス内で、チェックボタンで項目を選択するとA1に記載されるように作成、マクロで入力ボタン作成しボタンをクリックするとSheet2に記載されるように作りました。しかし、項目が多いためSheet2を見るとABCDEFGなどの列に空白が目立ち使いづらいです。 そこでIF関数を使い何とか出来ないでしょうか? 例)SHEET1 B2に原因のグループボックスにカテゴリー(チェックボックスにて1)入力ミス、2)人、3)機械) B3に対応のグループボックスにカテゴリー(チェックボックスにて1)外注、2)修正、3)報告) と作り、それらがチェックされていたら、A1の列に表示され入力ボタンを押したら、Sheet2のAには原因、Bには対応と記載されるようにしたいです。その時Sheet1のA列に空白があれば、Sheet2の列に表示するようにしたいです。 実際のマクロ記入 Sub 入力() Dim LastRow As Long With Worksheets("Sheet2") LastRow = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1 .Range("A" & LastRow).Value = Worksheets("Sheet1").Range("A6").Value .Range("B" & LastRow).Value = Worksheets("Sheet1").Range("A7").Value .Range("C" & LastRow).Value = Worksheets("Sheet1").Range("A8").Value .Range("D" & LastRow).Value = Worksheets("Sheet1").Range("A9").Value .Range("E" & LastRow).Value = Worksheets("Sheet1").Range("A10").Value .Range("F" & LastRow).Value = Worksheets("Sheet1").Range("A12").Value .Range("G" & LastRow).Value = Worksheets("Sheet1").Range("A13").Value .Range("H" & LastRow).Value = Worksheets("Sheet1").Range("A15").Value .Range("I" & LastRow).Value = Worksheets("Sheet1").Range("A16").Value .Range("J" & LastRow).Value = Worksheets("Sheet1").Range("A19").Value End With End Sub お願いします教えてください。

専門家に質問してみよう