• ベストアンサー

エクセル マクロ 数式を入れたい!!

超初心者です。よろしくお願いします。 A1に時間が入っており、B1にA1の6時間前(=A1+1-"06:00")の時間を入れたいです。日付は無視しており、アクティブセルはC1です。 時間ではなく、数式(=A1+1-"06:00")をそのままB1に入れたいのですがこのようになってしまいました。 ActiveCell.Offset(0, -1) = "=ActiveCell.Offset(0, -2)+1-"06:00"" 文字が赤くなってエラーになってしまうのですが、どこを訂正するべきでしょうか。

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

  • ベストアンサー
  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.2

No1です。 そういうことなら ActiveCell.Offset(, -1).FormulaR1C1 = "=RC[-1]+1-""06:00""" では?

c7_d30ea200
質問者

お礼

回答ありがとうございます。R1C1の使い方にあまり慣れていないのですが、できたのでこれでやってみようと思います!

その他の回答 (1)

  • emaxemax
  • ベストアンサー率35% (43/121)
回答No.1

アクティブセルがどこであろうと、アクティブシートのB1にその式をいれたいなら Range("B1").Formula = "=A1+1-""06:00""" ではないでしょうか。

c7_d30ea200
質問者

お礼

回答ありがとうございます。アクティブセルの左側(B1)に回答を入れたいです。なのでC2がアクティブのときはB2に数式を入れたいです。 A列   B列        C列   23:00  =A1+1-"06:00" ← アクティブセルのとき 22:00  =A2+1-"06:00" ← アクティブセルのとき 21:00  =A3+1-"06:00" ← アクティブセルのとき という感じに入れたいです。

関連するQ&A

  • エクセル マクロ VBA について

    以下はセルB2.C2.D2.E2.F2をアクティブセルから右方向へ入力しています。ここでの入力とは"=" + "セルB2" というものです。一つずつ入力している為マクロが長くなります。短くシンプルなものにしたいです。ご教示お願いします。 ActiveCell.FormulaR1C1 = "=R2C2" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C3" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C4" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C5" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C6"

  • エクセルのマクロの作り方

    マクロ初心者です。 今勉強している最中ですが、以下の物を作りました。 Sub Macro1() ' ' Macro1 Macro ' ' Sheets("Sheet2").Select Range("A4").Select ActiveCell.Formula = "=Sheet1!IM4" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=Sheet1!R[-3]C[240]" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=sheet1!r[-6]c[234]" ActiveCell.Offset(3, 0).Select ActiveCell.FormulaR1C1 = "=sheet1!r[-9]c[228]" End Sub わかる人はもうお分かりかもしれませんが、ループという機能でもっと簡単にできるように思います。 これを手打ちしていくのであれば、手間がかかってしまい、マクロの意味がないというか… [-3]→[-6]→[-9]と、縦に参照したいセルが3つずつ上がっていき、横には左に6ずつ移動していきます。正確にはアクティブセルが移動しているのでってことなのでしょうけど…(たぶん…) 最初が絶対参照になっていて2回目以降から相対参照になっているのは、1回目で絶対参照にすれば、そのセルを基準として相対参照でRC[-6]でループさせられるかなっと思ったからです。。。結局そうなりませんでしたが… 作りたいのは、sheet2のA4とsheet1のIM4、sheet2のA7とsheet1のIG4をイコールにし、それを間隔は同じでsheet2のA127まで繰り返したものです。 本を買って、ネットで検索して色々とやったのですが、どうにもわからなく。。。 どうかよろしくお願いします。

  • エクセルのマクロでゴールシークの繰り返し

    こんにちは。マクロ初心者です。 現在、エクセルのゴールシーク機能を繰り返し使うためにマクロを作っています。 下のプログラムでアクティブセルのゴールシークは行えるようになったのですが、これをアクティブセルが空白になるまで繰り返すことはできますか? できればiを使わないようにしたいのですが‥ ActiveCell.goalseek Goal:=ActiveCell.Offset(0, -1).Value, ChangingCell:=ActiveCell.Offset(0, -3).Range( _ "A1") ちなみに違う人が使っていた Do Until ActiveCell.Previous.Value = "" を使おうと思ったらパソコンが動かなくなってしまいました‥ 基本ができていない為にめちゃくちゃなことをしているのかもしれませんが、どうかアドバイスをお願い致します。

  • EXCELのマクロについて

    お世話になっております。 以下のマクロを1万行分繰り返したいのですが、回数を1万回と指定する構文を 教えてください。よろしくお願いします。 Sub Macro16() ' ' Macro16 Macro ' ' Keyboard Shortcut: Ctrl+Shift+Z ' ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(-1, 0).Range("A1:M1").Select Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "7/5/1905" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7/6/1905" ActiveCell.Offset(1, -2).Range("A1").Select End Sub

  • エクセルのマクロで上のセルの数式を相対参照でコピーしたい(フィルみたいに)

    エクセル2002で以下のようなシートがあります。  | A | B | C | D --------------------------- 1 |  1| 10| 100| =C1-1 --------------------------- 2 |    |    |    |  ここで、B2に文字が入力されると、A1とC1とD1をコピー、B2が消されるとA2とC2とD2を消去するマクロを書きました。 現在以下のように書いていますが、これでは入力位置がB2だろうがB3だろうかB20だろうが、D2と同じ数式になってしまいます。B5に入力されたならD5の数式はC5-1にしたいのですが、このような入力をするにはどうすればよいでしょうか。 ちなみにD列の数式は本当はもっと複雑です(この数式ならTarget.Offset(0, -4).Value = Int(Target.Offset(-1, -4).Value + 1でもたぶんいい・・・はず・・・) オートフィルを使えば!と思いましたが、Target・・・では使い方がわかりません。 Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False If Target.Column <> 2 Then Exit Sub   //B列以外への文字入力はマクロ停止(のつもり) If Target.Value <> "" Then Target.Offset(0, -1).Value = Int(Target.Offset(-1, -1).Value + 1)   //A1に+1したものをコピー Target.Offset(0, 1).Value = Target.Offset(-1, 1).Value   //C2にC1をコピー Target.Offset(0, 2).Formula = Target.Offset(-1, 2).Formula  //D2にD1の数式をコピー◆ここが問題! Else Range(Target.Offset(0, -1), Target.Offset(0, 4)).ClearContents End If Application.EnableEvents = True End Sub

  • VBA アクティブセルに1行目の日付を入力したい

    こんにちは、VBA初心者です。 アドバイスお願いします。 1行目に日付が入力してあります。 任意のセルを選択し、マクロを実行すると1行目の日付(日のみ)がそのセルに入力されるマクロを作っています。 例えば、    A       B      C 1 2008/11/1  2008/11/2  2008/11/3 2 3 4          2  5 セルB4を選択して実行するとB4に2が入力され、セルC3を選択して実行するとC3に3と入力するようにしたいです。 私なりに考えたのが下記のコードです。 Sub アクティブセルに1行目の日付を入力() Dim hidukesyutoku As Byte Dim dd As Date dd = Date Do While ActiveCell.Value <> dd ActiveCell.Offset(-1).Activate hidukesyutoku = hidukesyutoku + 1 Loop ActiveCell.Copy Destination:=ActiveCell.Cells(hidukesyutoku + 1, 1) End Sub Do Whileを使って日付があるまでアクティブセルをオフセットしていくというものですが、このコードのままでは、dd=dateとなっているため今日の日付にしか反応しません。 今日だけではなく、日付というだけで反応するようにするにはどうしたらいいでしょうか? また、このコードは、処理にも時間がかかりあまりいいものではないと思います。(初心者の私では、これが限界でした。) もっと早いコードの作り方があれば教えて下さい。

  • 配列数式を用いたエクセルマクロの使い方

    セルA1に「=SUM((A1:A12=5)*(B1:B12=""A"")*C1:C12)」という風に数式を表示形式を文字列として入れておき、他のセルに、この計算結果を入れるたいのですが、マクロでどのようにすればいいか、ご存知のかたがいらっしゃいましたら教えてください。 ちなみに、使用したい数式(セルA1に入れているもの)は配列数式です。

  • エクセルのVBAのコード内で指定セルを相対参照する方法をお教えください。

    ActiveCell.Offset(0, 2).Range("A1:C1").Select 前記のコードは選択範囲をアクティブセルより相対参照にて指定するものですが、下表にてアクティブセルをA1として、コード内のC1に換えてA1(アクティブセル)の数値によって選択範囲とするセル数を指定するにはどうしたらよいでしょうか?(アクティブセルをA2,A3とした実行結果を2,3行のようにしたいのです)  A B C D E F 1 3 * * * 2 4 * * * *  3 2 * *

  • エクセル 複数条件で検索する数式を教えてください。

    社員の作業時間入力シートが2つあり、それぞれに入力しているため、入力ミスによる誤差が生じます。それをチェックしています。 検索条件が複数になる場合の計算式を教えてください。 [sheet1]   A   B   C   D  E 1 社員CD 日付  作業時間1 作業時間2  誤差 2 1000 2008/1/1   3.5  ここに数式   =C2-D2 3 1000 2008/1/2  2.5    数式    =C3-D3 4 1001 2008/1/1   5.0    数式    =C4-D4 [sheet2]   A   B   C    1 社員CD 日付  作業時間2 2 1000 2008/1/1  3.0 3 1000 2008/1/3   1.5 4 1001 2008/1/1  5.5 sheet1のD列にsheet2のC列を表示させたいのですが、 条件はA列とB列が一致するものになります。 A・B列が文字列ではないため、1列挿入して=A2&B2列を作成することができませんでした。 D列に数式をいれる事で一発で表示させる方法を教えてください。

  • 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

専門家に質問してみよう