Excelのグレードの違いでVBAが動かない?

このQ&Aのポイント
  • Excelのグレードの違いでVBAが正常に動作しない問題が発生しています。
  • 自宅で動作確認したVBAを会社のPCに書き写しましたが、動かない状態が続いています。
  • 解決方法をインターネットで調べましたが、問題の解決には至っていません。
回答を見る
  • ベストアンサー

Excelのグレード?の違いでVBAが動かない?

今週2日のテレワークで会社のPCでExcelで簡単なシステムを組んでいます。 本日は週末でVPN接続はまずいので、会社PCはオフラインで作業してす。 本題ですが、自宅PCで組んで動作確認して、会社PCに書き写したのですが、動いてくれません。 ネットでも調べてみたのですが、解決できません。 お力をお貸しください。 自宅 Microsoft365 Microsoft® Excel® for Microsoft 365 MSO (16.0.14026.20202) 64 ビット 会社 Microsoft office Home and business 2019 Microsoft® Excel® 2019 MSO (16.0.14026.20202) 32 ビット Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then If Target = "" Then Target.Offset(, 1) = "" Target.Offset(, 2) = "" Else Target.Offset(, 1) = Format(Now, "yyyy/m/d") Target.Offset(, 2) = Format(Now, "ampmh時m分s秒") End If End If End Sub

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

  • ベストアンサー
回答No.6

ご自身のPCのExcelが、マクロの設定を確かめてみてください。 ファイル→オプション→トラストセンター→トラストセンターの設定→マクロの設定 の順にクリックし 「すべてのマクロを有効にする(推奨しません。危険なコードが実行される可能性があります)(E) に●が打たれていないのではないでしょうか?

thincl
質問者

お礼

ありがとうございます。 設定したら、動くようになりました。 他のコードは動いていたので、わからなかったです。

その他の回答 (5)

  • kkkkkm
  • ベストアンサー率65% (1618/2457)
回答No.5

書いた場所が間違っているということはないのでしょうか。 Sheet1でやりたいのにSheet1以外のモジュールに書いたとかです。 まさかとは思いますが、会社のPCではマクロが無効になっているとか。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.4

Excelにグレードは無いので、2016とか2019とか365とかのバージョンのことですかね。 この程度の簡単なプログラムでバージョンの際は無いので、何かのミスでしょう。 自分が絶対にミスしているという前提で調べましょう。

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

どうでもよいことだが、参考に。 質問するなら (1)何をしたいのか、文章で書け (2)どういう予想外なのか、文章で書け >動いてくれません なんて、一般すぎて、エラー追及のためには、読者に何も言ってないの同じ。 ーー 質問のコードを貼り付けて実行したら、それなりの結果が出るが、そんなことをする意味は分からない。 A列にデータを入れたら、入力した時刻をB列に出したいのか? なぜB,C列を、標示形式を変えて、分けるのか? >Excelのグレード この語句は、あまり聞かないが、バージョンの違いのこと? プロフェッショナルとか、ホームアンドビジネスその他のようなこと? Googleで「エクセル  グレードとは」で照会して℗出ないが?

noname#252332
noname#252332
回答No.2

 Worksheet_Changeの中でワークシートをチェンジして多重にイベントを発生してるからかと思ったんですがうちではWindows10 EXCEL2013(32bit)、Windows10 EXCEL2019(64bit)共動きました。VBAが重い時に、動作はしていてセルも書き換わっているが画面が更新されず動いてないように見えることがありますね。画面をスクロールして一度画面の外に出して戻してやると実は正しく書き換わっていることが見えたりします。想像ですが。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

Excelのグレードの違いでVBAが動かないこともあります。

関連するQ&A

  • VBAについて

    以下のプログラムは、1年間の価格合計を求めるプログラムです。 これを実行するとうまくいくこともありますが、エラーが起きることもあります。 どうやら下記コードが原因のようなのですが、間違いがわかりません。 Target.Offset(0, 1).Value = run * (13 - month) どこが間違っているのでしょうか。 また最終的に、A行かB行のどちらかが更新されたときにこのプログラムを 実行させたいのですが、方法がわかりません。 無知な質問ではありますが、どなたか教えてください。 --------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim month As Integer Dim run As Integer If Intersect(Target, Range("A25:A35")) Is Nothing Then Exit Sub Else If Target.Offset(0, -2).Value <> "" Then month = Target.Offset(0, -2).Value month = month - 3 If month = -2 Then month = 10 ElseIf month = -1 Then month = 11 ElseIf month = 0 Then month = 12 End If run = Target.Offset(0, 0).Value Target.Offset(0, 1).Value = run * (13 - month) End If End If End Sub

  • エクセルのコード表示についてですが。。

    Private Sub Worksheet_Change(ByVal Target As Range) (1)If Target.Column <> 4 Then Exit Sub Target.Offset(0, -3) = Now()   ⇒特定のセルに日時自動表示 (2)If Target.Column <> 4 Then Exit Sub  Target.Offset(0, 1) = "DUMMY"  ⇒特定のセルにDUMMYと自動表示 (3)If Target.Column = 4 Then  Target.Offset(0, -2) = "1"  Else             ⇒特定のセルに1と自動表示   (4)If Target.Column = 35 Then  Target.Offset(0, -2) = "2"  ⇒特定のセルに2と自動表示  End If  End If (5)If Target.Value = "T" Or Target.Value = "t" Then  Target.Value = "田中"    ⇒Tと入力すると田中と変換して表示  ElseIf Target.Value = "H" Or Target.Value = "h" Then  Target.Value = "林"     ⇒hと入力すると林と変換して表示  End If  End Sub 上のようなコードを入力すると(3)と(5)が機能しません。。なぜでしょうか??コードの表示がまずいのでしょうか??

  • エクセル VBA について

    エクセルで、 ダブルクリックしたら"*"を表示したい範囲に【入力】という名前をつけ、 ダブルクリックしたら9つ左のセルの内容を表示したい範囲に【金額】という名前をつけ、 二つの構文?をVisual Basicに作成したんですが、エラーが出てしまいます。 ひとつずつだと上手くいくのですが、なぜでしょうか? わかる方教えてください。 あと申し訳ないのですが、VBAはまったくわからないため、ネット上で構文をコピーして貼り付けました。 そんな者でもわかる修正の説明をお願いいたします。 以下が作成し、エラーとなってしまう構文です。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "金額" If Target.Value = "" Then Target.Value = Target.Offset(0, -9).Value Cancel = True End If End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Const RangeName As String = "入力" If Not Intersect(Range(RangeName), Target) Is Nothing Then Cancel = True If Target = "*" Then Target = "" Else Target = "*" End If End If End Sub

  • excel BVでTarget.Offset

    勤務表を作成しています。 勤務「C」の翌日は「休」にするところまでは出来たのですが、「C」が連続する日は「休」も連続させたいのです。例)3日と4日が「C」の時は、5日、6日は連休にしたいのですが、作った下のマクロでは7日も「休」になってしまいます。何が間違ってるんでしょうか?。 If Target.Count > 1 Then Exit Subの意味も良く解っていませんが…。 どなたか教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Value = "C" Then Target.Offset(0, 1).Value = ("休") End If If Target.Offset(0, -2).Value = "C" Then Target.Offset(0, 1).Value = ("休") End If End Sub

  • エクセル VBA の質問です。

    A2~A20までのセルに文字を入力した段階で、それぞれB2~B20に入力日時を入れるVBAを以下のように組んでいます。 しかし、同様の条件を同一シートのE2~E20・F2~F20にも入力・自動表示できるようにしなければならなくなり、困っています。 どのように記述を変えればよいのか、教えていただけたらと思います。 宜しく御願いいたします。 Sub Worksheet_change(ByVal Target As Range) Dim Rng As Range Dim c As Range Set Rng = Range("A2:A20") If Intersect(Target,Rng) Is Nothing Then Exit Sub For Each c In Intersect(Target,Rng) If Not IsEmpty(c) Then c.Offset(, 1).Value = Now Else c.Offset(, 1).ClearContents End If Next Rng.Offset(, 1).EntireColumn.AutoFit End Sub 申し訳ありませんが、何卒、宜しく御願いいたします。

  • Excel 2000です。VBAを改造していただきたいのですが

    入荷品のチェックシートです。B列に受領数を入力するとA列に年月日が記録されるVBAを作っていただき必要なブックのシートごとにコピーして使っていました。全品入荷完了後 別のロットにシートタブの名目を書き換えて再利用します。  ('複数セルが選択された場合、動作をキャンセル  がなぜ必要かも理解できないVBAの勉強を挫折の高齢者です) B列のセル一個づつ選択削除でないとB列が空白になるだけでA列には日付が残ります。複数のセル選択で一気に日付を削除したいのです。 お助けください。 Private Sub Worksheet_Change(ByVal Target As Range) '複数セルが選択された場合、動作をキャンセル If Target.Count <> 1 Then Exit Sub If Intersect(Target, Range("B5:B1000")) Is Nothing Then Exit Sub 'B5:B1000"の範囲外は除外 Application.EnableEvents = False If Target.Value <> "" Then If IsDate(Target.Offset(, -1).Value) Then GoTo EXIT_LABEL '日付が記入済の場合は実行しない Target.Offset(, -1).Value = Format$(Now, "mm/dd hh:mm") Else 'セルを空白にした場合、日付を削除 Target.Offset(, -1).Value = "" End If EXIT_LABEL: Application.EnableEvents = True End Sub

  • Excel VBAについて

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Intersect(Target, Range("F:F")) Is Nothing Then Exit Sub Application.Goto Worksheets("人件費").Range("A1") Worksheets("人件費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value cancel = True End Sub Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, cancel As Boolean) If Intersect(Target, Range("G:G")) Is Nothing Then Exit Sub Application.Goto Worksheets("外注費").Range("A1") Worksheets("外注費").Cells(Rows.Count, "A").End(xlUp).Offset(1).Value = Target.Offset(, -5).Value cancel = True End Sub 上の指令はFの列をダブルクリックすると人件費のシートが開いてAある値を人件費の新しいセルのAに代入する指令ですが それをG列ダブルクリックで外注費シートに同じようにやろうと思いましたが出来ません。 たぶん根本的に書き方が間違っているのかと思われますが、ご指導のほどお願いします。

  • Excelのworksheetどこ間違えてますか?

    Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1:A65536")) Is Nothing Then Exit Sub If 0 < Target.Value And Target.Value < 6 Then Target.Offset(0, 1).Value = Format(Time, "h時m分s秒") Else Target.Offset(0, 1).Value = "" End If End Sub 以前、このサイトで教えてもらったワークシートのプログラムです。 簡単に言えばA列に1から5までの値を入れれば現在時間をB列に 表示し、それ以外の場合は何もいれないと言ったものです。 以前はできたんですが最近また入れるとできなくなっていました。 どこかおかしいとこありますでしょうか??

  • EXCEL VBAについて教えてください

    はじめまして。 過去ログに私のやりたいような内容を探していたらこのような下記のエクセルVBAがあったので、教えて頂きたいです。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub If Target.Value = "" Then Exit Sub x = Target.Value With Application .ScreenUpdating = False .EnableEvents = False .Undo y = Target.Value Target.Value = x + y .EnableEvents = True .ScreenUpdating = True End With With Cells(ActiveSheet.Rows.Count, "C").End(xlUp) .Offset(1, 0).Value = x .Offset(1, 1).Value = Time() End With End Sub A1に入力するたびに同一セルに加算。 A1をクリアできる。 C列に入力履歴、D列に入力時間を記録。 If Target.Address <> "$A$1" Then Exit Sub の$A$1を変えることによって他のセルにも設定できる。 と、いう内容なのですが、これをたとえば同一シートのA1~E10のセルとA12~E22にも同じよう別々に処理できるように設定したいのですが、どのようにすればいいのでしょうか?ちなみにA11~E11とA23~E23は合計を表示するセルにしたいです。 Excelのバージョンは2003です。 よろしくお願い致します

  • VBAの記録を追加したい

    エクセル2002使用です。 VBAで次のコードを使っています。 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range Set Target = Intersect(Range("C:C"), Target) If Target Is Nothing Then Exit Sub For Each Rng In Target If Rng.Value <> "" Then Rng.Offset(, -2).Value = Now Else ' (*) Rng.Offset(, -2).Value = "" ' (*) End If Next Rng End Sub (C列のセルに何か入力されると、A列の同じ行にその時刻が入る。) 同じシートで、F列に何か入力されるとE列の同じ行にその時刻が入るように書き直したいのですが、どうすればいいのでしょうか? すいませんが、よろしくお願いします。

専門家に質問してみよう