• ベストアンサー

【エクセルマクロ】時間の表示形式について

あるセルに「8:24」(表示形式はユーザー定義により、h:mm)と入力されています。 この値を「出社時間」(date型の変数)へ代入していますが、以下の2つの方法で取得できる値が異なっています。 (1)出社時間 = ActiveCell.Offset(0, -3).Value 値:8:24 (2)出社時間 = Replace(ActiveCell.Offset(0, -3).Value, " ", "0:00:00") 値:0:35 なぜこのようになるのでしょうか。 (2)の方法を用いて(1)の値を取得したいです。

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

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8050/17209)
回答No.1

date型の変数というのは単なる浮動小数点数ですよ。普通の浮動小数点数と違うのは,コントロール パネルで設定されている短い日付形式に従って表示されるという点です。 したがって 出社時間 = 0.35 としても8:24と表示されます。 ところが, 出社時間 = Replace(ActiveCell.Offset(0, -3).Value, " ", "0:00:00") の場合には値がぜんぜん違います。 「ActiveCell.Offset(0, -3).Value」の値は0.35であって,Replace関数に引き渡すときに文字列の"0.35"に変換され,この中に" "空白文字は含まれていませんからReplace後もやはり"0.35"のままです。これをdate型の変数に代入すると0時35分と解釈されますので「値:0:35」となるのです。 結局,何をしたいのかよくわからないが,date型の変数として欲しいであれば (1)出社時間 = ActiveCell.Offset(0, -3).Value で十分だろうし,文字列"8:24"が欲しいのなら dim s as string s = Format(ActiveCell.Offset(0, -3).Value, "h:mm") のようにすればよい。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルマクロが重い

    こんにちは。 ご教授くださいませ。 すでに先方が作っているエクセルのシートがありまして、 そのシートの表組み規則にのっとって入力するユーザーフォーム を私のほうで作ったのですが、重いです。 selectの多用はだめ!というところまでは調べたのですが じゃあどうしたらいいかわかりません。 ■ '--------------------8時から If OptionButton1.Value = True Then ActiveCell.Offset(3, -1).Range("A1").Select ActiveCell = UserForm3.TextBox1.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox2.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox3.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox4.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox5.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox6.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox12.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox11.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox10.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox9.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox8.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox7.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox13.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox14.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox15.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox16.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox17.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox18.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox24.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox23.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox22.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox21.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox20.Value ActiveCell.Offset(0, -1).Range("A1").Select ActiveCell = UserForm3.TextBox19.Value ActiveCell.Offset(3, 0).Range("A1").Select ActiveCell = UserForm3.TextBox25.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox26.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox27.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox28.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox29.Value ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell = UserForm3.TextBox30.Value 'ActiveWorkbook.Save MsgBox "入力しました。", vbInformation, "確認" End If '--------------------8時から(END ■ 基本の流れは... 最初にオプションボタン3つのどれか1個の 選択を求め、その条件に応じて 始基点となるセルが変わります。 で、あとは与えられた表組みを縦や横に 移動しながら、対応するテキストボックスの 値を入れる、という 我ながら頭の悪い方法で^^; .selectではない、スマートな方法があればと思います。 ぜひお知恵を!

  • マクロよ動け

    VBA 難民です。 Excel で、左のセルが空白の場合、印刷文字を見えなくするつもりのマクロを作ってみましたが、知らん顔をされます。声の掛け方がまだよくわかってないのです。 こっちを向かせる方法を教えて下さい。よろしくお願いします。 Sub MacroWhiter() Dim a As Variant Dim b As Variant a = ActiveCell.Value b = ActiveCell.Offset(0, -1).Value '一つ左のセルの値 Range("B1").Activate 'ここから始める Do Until IsEmpty(ActiveCell.Value) '空きセルまで続ける If b = 0 Then 'ゼロの場合 ActiveCell.Font.Color = 2 '文字を白色にする ActiveCell.Offset(1, 0).Activate '下の行に移る End If Exit Do Loop '繰り返す a = ActiveCell.Value

  • excel vbaでの質問になります

    このようなマクロを作成したのですが、セルに数式が入れてあると、どうしてもその下の空白の行に値を入力されてしまいます。 数式が入っているセルにもそのままセルに値を入れたいのですが・・ 宜しくお願いします。 Dim wb1 As Worksheet, r1 As Range Dim N As Integer, i As Integer Dim mycount As Long   Set wb1 = ThisWorkbook.Worksheets("請求書") mycount = Range("B111").CurrentRegion.Rows.Count Cells(111 + mycount, 2).Select ActiveCell.Offset(0, 0).Value = wb1.Range("C60").Value ActiveCell.Offset(0, 1).Value = wb1.Range("C61").Value ActiveCell.Offset(0, 12).Value = wb1.Range("C66").Value ActiveCell.Offset(0, 13).Value = wb1.Range("C74").Value ActiveCell.Offset(0, 14).Value = wb1.Range("C75").Value ActiveCell.Offset(0, 15).Value = wb1.Range("C84").Value ActiveCell.Offset(0, 16).Value = wb1.Range("C85").Value ActiveCell.Offset(0, 20).Value = wb1.Range("C69").Value ActiveCell.Offset(0, 22).Value = wb1.Range("C68").Value ActiveCell.Offset(0, 23).Value = wb1.Range("C76").Value ActiveCell.Offset(0, 24).Value = wb1.Range("C77").Value Exit Sub

  • Excelマクロ:変数でセル範囲指定

    マクロの迷い人です。 Excelの表をマクロで印刷しようと思っています。 行の数が毎回違うため、最終セルもその都度指定しなければなりません。 A1 B1 A2 B2 A3 B3 A4 B4 この例で、A5 B5 以降は空セルとします。 印刷範囲を Range("A1:B4")と書かずに、そのときどきのアクティブセルを変数に代入し、変数を使って範囲指定したいのです。 Sub MacroTest () Dim a As Variant Dim b As Variant Range("B1").Activate Do While a <> 0 ActiveCell.Offset(1, 0).Activate '空白でなければ一つ下に移る a = ActiveCell.Value Loop ActiveCell.Offset(-1, 0).Activate '上の行に移る b = ActiveCell.Value Range("A1:"& b).Select End Sub こうしてみましたがダメでした。 デバッグの方法がわからないので教えて下さい。よろしくお願いします。

  • エクセル ユーザーフォーム 変数の定義

    エクセルでユーザーフォームを作成しました。 その中で郵便番号・住所を入れるテキストボックスがあるのですが、 郵便番号を入れると次のボックスに住所を表示させるのがかなり難しく、 自分で作成するほどのスキルは到底ないので、 下記のページにあったサンプルを利用して作成させて頂きました。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_130_050.html このページのサンプルだとシートのセルに飛ばないので、 シートのセルに飛ぶように下記のコードを入れました。 するとコマンドボタンを押すと 「変数を定義してください」 とエラーメッセージが出ました。 最初から自分で作成したフォーム上で下記のコードで実行した場合は うまくいったので行けるかと思ったのですが甘くありませんでした。 今までネットで調べたりしてマクロ等を使っていましたが、 変数は触ったことがなく未知の領域です。 こんな知識のまま手を突っ込むのは無謀かと思うのですが、 どなたかご教授いただけないでしょうか? 宜しくお願いいたします。 問題のコードはこちらです。 Private Sub cmdTouroku_Click() Range("B65535").End(xlUp).Offset(1).Select ActiveCell.Value = txtHinichi.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtKname.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtKumisu.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtParty.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtPartyp.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtSougei.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtMember.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtVisiter.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = ListBox1.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtPstyle.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = TXT_ZIPCODE.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = TXT_JUSYO.Value ActiveCell.Offset(0, 1).Select ActiveCell.Value = txtJusho2.Value txtKname.Value = "" txtKumisu.Value = "" txtName.Value = "" txtParty.Value = "" txtPartyp.Value = "" txtSougei.Value = "" txtMember.Value = "" txtVisiter.Value = "" txtPstyle.Value = "" TXT_ZIPCODE.Value = "" TXT_JUSYO.Value = "" txtJusho2.Value = "" UserForm1.txtHinichi.SetFocus End Sub

  • Excelでの時間表示が4:74とか23:87になってしまいます

    Excelで所要時間の平均をAVERAGE関数を使って算出すると、4:74とか23:87とか、分のところが60を超えた数値で表示されてしまいます。セル書式の表示形式はユーザー定義の[0":"00]です。(試しに表示形式を[時刻]に変えてみると先程の4:74は23:28に変わってしまいます。)もしかして引数がh:mmで表示されているからうまく計算できないのかな、とも思うのですが、だとするとh:mmを小数点表示に変える方法がわかりません。4:74を5:14と表示させる方法を教えてください。宜しくお願いします。

  • エクセルマクロで条件で印刷がしたいのですが理解不能

    エクセルのマクロで条件付きで印刷がしたいのですが、解りません… クイック印刷ボタンを押すとセルの文字列の変化(「合」&「不」の2種類)によって印刷フォームを変えたいのです。 2列目の結果を判断しA3から空白セルまで連続印刷2種類とも、一度で無理ならボタン2個準備 可 sheet4---"合" フォーム   sheet5---"不" フォーム sheet3に一覧表があります。 "合"マクロの作成したのですが、"不"をどのように入れればいいか解りません。     1 2 3 4 5 6 7 8 9 10 ..... 13 14 15 16 A2  製番 合否 種類 型式 開始 終了 工1 工2 外観 気密.....初MIN 初MAX 終MIN 終MAX A3 001 合  AA 123 1/7 1/15 良 良  良 良 0.8 0.9 1.2 1.5 A4 002 合  BB 456 1/8 1/16 良 良  良 良 0.8 0.9 1.2 1.5 A5 003 不  CC 789 1/9 1/12 良 否   良 良 0.6 0.8 - - ・ ・ A22 020 合  TT 999 1/7 1/15 良 良  良 良 0.8 0.9 1.2 1.5 Worksheets("sheet3").Activate Range("A3").Select '開始セル製造番号 'ループXの開始 Do 'アクティブセルを1つ下に移動 ActiveCell.Offset(1, 0).Select If oSht.Cells(idx, 3) = "合" Then   ' 繰り返し処理  End If '空欄であれば、プログラムを終了する 'Trim関数は前後のスペースを消去する If Trim(ActiveCell.Value) = "" Then Exit Do End If '非表示セルは印刷の対象としない If ActiveCell.EntireRow.Hidden = False Then 'これ以降、すべて印刷用シート With Worksheets("合") 'レコードの先頭セルを選択 .Range("C3").Value = ActiveCell.Offset(0, 0).Value '製造番号 .Range("L24").Value = ActiveCell.Offset(0, 2).Value '種類 .Range("F3").Value = ActiveCell.Offset(0, 3).Value '型式 .Range("C14").Value = ActiveCell.Offset(0, 4).Value '開始日 .Range("C15").Value = ActiveCell.Offset(0, 5).Value '終了日 .Range("C6").Value = ActiveCell.Offset(0, 6).Value '工程1担当 .Range("C7").Value = ActiveCell.Offset(0, 7).Value '工程2担当 .Range("C9").Value = ActiveCell.Offset(0, 9).Value '外観 .Range("C10").Value = ActiveCell.Offset(0, 10).Value '気密 .Range("C11").Value = ActiveCell.Offset(0, 13).Value '初期MIN .Range("C12").Value = ActiveCell.Offset(0, 14).Value '初期MAX .Range("C13").Value = ActiveCell.Offset(0, 15).Value '終期MIN .Range("C14").Value = ActiveCell.Offset(0, 16).Value '終期MAX 'レコードの最終セルであれば、1部印刷を実行する .PrintOut '印刷用シート終了 End With

  • Excelのマクロについて

    Excelについて全くの初心者で、今から勉強を始めるところですが、急遽、次のようなマクロを作成したいです。 アクティブなセルから右に6つ目のセルとそのセルから右に1つ、下に1つ目のセルに現在の時間を記入 どのように記述すればよいでしょうか。 ちなみに、的はずれかもしれませんが、以下のようなマクロを作りましたが、うまくいきませんでした。 よろしくお願いします。 Sub 時間入力() ActiveCell.Offset(0, 6).Activate SendKeys "^(:)" SendKeys "{TAB}" ActiveCell.Offset(1, 0).Activate SendKeys "^(:)" SendKeys "{TAB}" End Sub

  • EXCELで表示形式について。。。

    EXCELで表示形式でユーザー定義を使用した時に、 その値で検索したいのですが、どうしたらよいのでしょうか? Aの列に表示形式をユーザー定義で"A-"##にしました。 セルには数字のみ入力しました。見えているのはA-20とかA-15とかです。 その値でVLOOKUPの関数で検索したいのですが、できますか? ユーザー定義ではA~Zを使用してます。 セルには10~55までの数字を入力して、表になってます。 シートをコピーして形式を選択して貼り付けしてもセルに入力した数字のみで、 ユーザー定義で表示している"A-"の部分はコピーできません。 もう一度、入力しなおしたくはないので、お願いします。

  • VBAを使ってエクセル上の表の集計を出したいのですが。

    初心者ゆえ稚拙な質問をお許しください。 A B C D E    C=引出額 1 * * * * 5    D=預入額 2 * * 1 * 4    E=合計額 3 * * * 1 5 エクセルでデーターを随時入力していくための上記のような表を多数のシートに作成したのですが、各シートに関数を入れていると容量的に重たくなってしまうので、VBAを使って下記のようにマクロを組んでみたのですが、引出額もしくは預入額に間違った値を入力した際削除すると、ひとつ上のレコードの値になってしまいます。 要望を言えば、引出額、預入額のセルに間違った値を入力した際削除しても余計な値が入らなく、該当のセルが空白の時は、その合計額のセルも空白にさせたいのですが、何かいい方法はないでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 6 Then ActiveCell.Offset(columnoffset:=1).Value = ActiveCell.Offset(rowoffset:=-1, columnoffset:=1).Value - ActiveCell.Offset(columnoffset:=-1).Value End If If Target.Column = 7 Then ActiveCell.Value = ActiveCell.Offset(rowoffset:=-1).Value + ActiveCell.Offset(columnoffset:=-1).Value End If End Sub Worksheet_Changeにこだわっているわけではありません。 よろしくお願いします。