かれこれ3~4年ものの悩みです。
エクセルでワークシートを作成中、戯れにマクロを作成、飽きたので削除してから保存したのですが、以後そのファイルを起動する度に「このファイルにはマクロが含まれています(マクロを有効にする/無効にする)」というダイアログが出てきます。
 人に扱わせる時にうっとうしいので、出ないようにしたいのですが、完全に削除仕切れていないとすれば、どこをいじれば良いのでしょう?
※ツールバーの「マクロ」メニューで確認しても、マクロは確認できません。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

そのブックをExcelで開いて、Excelの「ツール」-「マクロ」-「Visual Basic Editor」で"Visual Basic Editor"を起動すると、左側の『プロジェクト VBAProject』の所に、『標準モジュール』というのがあると思います。


(『プロジェクト』が表示されていないときは、VBEの「ツール」-「オプション」-「ドッキング」タブの『プロジェクトエクスプローラ』にチェックを入れれば表示されます。)

その『標準モジュール』に"Module1"とか"Module2"とかがあって、何もマクロの記述のないものがあれば、それが削除しきれていないマクロの残骸です。

その"Module1"とか"Module2"とかを右クリックして、『Moduleの解放』をクリックしてモジュールを解放した後、ブックを上書き保存すれば、マクロは削除できると思います。
    • good
    • 0
この回答へのお礼

できました!
VBAとかVBEとか聞くと、「あーウイルスの素、触らんとこ」と、今まで触れませんでした。根本解決して良かったです、ありがとうございました!

お礼日時:2001/12/08 01:18

シートのデータだけをコピーして新しいブックにコピーしたら


出なくなる気もしますがいかがですか?
    • good
    • 0
この回答へのお礼

なるほど!
マクロの知識がなくても対応できるのですね。
どうも知恵を使わなくなってたようです。ありがとうございました。

お礼日時:2001/12/08 01:15

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qexcelのマクロでrangeの選択がうまくいきません。

excelのマクロでrangeの選択がうまくいきません。
以下のマクロをsheet2に書きました。testcopyは動きますが、testcopy2は動きません。なぜなのでしょうか。どうすればいいのでしょうか。それ以外のマクロの部分との関係から、cellsを使い、数字を使ってrangeの処理をしたいのです。よろしくお願いします。

Sub testcopy()
Worksheets("sheet1").Range("B3:C10").Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Sub testcopy2()
Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
Worksheets("sheet2").Range("e5").Select
ActiveSheet.Paste
End Sub

Aベストアンサー

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
---------------
●testcopy●

これが動作するのは
Sheet【2】がアクティブな状態で実行する場合です

Sheet【1】がアクティブな状態で実行すると
  Worksheets("sheet2").Range("e5").Select
ここで、問題点(1)の理由によりエラー。
で、先ずシートを選択、次にセルを選択と2段階にしないといけません。

  Worksheets("sheet2").Select
  ActiveSheet.Range("E5").Select

----------------
●testcopy2●

▼Sheet【1】がアクティブな状態で実行
  testcopyと同じ場所、同じ理由でエラー

▼Sheet【2】がアクティブな状態で実行
  Worksheets("sheet1").Range(Cells(3, 2), Cells(10, 3)).Copy
  ここで、問題点(2)により、エラー。
 
 Cellsの前にシートオブジェクトがないので
 Cells(3, 2), Cells(10, 3)はアクティブなSheet【2】のセルとみなされ
 (★実際はちょと違う場合もありますが今回はそう★)

 Worksheets("sheet1").Range(  ← Sheet【1】
 Cells(3, 2), Cells(10, 3))   ← Sheet【2】

このようにSheet【1】【2】が混在していることになり、エラー
で、Cellsの前にシートを付加してセルがどのシートのセルか明示してやる

Worksheets("sheet1").Range(Worksheets("sheet1").Cells(3, 2), Worksheets("sheet1").Cells(10, 3)).Copy
  
---------------------------------
で、質問者のコードを修正すると
'-------------
Sub testcopy()
 Worksheets("sheet1").Range("B3:C10").Copy
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'-------------

Sub testcopy2()
 With Worksheets("sheet1")
   .Range(.Cells(3, 2), .Cells(10, 3)).Copy
 End With
 With Worksheets("sheet2")
   .Select
   .Range("E5").Select
   .Paste
 End With
End Sub
'--------------

●ただ今回のような単純なコピーの場合は
 既出の回答にあるようにSelectなしで書くのがふうつです。
'-----------
Sub testcopy111()
 Worksheets("sheet1")
   .Range("B3:C10").Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------
Sub testcopy222()
 Worksheets("sheet1")
  .Range(.Cells(3, 2), .Cells(10, 3)).Copy Worksheets("sheet2").Range("E5")
 End With
End Sub
'-----------

今回の件は重要事柄ですので覚えておきましょう。
以上です。
 

>testcopyは動きますが、testcopy2は動きません

testcopyは「動作したり、しなかったりする」が正しい表現です。
  要するに今回testcopyが動いたのは▼たまたま▼ということです。

testcopy2 は当然ながらエラーになります。
何れにしろ、両方ともに問題があるということです。
その問題点は2つあります。

(1)アクティブでないシートのセルはSelect(Activate)できない
(2)複数のシートを扱うときのセルの参照は
   そのセルがどのシートのセルなのか明示する必要がある


これを踏まえて、、、、
-...続きを読む

Q【EXCEL-VBA】シートの有無を確認してからワークシートを削除したい

お世話になっております。

ワークシートの有無を確認してからシートを削除するマクロを作りたいと思っています。
特定の名前のシートを削除するマクロを以前、こちらで頂いたので、
それをカスタマイズしようと思ったのですが、、、まだ実力不足でできませんでした。

以前いただいたマクロはこちらです
「EXCEL-VBA ワークシートを4枚削除するマクロを作成したい」
https://bitly.is/1g3AhR6

カスタマイズできなかった理由ですが、
確認するシート名がSheetAのA20、A21、A22にあります。

要するに取得したA20、A21、A22値を元にワークシートの有無を
確認しなければならないのですが、そのためのコードが書けませんでした。

すいませんが詳しい方、説明の上手な方、直接、コードで説明できる方、
教えて下さい。よろしくお願いします。

コードはリンク先のものを利用して頂いてもOKですし、
新規に書き上げて頂いてもOKです。

お手数ですが、よろしくお願いします。

追記
前回、教えて頂いたtatsu99さん、tom04さん、bonaronさん、
ありがとうございました。

お世話になっております。

ワークシートの有無を確認してからシートを削除するマクロを作りたいと思っています。
特定の名前のシートを削除するマクロを以前、こちらで頂いたので、
それをカスタマイズしようと思ったのですが、、、まだ実力不足でできませんでした。

以前いただいたマクロはこちらです
「EXCEL-VBA ワークシートを4枚削除するマクロを作成したい」
https://bitly.is/1g3AhR6

カスタマイズできなかった理由ですが、
確認するシート名がSheetAのA20、A21、A22にあります。

要する...続きを読む

Aベストアンサー

No3です。

https://oshiete.goo.ne.jp/qa/9543475.html
の関連質問だったのですね?

No.3は単純にシートを削除するだけで
Sheet1のA20~A22セルのシート名が存在しない場合のメッセージは表示させていませんでした。
↓のコードにしてみてください。

Sub Sample2()
Dim c As Range, k As Long, myStr As String, myFlg As Boolean
For Each c In Worksheets("Sheet1").Range("A20:A22")
myFlg = False
For k = Worksheets.Count To 2 Step -1
If Worksheets(k).Name = c Then
myFlg = True
Application.DisplayAlerts = False
Worksheets(k).Delete
Application.DisplayAlerts = True
End If
Next k
If myFlg = False Then
myStr = myStr & "[" & c & "]" & ","
End If
Next c
If myStr <> "" Then
MsgBox "Sheet" & Left(myStr, Len(myStr) - 1) & "はありませんでした。"
End If
End Sub

※ すべてのシートが存在した場合は
メッセージボックスは表示されません。m(_ _)m

No3です。

https://oshiete.goo.ne.jp/qa/9543475.html
の関連質問だったのですね?

No.3は単純にシートを削除するだけで
Sheet1のA20~A22セルのシート名が存在しない場合のメッセージは表示させていませんでした。
↓のコードにしてみてください。

Sub Sample2()
Dim c As Range, k As Long, myStr As String, myFlg As Boolean
For Each c In Worksheets("Sheet1").Range("A20:A22")
myFlg = False
For k = Worksheets.Count To 2 Step -1
If Worksheets(k).Name = c Then
...続きを読む

QRange("K" & TR).Formula = で、セルにマクロで式を書きたいのですが

よろしくお願いします。いつもgooの皆さんには大変お世話になっています
エクセルは2013です

わけあって、セルにマクロで式を書いています
例えば TRは行を表す変数ですが
Range("K" & TR).Formula = "=IFERROR(AY" & TR & ","""")" と書いたマクロの結果は
=IFERROR(AY43,"") という式がRange("K" & TR) に書かれます

それでは、いま、マクロで下記のように書いているコード(TRは行を表す変数です)
Range("Z" & i) = Range("Z" & i - 1) - Range("AG" & TR) * 10000 は
Range("Z" & i).Formula = 
で書く場合、=の右側をどう書いたら良いでしょうか

色々とやってみたのですが狙った式になりません

この場合 変数 i を使っているので、もしかしたら、そもそも無理なことでしょうか

うまく説明できていませんがよろしくお願いします

Aベストアンサー

No.1です。申し訳ありません大ボケな回答をしていましました。

要するに↓ってことですよね? また勘違いしていたらスミマセン。

Range("Z" & i).Formula = "=Z" & i - 1 & "-AG" & TR & " * 10000"

Qエクセルマクロについて質問です ファイルを開くマクロをワイルドカードを使用して作成したいです

エクセルマクロの初心者です
ファイルを開くマクロを作成したいです。

対象のファイルは、
 商品コード(5桁の数字) スペース 商品名
 たとえば 40157 ベーコンスライス500g
という名前が付いており、100個以上同一のフォルダに入っています。商品コードのみを入力して、マクロを実行すると目的のファイルが開ける。という形式で作りたいです。
商品名まで入力し、開きたいファイル名と完全に一致させれば

Sub 栄養計算()
'
Workbooks.Open Filename:="D:\ekuseru\" & Range("E4").Value & ".xls"

End Sub

で実行できたのですが商品名まで入力するは大変です。
そこで、ワイルドカードを使えばコードのみの入力でできるカナと思い試してみたのですがうまくいきませんでした。一応調べてみて Like関数を使うとできるという話を見つけたのですが、私が未熟なのかうまくできませんでした。
とても初歩的な質問で恐縮なのですが、自分では完全に行き詰ってしまいましたので、皆様の力をお借りしたいです。お願いします。

エクセルマクロの初心者です
ファイルを開くマクロを作成したいです。

対象のファイルは、
 商品コード(5桁の数字) スペース 商品名
 たとえば 40157 ベーコンスライス500g
という名前が付いており、100個以上同一のフォルダに入っています。商品コードのみを入力して、マクロを実行すると目的のファイルが開ける。という形式で作りたいです。
商品名まで入力し、開きたいファイル名と完全に一致させれば

Sub 栄養計算()
'
Workbooks.Open Filename:="D:\ekuseru\" & Range("E4").Value...続きを読む

Aベストアンサー

ワイルドカードでやるなら、Dirで該当ファイルがあるか調べて開いては?
ワイルドカードで無い場合でも、ファイルを開く前に存在するか否かを確認するのは基本です。

Sub 栄養計算()
 Dim sTarget As String
 sTarget = Dir("D:\ekuseru\" & Range("E4").Value & "*.xls")
 If sTarget <> "" Then
  Workbooks.Open Filename:="D:\ekuseru\" & sTarget
 Else
  MsgBox ("該当ファイル無し")
 End If
End Sub

商品コードで始まるファイルが複数ある場合は考慮していません。

QVBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

*********************************************************
*********************************************************
Sub 日報別ファイルに保存したい1()
Worksheets("日報").Range("A3:AF36").Copy
With Workbooks.Add
Cells.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Cells.Select
Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False

ApplicationDisplayAlerts = True '同名FILEが存在する場合'
ActiveWorkbook.SaveAs Filename:= _
"c:\日報\" & ActiveSheet.Range("J2") & "年" & ActiveSheet.Range("l2") & "月" & ActiveSheet.Range("n2") & "日_日報.xls" _
, FileFormat:=xlNormal
.Close file


End With

End Sub

マクロ実行時に、エラー’1004RangeクラスのPasteSpecialメソッドが失敗と表記され、マクロが実行されません。

マクロの内容は、任意の範囲をコピー、新規book追加し、
新規bookに(1)Paste:=xlPasteValues (2)Paste:=xlPasteColumnWidths (3)Paste:=xlPasteFormats の順に貼り付けし保存するものです。

いろいろ調べては見たのですが、当方初心者の為、わからずじまいです。お手数ではございますが、どなたかご教授願います。
下記にマクロ内容全部記載します。
よろしくお願いします。

***********...続きを読む

Aベストアンサー

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-------------------------------------------
''もし、そのままでダメでしたら、 ' Application.EnableEvents = False 'イベントの介入を阻止する のところのコメント・ブロック('コードの手前のアポストロフィ)を外して、再度試してみてください。

Sub 日報別ファイルに保存したい2()
Dim myRng As Range
Set myRng = Worksheets("日報").Range("A3:AF36")
 ' Application.EnableEvents = False 'イベントの介入を阻止する

With Workbooks.Add
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteValues, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteColumnWidths, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  myRng.Copy
 .ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteFormats, _
             Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 
  Application.CutCopyMode = False
 
 ApplicationDisplayAlerts = True '**これは、そのままでは必要ないはずです。'
 
 ActiveWorkbook.SaveAs Filename:="c:\日報\" & ActiveSheet.Range("J2") & "年" & _
                 ActiveSheet.Range("l2") & "月" & _
                 ActiveSheet.Range("n2") & "日_日報.xls", _
                 FileFormat:=xlNormal
 .Close file
End With
Set myRng = Nothing
'Application.EnableEvents = True 'イベントマクロの活動を戻す

End Sub

こんにちは。

>結果、「ThisWorkbook」上の下記のマクロを削除すると、正常に動きだしました。
それは、Copy 範囲が、消えてしまうことで、PasteSpecial が利かなくなってしまうからです。

まず、シート名の長いコードは、これだけでよいはずです。

Private Sub Workbook_Activate()
 Select Case StrConv(Trim(ActiveSheet.Name), vbNarrow)
 Case "1" To "30", "日報"
  Application.Calculation = xlCalculationManual
 End Select
End Sub


-----------------------------------------...続きを読む

Qエクセルのマクロを削除してもマクロの警告が表示されてしまう。

1、新規ファイルから何でもいいので簡単なマクロの登録をします。
2、セキュリティレベルを中にしファイルを開く時にマクロの警告ダイアログ  が表示されるようにします。
3、ファイルを保存して閉じて再びファイルを開きます。
4、マクロを有効にしファイルを開きます。
5、登録したマクロを削除します。
6、再びファイルを閉じます。
7、再びファイルを開きます。

登録したマクロを削除したのに再びファイルを開くとマクロの警告ダイアログが表示されてしまいます。マクロは削除したはずなのに…
どうしてか教えてくれませんか?

Aベストアンサー

きっとモジュールが残っているのでしょう。
モジュールとはマクロを書いた場所です。つまりマクロの入れ物。

「ツール」→「マクロ」→「Visual Basic Editor」で,Visual Basic Editorが開きます。
左のツリー表示されている部分の

- ─□標準モジュール
   └△ Module1

とかなっている,Module1(もしくはModule2,もしくはModule3…)
などを選択して,
「右クリック」→「Module○ の解放」
でモジュールを解放してやればマクロの警告ダイアログが表示されなくなると思います。
「削除する前に Module○ をエクスポートしますか?」
とかいうダイアログが出てくると思いますが,不要なものであればエクスポートする必要はありません。

QExcelマクロでRange("A1:A5,C1:C5")をCellsで書きたいのですが

マクロ初心者です。
Excelマクロでグラフを作成するときに、元データを指定する所で、
Source:=Range("A1:A5,C1:C5")とするような場合、
「A1」とかアルファベットでの番地指定ではなく、
Cellsを用いて書きたいのです。

Source:=Range("A1:A5")であれば、
Source:=Range(Cells(1, 1), Cells(5, 1))と書けばいいことは分かるのですが、範囲指定を複数にする場合が分からないのです。

よろしくお願いします。

Aベストアンサー

Unionを使用したらできると思います。

Source:=Union(Range(Cells(1, 1), Cells(5, 1)), Range(Cells(1, 3), Cells(5, 3)))

今Excelがインストールされてないパソコンで作業していないので確認はしていないのですが・・・。

よかったら参考にして下さい

Q【excelマクロ】重複データをチェックしてその行を削除・表を集計して整頓するマクロ

MC28SP 会社で資材の在庫管理表を作成しているのですが、大変困っております。
マクロ初心者で技術不足なのでどうかご教授願います。
「資材受け入れシート」として、下の表があります。
   1   2   3  4
 受入日 品名  Lot  数量
  7/7   A  BNR32  10
  7/8   A  BNR32  5
  7/10   B  SW200  2
  7/7   B  AE860  4
  7/8   B  SW200  12
  7/9   C  GD300  10
  7/7   C  GD300  1
  7/7   C  DC200  7
これを2列目「品名」をキーとして「Lot」を確認し、同じ(つまり同じ物)であればその行を削除して、数量を加算して1行にまとめるマクロを作りたいのです。ポイントは(1)2列目「品名」の重複確認のみで行削除ではなく、3列目「Lot」も確認する必要があることと、(2)削除してからその「品名」がある行に削除した「数量」分加算しなくてはいけないことだと考えているのですが・・・。
  1   2   3  4
 受入日 品名  Lot  数量
  7/8   A  BNR32  15
  7/10   B  SW200  14
  7/7   B  AE860  4
  7/9   C  GD300  11
  7/7   C  DC200  7
「受入日」の所はできれば最終日になれば良いかなと思っています。
会社で期限を決められているのですが、手こずってしまい前へ進みません。説明が分かりづらいかもしれませんが、どうか宜しくお願い致します。

MC28SP 会社で資材の在庫管理表を作成しているのですが、大変困っております。
マクロ初心者で技術不足なのでどうかご教授願います。
「資材受け入れシート」として、下の表があります。
   1   2   3  4
 受入日 品名  Lot  数量
  7/7   A  BNR32  10
  7/8   A  BNR32  5
  7/10   B  SW200  2
  7/7   B  AE860  4
  7/8   B  SW200  12
  7/9   C  GD300  10
  7/7   C  GD300  1
  7/7   C  DC200  7
これを2列目「品名」をキーと...続きを読む

Aベストアンサー

ご参考までにという事で。。。
標準モジュールで実行してみてください。

Sub test()
  Dim strSql As String
  Dim cnXL As Object
  Dim rsXL As Object
  Const adOpenForwardOnly = 0
  
  
  Sheets("資材受け入れシート").Range("A1:D1").Copy
  Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")
  Application.CutCopyMode = False
  
  Set cnXL = CreateObject("ADODB.Connection")
  Set rsXL = CreateObject("ADODB.Recordset")

  With cnXL
    .Provider = "MSDASQL"
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
    "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"
    .Open
  End With

  strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _
        & " from [資材受け入れシート$]" _
        & " group by 品名,Lot order by max(受入日),品名,Lot"
  
  Debug.Print strSql
  rsXL.Open strSql, cnXL, adOpenForwardOnly

  Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL
  Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"
  
  rsXL.Close: Set rsXL = Nothing
  cnXL.Close: Set cnXL = Nothing
  MsgBox "Sheet2に出力しました"
End Sub

ご参考までにという事で。。。
標準モジュールで実行してみてください。

Sub test()
  Dim strSql As String
  Dim cnXL As Object
  Dim rsXL As Object
  Const adOpenForwardOnly = 0
  
  
  Sheets("資材受け入れシート").Range("A1:D1").Copy
  Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")
  Application.CutCopyMode = False
  
  Set cnXL = CreateObject("ADODB.Connection")
  Set rsXL = CreateObject("ADODB.Reco...続きを読む

Qエクセルのマクロ(range)について

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S       U     V
個数 金額  累計個数 金額金額 (=M+Q) (=O+S)
0、   0、   100、   1000、    100、   1000 
1,初期状態

10、  100、  100、   1000、    110、   1100
2,個数を入力すると、計算式を入力してあるUとVの数が変わる

10、  100、   110、   1100、    120、   1200
3,マクロを実行すると、UとVの数がQとSに入力され、計算式を入力してあるUとVの数がさらに変わる。

0、   0、    110、   1100、   110、    1100
4,MとOの数をゼロ(クリア)にすると、計算式を入力してあるUとVの数が変わる。     


なかなか理解できないのは、Range("Q7:Q23").Value = Range("U7:U23").Valueの部分で、
2,の後にマクロを実行すると、U 110、V 1100がQ 100とS 1000に書き込まれることです。
通常の計算式だと=は対象となったセルをそのまま表示していると思うのですがのですが、
マクロに書いてある式だと3,のところでUとVの数をQとSに書き込んであります。
なぜ=なのにマクロでは一方のセルに数を書き込んでいるのでしょうか。
また、QやSをUやVへ書き込んでいないのでしょうか。

どなたか詳しく教えていただけると幸いです。

マクロの作りと理解の方法について教えてください。

今、日報を作り直しています。
以前作成した方は、このように作っていました。


Worksheets("日報").Select
Range("Q7:Q23").Value = Range("U7:U23").Value
Range("S7:S59").Value = Range("V7:V59").Value
Range("A1").Select
MsgBox " 転写を終了しました。"
End Sub


マクロでは複数の行列を指定していますが、1行だけ表すと、
具体的な表とデータの変化の仕方とするとこのようになっています。

M    O    Q     S...続きを読む

Aベストアンサー

プログラミング言語では、一般的に、
「=」は、右辺から左辺への「代入」
を意味します。

マクロ = Visual Basic = プログラミング言語
なので、Excelにおける「=」とは少し意味合いが違っています。

Q「上書き保存確認ダイアログ」を出すには?

エクセル2000をベースにマクロ(VBA)を使って、ある技術計算をさせています。
セルに計算の元になるデータを手入力するのですが、
最終的には、その元になるデータをテキストファイルとして保存させているのですが、保存先に同じファイル名(エクセルの方ではなく、テキストファイル)があっても強制的に上書きされてしまいます。
同じ名前が合った場合は、上書き保存確認のダイアログを表示させたいのですが、どのようにすればよいでしょうか?
保存するのは、入力したデータのテキストのみで、エクセルのファイルは保存しません。

Aベストアンサー

FileSystemObjectを使った例です。


Option Explicit

Public Sub TEST()

 MsgBox checkAllowOverwrite("\a.txt")

End Sub




Public Function checkAllowOverwrite(ByVal fileName As String) As Boolean

Dim oFS
Dim r As VbMsgBoxResult


 Set oFS = CreateObject("Scripting.FileSystemObject")

 If oFS.FileExists(fileName) Then
  Dim msg As String
  msg = fileName & "は存在します。" & Chr(13)
  msg = msg & "上書きしますか?" & Chr(13) & Chr(13)
  r = MsgBox(msg, vbYesNo, "上書き確認")
  If r = vbYes Then
   checkAllowOverwrite = True
  Else
   checkAllowOverwrite = False
  End If
 Else
  checkAllowOverwrite = True
 End If

 Set oFS = Nothing


End Function

FileSystemObjectを使った例です。


Option Explicit

Public Sub TEST()

 MsgBox checkAllowOverwrite("\a.txt")

End Sub




Public Function checkAllowOverwrite(ByVal fileName As String) As Boolean

Dim oFS
Dim r As VbMsgBoxResult


 Set oFS = CreateObject("Scripting.FileSystemObject")

 If oFS.FileExists(fileName) Then
  Dim msg As String
  msg = fileName & "は存在します。" & Chr(13)
  msg = msg & "上書きしますか?" & Chr(13) & Chr(13)
...続きを読む


人気Q&Aランキング

おすすめ情報