マクロに不正プログラムが仕掛けられていないか。

20以上あるファイルを1シートにまとめるため、ネットで見つけた下記2つのプログラムを使おうとしたところ、周囲から「情報漏えいの罠が仕掛けられていないのか」と指摘されました。どなたか判断いただけませんでしょうか?

●複数ファイルを「1ファイル複数シート」にまとめるマクロ
Sub matome()
Application.ScreenUpdating = False
Set mb = ThisWorkbook
myfdr = ThisWorkbook.Path
fname = Dir(myfdr & “\*.xlsx”)
Do Until fname = Empty
If fname <> mb.Name Then
Set wb = Workbooks.Open(myfdr & “\” & fname)
wb.Worksheets.Copy Before:=mb.Sheets(mb.Sheets.Count)
wb.Close
n = n + 1
End If
fname = Dir
Loop
Application.ScreenUpdating = True
MsgBox n & “まとめ終了”
End Sub


●複数シートを1シートにまとめるマクロ
Sub CombSh()
Dim i As Integer
Dim eRow As Long
Dim mySh As Worksheet

ActiveWorkbook.Sheets.Add before:=Sheets(1)
ActiveSheet.Name = "統合"
Set mySh = ActiveSheet
mySh.Range("A2:AA2").Value = Sheets(2).Range("A2:AA2").Value
For i = 2 To Sheets.Count
Sheets(i).Select
eRow = Cells(Rows.Count, "A").End(xlUp).Row
Range(Cells(3, "A"), Cells(eRow, "AA")).Copy Destination:=mySh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
Next
mySh.Select
Set mySh = Nothing
End Sub

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2017/06/25 22:02:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:degucho No.1

回答回数281ベストアンサー獲得回数75

ポイント100pt

特に見当たらないと思います。
たとえばメール送信の処理なんかがあったら可能性はありますが
どこだか指摘できない周囲の人が無責任な感じしますね。

id:sapporobeer

ですよね。。。
ただ、無知の悲しいところ、それを反論するための知識は私には持ち合わせていなかったんですよね、、、。ありがとうございます!

2017/06/24 16:14:23
id:iku7 No.2

回答回数6ベストアンサー獲得回数1

ポイント390pt

昨今のネット社会の状況など踏まえ、社内のセキュリティ的に言って「周囲からの・・指摘・・」は正しいと思います。むしろ知識がないので、安全かどうかわからないので指摘しているのであって、なにも言われないよりも結果的には良いのではないでしょうか。またなにもわからずコピペで動かしちゃうよりも、こういう場にご質問されるのも、事前に情報漏えいを防ぐのには良いのではないでしょうか?信用できるかどうかということであれば、最終的な判断はそのような第三者的なチェック機関(実際あるかどうかは存じませんが)に依頼されたほうが良いかも。また表題のマクロ程度であれば、一般的な社内SEの判断で十分です。
あと、このマクロ特に問題ないようです。しいて言えば、処理中エクセルファイル開いていますが(*.xlsx)ここでマクロファイル(*.xlsm)となる場合注意されたほうが良いかと。

id:ken3memo No.3

回答回数317ベストアンサー獲得回数115

ポイント10pt

既に良い回答 や コメントが出ているのでポイントは0にしてください。
蛇足ですが、
サンプルコードを打ち込まなくてもよいように、
ファイルとしてダウンロード可能なサイトも存在していると思います。
三流君VBA:VBA Outlook リッチテキスト形式のメール で グラフを送る
↑手前味噌の私のサイトですが、
 サンプルコードと一緒に
 ダウンロードして実行可能なファイルを提供しています。
f:id:ken3memo:20170625180557j:image
↑ダウンロード可能なファイルが置いてあります。

この作者が(ここでは、私ですが)
悪意のある作者で、
解説・表示されている以外のコードを忍ばせていたら・・・

もしくは、この作者の不注意で
悪意は無くても、ウイルスに感染していて、
アップしたファイルが感染していたら・・・

など、いろいろダウンロードファイルは危険が0パーセントではないのかも。
表示してあるコードを検証して
コピペで使用するのは良いと思いますが(なかなか説得が大変そうですが)
ダウンロードしたファイルは注意かな。

質問はネット上のコードの話なので、
ダウンロードファイルについての蛇足回答がかなりズレてますが、
私もこのダウンロードファイルは安全ですか?
と不定期で質問をいただくので、
ネット上に転がっているコードの使用はみなさん気を使われているんだなぁと思いました。

※知らないコードをコピペで使うのは、確かに危険だけど、
 検証・確認して 使えば OKだと思います。←それが難しいかもしれないし、

長々 ズレた回答すみませんでした。

  • id:jan8
    sapporobeerさんの質問、deguchoさんの回答、a-kuma3さんの反応を踏まえ、コメントします。

    sapporobeerさんの質問に対して、deguchoさんが事実を回答しており、sapporobeerさんも同意、これを見たはてな界隈の人も「このマクロの実行による情報漏えいは無い」と判断するでしょう。

    しかし、これでsapporobeerさんの抱える問題の本質が解決する訳ではないと思います。

    例えばsapporobeerさんが下記コメント付きプログラムを周囲に示し「このマクロに不正プログラムは仕掛けられていませんよ」と説明したところで、「そうかじゃあ問題ないか」とはならないでしょう。こんなの見てくれないと思います。
    「マクロに不正プログラムが仕掛けられている可能性」は、周囲の一人が挙げた極端な例で、皆が心配しているのはそれだけではないと思います。
    ----------------
    Application.ScreenUpdating = False '画面更新を行わない(処理中チカチカさせない)
    Set mb = ThisWorkbook '自ブックをオブジェクト型変数mbに格納
    myfdr = ThisWorkbook.Path '自ブックの所在フォルダの絶対パスをmyfdrに格納
    fname = Dir(myfdr & “\*.xlsx”) '自ブックの所在フォルダにある拡張子.xlsxのファイル名(最初の一つ)をfnameに格納
    Do Until fname = Empty 'fnameが空になるまで繰り返し(上記のファイル数繰り返す)
    If fname <> mb.Name Then '自ブックは飛ばす
    Set wb = Workbooks.Open(myfdr & “\” & fname) 'fnameのファイルを一つ開く
    wb.Worksheets.Copy Before:=mb.Sheets(mb.Sheets.Count) 'このファイルのシートを全て自ブックにコピーする
    wb.Close '今開いたファイルを閉じる
    n = n + 1 '処理したファイル数をカウント(後で表示する)
    End If '自ブックは飛ばす(ここまで)
    fname = Dir '自ブックの所在フォルダにある拡張子.xlsxのファイル名(次の一つ)をfnameに格納
    Loop '繰り返しここまで
    Application.ScreenUpdating = True '画面更新を行う
    MsgBox n & “まとめ終了” '終了メッセージを表示
    ----------------


    「ネットで見つけたExcelマクロを業務に使う事に上司や周りの人が難色を示す」
    これはもう昔からどこでも「会社のお仕事あるある」です。何故でしょう。

    結論から先に言うと「あらゆるリスクが想定され、安易にマクロの使用を肯定出来ないから」です。

    例えば
    ・マクロ動作の誤解により、想定外の結果を生むおそれがある
    ・動作環境の変化により、想定外の結果を生むおそれがある
    ・マクロが作者とは別の人に渡り、誤用による問題が起きるおそれがある
    ・本当にマクロに不正プログラムが仕掛けられているかもしれない
    ・信頼性の不確かなサイトからファイルをダウンロードするリスク
    ・組織で「マクロ付きExcelファイル」の存在を許可していないかもしれない。。。など
    まだまだリスクはあります。

    もっと具体的に例を示します。
    例えば、20以上あるファイルの拡張子は殆どが".xlsx"でしたが、たまたま一つだけ古い拡張子".xls"だったとします。(複数名からファイルを集めている場合など、実際ありえる話です)。その場合、今のマクロを実行すると古い拡張子のExcelファイルはまとめ処理から漏れてしまわないでしょうか?処理したファイル数をチェックしたり、まとめたファイルのシートを一つずつチェックしてその事実に気付けば良いですが、そのまま見逃して大事なデータが処理されずに大問題を起こした!なんて事にならないでしょうか?

    上記はDir関数に冠する以下のサイトを読んで思いついた例であり、当てはまらないかもしれませんが、まだまだこのような「想定外のリスク」はたくさんあります。http://officetanaka.net/excel/vba/tips/tips69.htm
    とにかく「ネットで見つけた下記2つのプログラムを使おうとした」と聞いただけで、周囲の人はこのようなリスクを想定し、安易に肯定出来ない事になるのです。

    「じゃあマクロを使ったらダメなのか?」というと、組織の考え方によると思いますが、私なら「自己責任でつかってくださいね」と答えます。「20以上あるファイルを1シートにまとめる」作業を手作業でやるのは面倒ですし、マクロを使えば一瞬でおわりますからね。責任を預かる上司に「だめ!」と一蹴されてしまうかもしれません。非常に難しい問題です。
    自分なら、自己責任でマクロを作って実行し(もしくはネットで探したものでも自分で内容を熟知した上で実行し)、実行結果を手作業でチェックして問題ないか確認した上で成果物とします。結局マクロを使うメリットが無いかも知れませんが、作成もチェックも手作業で行うよりは速くなりマクロのメリットを享受できると思います。
  • id:sapporobeer
    的確なアドバイスありがとうございます。

    〉今のマクロを実行すると古い拡張子のExcelファイルはまとめ処理から漏れてしまわないでしょうか?

    おっしゃる通り、これを動かした時2〜3のファイルだけ集約されなかったので、「?」と思いましたが、もしかしたら古いタイプの拡張子だったかもしれません。

    あとは、組織の問題、、、上に言ったら絶対という程そういうややこしい話になりますので、話はしていません(笑)

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません