• ベストアンサー

マクロについて

マクロであるプログラムを組んでいますが、うまくいきません。 かなり簡素化していいますと、次のような状況です。 エクセルのcells(1,1)に「9:30」という文字が入っています。 この"9:30"という文字列を読み出そうとするのですが読み出した値は0.39583…という数値になってしまっています。 具体的に言うと、 sub macro1() 開始時刻="9:30" 時刻=cells(1,1) if 開始時刻=時刻 then a=1 endif end というようなプログラム(実際はもう少し複雑ですが)を組んだのですが、どうしても「a=1」にならないので、デバッグ式で見てみると「時刻」の中味は"9:30"ではなく0.39583という数値だったということです。 ちなみにエクセルのそのセルの書式は、「表示形式:時刻、種類13:30」となっています。 どうすれば"9:30"という時刻(文字列)を読み出せるのでしょうか。教えてください。よろしくお願いいたします。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

こんにちは。 Cells(1, 1).Text にしましょう。

tarobei
質問者

お礼

遅くなってすみません。 単純ですね…できました! ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

「:」を入れたがために、9:30は時刻と解釈され、書式を 数値にすると、9.5/24すなわち24時間=1日を1として9時間半は0.39・・・であるというわけです。 日にちも数値を表示形式にすると、1900年1月1日を1とする延べ日数になり初めは面食らいます。 /や-や:はデータ入力で、特別な意味を持っていますので、 良く勉強してください。さて文字列に敢えてするなら、「’」 を先頭につけて入力する。一旦’を付けずに入力してしまうと 表示形式を文字列にしても0.39・・・の文字列になってしまうし、="'" & A1もダメなようです。 if 開始時刻=時刻 の左辺はプログラムで””に囲まれているので文字列になりますが右辺時刻がCells(1,1)なので数値なんで、どんな数値が来ようが不等になります。

tarobei
質問者

お礼

ありがとうございました。 そーいうことだったのですか… 勉強不足ですね。がんばります。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

こんにちは。 これでも良いです。 開始時刻 = TimeValue("9:30") 時刻 = Cells(1, 1)

関連するQ&A

  • エクセルマクロで時間のセル内容が認識されない

    エクセルのB列に「10:20:00」といった時間が入力されています。 ある時間を条件にして、マクロに For i=1 to 100 If cells(i,2)="10:20:00" then ・・・ といった条件分岐のコードを書いたのですが、デバッグすると10:20:00の部分が認識されていないようです。 セルの書式設定で表示形式は「時刻」になっています。 試しに、同じ部分を「A」という文字に置き換えるとマクロはちゃんと動くようです。 時刻を認識させるにはどうすればよいでしょうか。

  • マクロif文での条件式について

    マクロ初心者です。Excel2003を使用しています。 仕事上で使用しているエクセル表より、ある値以上の項目を抽出し、その値を用いて計算結果を出すためのマクロを作成いたしました。いろいろなサイトを参考にして自分なりに書いてみたのですが、どうしてもうまくいきません。 表は簡単なもので、以下のようなものです。 1 9 2 24 3 45 4 67 1列目は使用濃度、2列目は測定値です。この測定値が30より大になった項目を抽出し、計算式にその値を代入し計算結果として出したいのです。また、全ての測定値が30以下だった場合は、計算結果の欄に”<30”とのように表示をさせたいと考えています。 以下のようにマクロを書いてみました。 Sub Macro1() For i = 1 to 4 if Worksheets("sheet1").cells(i , 2).value <=30 then Range("A5")=0 '測定値が=<30だった場合は計算をしないので、フラグとして値を入力 Elseif Worksheets("sheet1").cells(i , 2).value > 30 then Range("A5")=Cells(i , 1) Range("B5")=Cells(i , 2) Exit for Endif if Worksheets("sheet1").Range("A5").value > 0 then Range("A6").Formula ="=(50-B5) / A5" Elseif Worksheets("sheet1").Range("A5").value = 0 then Range("A6") ="<30" Else Endif Next i End Sub >30だった項目の抽出まではできたのですが、計算値をだすところがどうしてもうまくいかず、A6セルにはどんな値でも”<30”と入力されてしまいます。 マクロの基本的なルールなどがまだまだ未熟なので、基本的な構文も書けていないと思います。 全然方向性が違うかもしれないので、そういった点も含めてご教示いただけたら幸いです。 分かりにくいかもしれませんが、どうぞよろしくお願いいたします。

  • マクロの記録で条件付き書式の動作を記録する

    エクセル2010なのですが マクロの記録で条件付き書式の動作を記録することは出来ないのでしょうか? A列に対して条件付き書式の動作を記録したら Sub Macro1() ' ' Macro1 Macro ' ' Columns("A:A").Select End Sub これしか記録されてません。 私の記録の仕方が悪かったのでしょうか?

  • セルの書式が標準なのに文字列にできるのはなぜ?

    会社のシステムで吐き出したデータですが セルの書式設定が標準なのに文字列となっています。 マクロを利用して、あるセルの値を別セルへ転記すると、 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示になってしまいます。 会社のシステムが吐き出したエクセルはセルの書式が標準なのに 中の数字が文字列でいられるのが疑問です。 会社のシステムの吐き出したデータは Microsoft Excel 2.1ワークシートで 全てのセルの書式設定は「標準」です。 で例えば 12345678901234 は 12345678901234 と表示されていて 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) 0101という値のセルでも 表示は0101ですが 「数値が文字列として保存されています」 となっています。(先頭に ' は入っていません) それらのセルの値をマクロとかで別セルに転記すると 転記先では1.23457E+13 と表示されてしまいます。 (0101は101になります。) まっさらなエクセルに自分で手入力すると ・セルの書式設定が標準だと 12345678901234 ↓ 1.23457E+13になります。 ・セルの書式設定が数値だと 12345678901234 ↓ 12345678901234 ・セルの書式設定が文字列だと 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) なのに会社のシステムの吐き出しデータは セルの書式設定が標準なのにもかかわらず 12345678901234 ↓ 12345678901234 (ただし 数値が文字列と保存されています と注釈有) となっています。 手入力で書式設定が標準の状態でセルに12345678901234 と表示させるには先頭に ' をつける方法しか知りませんが ' が無いのに表示されています。 でもこの該当セルをマクロで別セル(書式設定:標準)に転記すると 1.23457E+13 となります。 またシステムが吐き出したエクセルの同じシート内に 以下のマクロで転記すると ↓ Sub 転記() 行 = 2 Do If Cells(行, 6).Value = "" Then Exit Do If Cells(行, 6).Value >= 10 Then Cells(行, 7).Value = Range("A2") Else Cells(行, 7).Value = Range("A3") End If 行 = 行 + 1 Loop End Sub ↓ このマクロだと A列~F列が書式設定が標準なのに文字列として表示されているのですが 転記先のG列が書式設定が標準であっても 12345678901234 (数値が文字列と保存されています と注釈有) と同じ状態のまま転記できます。 新しいBOOKのシート2に 会社の吐き出しデータをシートコピーした後、 (セルの書式設定:標準だが文字列で表示されている) そのBOOKに登録されているマクロで シート2のセルからシート1のセル(書式設定:標準)に転記すると 数字は数値に変換され、先頭の0は消え、桁数が多いと指数表示 となってしまいます。 ちょっと混乱しています。 理屈等教えていただければと思います。お願いします。

  • エクセルマクロ 特定の文字列を含む行のみを残す (マクロ修正)

    以下のマクロは、EXCEL2003で 「特定の文字列が含まれている列を削除する」動作をするマクロです Sub Macro1() Const col As String = "A" '文字列が入力されている列 Dim idx As Long Dim keyWord keyWord = Application.InputBox("削除対象の文字列は?", Type:=2) If TypeName(keyWord) <> "Boolean" And Len(keyWord) > 0 Then   For idx = Cells(65536, col).End(xlUp).Row To 1 Step -1     If InStr(Cells(idx, col).Value, keyWord) > 0 Then '    If Application.CountIf(Rows(idx), "*" & keyWord & "*") > 0 Then       Rows(idx).Delete     End If   Next idx End If End Sub このマクロを、 「特定の文字列が含まれている行のみを残し、それ以外を削除する」 というマクロに変更したいと思っています。 是非ご回答お願いいたします。

  • vba セルに入力した時間をマクロで受け取るには?

    はじめまして、 マクロを使ってタイマーをセットしているのですが、 たとえば1行A列に9:00:00という時間をセットして、 それをマクロでうけとりmacro1というマクロを時間とおりに動かすようにタイマーにせっとします。 プログラムは以下のとおりなのですが、 TimeValue(Cells(1, 1))のところがうまくいきません。 解決方法を教えてください。 よろしくお願い思案す。 Set_timer = TimeValue(Cells(1, 1)) Cells(5, 3) = "設定完了" MsgBox "タイマーを設定しました。" Application.OnTime TimeValue(Set_timer), "macro1"

  • マクロについて

    マクロ初心者です。 下記の操作をマクロで行いたいのですがうまくいかないのでどうすればうまくマクロが作動するのか教えて頂ければと思います。4の操作までは正しく作動しましたが5以降に困っています。。。 どなたかお願いしますmm (1) A列にフィルターをかけて[??????}を含むものを選択 (2). 1に.該当するもB列のDataを値のみ数値と値のClear (3) 2の後に再びA列で[??????]を含まないものを選択 (4)  3に該当するA列のDataを数値と値のClear (5)  4の操作で空白となったセルに=上のセルという計算式の指示を出す (6) すべて値貼り付けをし、空白のセルを削除する ※Dataの行数は毎回作業時に変更があります。 ※Dataは数値だけではなく文字列も含んでいます 失敗したマクロ--------------------------------------------- Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=*[??????]*", Operator:=xlAnd Columns("B:B").Select Selection.ClearContents Selection.AutoFilter Field:=1, Criteria1:="<>*[??????]*", Operator:=xlAnd Columns("A:A").Select Selection.ClearContents For i = 3 To [A65536].End(xlUp).Row If Cells(i, "A") = "" Then Cells(i - 1, "A").Copy Cells(i, "A") Next i End Sub -----------------------------------------------------------

  • マクロについて

    マクロ初心者です。 下記の操作をマクロで行いたいのですがうまくいかないのでどうすればうまくマクロが作動するのか教えて頂ければと思います。4の操作までは正しく作動しましたが5以降に困っています。。。 どなたかお願いしますmm (1) A列にフィルターをかけて[??????}を含むものを選択 (2). 1に.該当するもB列のDataを値のみ数値と値のClear (3) 2の後に再びA列で[??????]を含まないものを選択 (4)  3に該当するA列のDataを数値と値のClear (5)  4の操作で空白となったセルに=上のセルという計算式の指示を出す (6) すべて値貼り付けをし、空白のセルを削除する ※Dataの行数は毎回作業時に変更があります。 ※Dataは数値だけではなく文字列も含んでいます 失敗したマクロ--------------------------------------------- Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=*[??????]*", Operator:=xlAnd Columns("B:B").Select Selection.ClearContents Selection.AutoFilter Field:=1, Criteria1:="<>*[??????]*", Operator:=xlAnd Columns("A:A").Select Selection.ClearContents For i = 3 To [A65536].End(xlUp).Row If Cells(i, "A") = "" Then Cells(i - 1, "A").Copy Cells(i, "A") Next i End Sub -----------------------------------------------------------

  • 【Excel】セルに入れた数字だけ同じことを繰り返す【VBA】

    A1のセルに数値を入れ、マクロを実行させたときに A1に入れた数値だけ同じ行動を行うというプログラムを作りたいのですが、 うまくいきません。 VBAで実行させたいです。 Sub Macro1() c = 1 For a = 1 To 54 Cells(2, 2) = a b = Int(54 * Rnd + 1) If Cells(10, b) = 0 Then Cells(10, b) = c: c = c + 1: Cells(1, a) = b Else a = a - 1 Next a End Sub 未だたたき台なプログラムですが、これを元に作成できないでしょうか?

  • RSSマクロ

    winxp he sp3, excel2003 1. 問合せ 参考a.マクロでは、iNumber = 6501 1個となっています。 これを、銘柄txtから読み込んで、下記のような結果を表示したいのです。 2. 銘柄.txt 約100個: 6501,日立 6502,東芝 6503,三菱電機 3. マクロ結果: コード,銘柄,現在値,高値,安値 6501,日立,770,785,765 6502,東芝,765,779,758 6503,三菱電機,780,985,970 参考: a. Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/9/3 ユーザー名 : Cells(1, 1) = "コード": Cells(1, 2) = "銘柄": Cells(1, 3) = "現在値" Cells(1, 4) = "高値": Cells(1, 5) = "安値" Dim iRow As Integer '行指定 Dim iNumber As Integer 'A列4桁数字 iNumber = 6501 'A列の4桁数字初期指定 iRow = 2 '2行目 Cells(iRow, 1).Select 'A列をセレクト(アクティブ化) Cells(iRow, 1) = iNumber 'A列に数字を入力 Cells(iRow, 2) = "=RSS|'" & iNumber & ".T'!銘柄名称" 'B列に式を入力 Cells(iRow, 3) = "=RSS|'" & iNumber & ".T'!現在値" 'C列に式を入力 Cells(iRow, 4) = "=RSS|'" & iNumber & ".T'!高値" 'D列に式を入力 Cells(iRow, 5) = "=RSS|'" & iNumber & ".T'!安値" 'E列に式を入力 End Sub b. マクロ結果: コード,銘柄,現在値,高値,安値 6501,日立,809,815,805 よろしくお願いします。

専門家に質問してみよう