• ベストアンサー

EXCELのイベントの保存について

EXCEL2000で新規にBOOKを作り、microsoft excel objectsのsheet1に、次のイベントを書きました。 Private Sub Worksheet_Calculate() If Sheet1.Cells(1, 2).Value = 1 Then Sheet1.Cells(1, 3).Value = "当たり” End If End Sub B1のセルは、A1のセルの値をコピーするようにしています。 A1のセルに1を入力されると、C1のセルに”当たり"が表示されるのですが、 BOOKを登録した後、BOOKを閉じ、そのBOOKを開けた後に、A1のセルに1を入力しても、C1のセルに”当たり"が表示されません。 イベントを登録する際に、足りない操作があるのでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

こんにちは。 私の余談を含めて書いておきます。 >(1)EXCELを終了させないと、セキュリティレベルの反映はしない。 そのとおりです。だから、Excelの中から、セキュリティレベルをいじっても、Excelのみでは、ウィルスのプロテクトには何にもならない、ということです。Excelを終了させて反映すると同じように、Excelを起動する前に、セキュリティレベルを変更することも可能なのです。だから、「ウィルス検索プログラム」というのが必要なのですね。 セキュリティレベルを「高」にしたところで、何にも役に立っていません。 もう少し詳しく書くと、Excelの悪意のないマクロでも、危険なものはあります。特に、熟練していない人のマクロで、とんでもないものも存在します。それをどうやって見分けるか、プロテクトが掛けられたら、どうしようもない、ということです。また、MacroCutter というツールで中を開けても、それが読める人でないと、マクロは安全かどうか分からないです。 一番悪いのは、アドインです。アドインは、一般的にフリーでセキュリテイには掛かりません。なお、Office のウィルスは、Personal.xls に置き換わります。同じようなフォルダーが出来ています。 >(2)セキュリティレベルが高の場合、PERSONAL.XLSに登録してあるマクロは動作するが、BOOKに登録しているマクロとイベントは動作しない。また、PERSONAL.XLSにはイベントがかけない。 セキュリティレベルが「高」では、セキュリティ・ダイアログメッセージの 「信頼のおけるソース元(T)」のすべての組み込み済みのアドインとテンプレートを信頼する(A) にチェックを入れている限りは、Personal.xls のマクロは稼動します。はずしたら、動きません。 Personal.xls のイベントは、多くは、Application全体のイベントにします。一般的には、Excelの StartUp フォルダーに入れて、テンプレートにしますが、私は、テンプレートよりも、Application イベントの安全性のほうが高いと思い、そちらを使っています。かなり内容は特殊です。 >(3)セキュリティレベルが中か低の場合、PERSONAL.XLSに登録してあるマクロ、及び、BOOKに登録しているマクロとイベントは動作できる。 そのとおりです。 >(4)よって、イベントを動作させるためには、セキュリティレベルを中か低にする必要がある 安全に活用するために、「高」にするというのが、もっぱらのキャッチフレーズと言うわけですが、最初の(1)で述べたように、本当は、Excel内のセキュリティ設定というのは、私は、形骸化したもので、何の役にも立っていないように思います。簡単に、そのセキュリティレベルは、外部から換えることが可能です。 そこで、私は、このようなことを気をつけています。 ・むやみにVBEプロテクトの掛かったものは、使わないこと。 (隠さなくてはならないのか、理由がないものに対してですが。) ・作った人が知れないもの、作った人のレベルが分からないものは使わないこと。 ・個人作成のアドインは、極めて慎重に選択すること。むやみにインストールはしない。 ・コードがオープンされているものは、一度、全体を読んでみること。コードの中に、Wrete/Read などの用語、また、参照設定に特別なものはつけられていないか、などのチェックをする。Declare で、別なDll が呼び出されたりすることもあります。 なお、COMアドインは、インストール時に気をつけます。ここの掲示板でも、原因不明のトラブルが発生している方がいますが、COMアドインが原因のことがあります。COMアドインのオプション・ボタンは、表示―ツールバー―ユーザー設定の[コマンド(タブ)]の中の、ツールの中に、「COMアドイン」の コマンド・ボタンがあります。それを、ツール・メニューの中に入れて確認できるようにしておいたほうがよいです。 また、Office 2000 までは、個人証明だけでも、セキュリティレベル「高」でも、認められていたのですが、Office XP以降では見事にシャットアウトされてしまいます。その上の証明書のCA証明なら、「高」でも動くのですが、私のような個人は、経費的な問題で出来ません。 セキュリティに対して、私は、このように考えています。ながなが、失礼しました。

QAZ123
質問者

お礼

こんにちは。 詳しく説明をつけていただいて、ありがとうございました。 セキュリティレベルについて、勉強になりました。 セキュリティは規定値から下げないほうが良いというのが頭にあり、規定値のままでEXCELは動作できるものと思っていたため、問題の解決に時間がかかりました。 あえて言うなら、EXCELのセキュリティの変更後に、「EXCELを終了しないと設定が反映しませんよ」みたいなメッセージが出てくれれば解りやすいのにと思います。 COMアドインも確認してみましたが、何も入っていませんでした。 何回も回答をいただき、本当にありがとうございました。

その他の回答 (9)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.9

こんにちは。 >PERSONAL.XLSのSHEET1にもイベントを書き、BOOKを登録してみましたが、そのBOOKを開くと、登録されたイベントが動作しません。 Personal.xls に書くイベント・ドリブン型マクロは、特殊なイベントです。Personal.xls のシートモジュールに書いても、シートそのものを触ることがありませんので、マクロは起動しません。 >BOOKに登録したイベントは動作しません。 一般的なマクロはどのようか、と思います。 例えば、 '---------------- Sub Test1 MsgBox Time End Sub '---------------- のようなもので、ちゃんと反応するか、ということです。 なお、 ツール―マクロ―セキュリティ 下の所に、ウィルス検索プログラムの有無が出ているかとは思います。

QAZ123
質問者

お礼

PERSONAL.XLSに登録してあったマクロは動作しましたが、教えていただいた一般的なマクロは動作しませんでした。 ツール―マクロ―セキュリティでセキュリティレベルが高になっており、「ウィルス検索プログラムがインストールされました」の表示があったので、セキュリティレベルを低に下げてみましたが、マクロは動作しませんでした。 試しに、セキュリティレベルを低のまま、BOOKを保存した後、BOOKを開いて、マクロを動作させてみると、正常に動作しました。 どうも私はセキュリティレベルの意味を勘違いしていたようで、セキュリティレベルを高から低に下げると、瞬時にセキュリティレベルが変わるものだと思っていましたが、一旦EXCELを終了させないと、セキュリティレベルの反映がされていないことがわかりました。 おかげさまで、イベントも実行できるようになりました。この問題が解決するまで3週間ほど期間を要しましたが、解決できてすごくうれしいです。 申し訳ないのですが、もうひとつ質問を。 これまでのことをまとめると、 (1)EXCELを終了させないと、セキュリティレベルの反映はしない。 (2)セキュリティレベルが高の場合、PERSONAL.XLSに登録してあるマクロは動作するが、BOOKに登録しているマクロとイベントは動作しない。また、PERSONAL.XLSにはイベントがかけない。 (3)セキュリティレベルが中か低の場合、PERSONAL.XLSに登録してあるマクロ、及び、BOOKに登録しているマクロとイベントは動作できる。 (4)よって、イベントを動作させるためには、セキュリティレベルを中か低にする必要がある (1)(2)(3)(4)の考え方はあっているのでしょうか?

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんばんは。 >現在はRSSからのデータでテストしている訳ではなく ここで、他の方がご質問になる方法とは違うようですね。 >(5)BOOKをオープン → イベントが動作しない そのように、最初は動いて、次にオープンした時に、マクロが動かなくなるというのは、セキュリティプログラムのせいだと思います。 一度、他の一般のマクロが動くのかはチェックされましたか? もし、動かないようでしたら、その設定ををはずさない限りは、どのマクロも、最初しか使えないことになります。起動時に、マクロを停止されているのかもしれません。通常、Excelのみで、そのような現象はありません。 セキュリティプログラムの設定のチェックをお願いします。こちらでは、わかりかねます。

QAZ123
質問者

補足

PERSONAL.XLSに登録しているマクロは「マクロ」→「実行」で動作しますが、BOOKに登録したイベントは動作しません。 試しに、PERSONAL.XLSのSHEET1にもイベントを書き、BOOKを登録してみましたが、そのBOOKを開くと、登録されたイベントが動作しません。 EXCEL自体がおかしくなっているのかも知れません。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんばんは。 返事が遅くなりました。 >証券会社のRSSから送られてくるデータで、一定時間毎に変化しているものなのですが、 そうでしたか。この件については、ここでも、同じような内容で、何度も出ています。しかし、私自身、この質問の解決度はとても低いです。それは、私は、その元の仕組みが分かっていないからです。(検索しても参考になるレベルはないと思います) 私は、不勉強なので、何度も、同じ内容に当たっていながら、直接、そのRSSを勉強しておりません。 何人かは、OnTimeメソッドなどにして解決に近づいているようです。私自身が、その問題に直接当たれば話は早いような気がしますが、証券関係は、本は買ったものの、もう1年も置いたままで、まったくのど素人なのです。 私は、そのインターネットからの取得の仕組みが分からないのですが、もしかしたら、それ自身が、マクロなど(VBAや他のプログラムで働くもの)ではないでしょうか?確か、そんな記憶があります。それで、 取得していない時を見計らって、インターバルで、書き換えるわけです。(前の人は、1分か2分の周期だったので、とても驚きました。負担が強すぎるような気がしました。) Application.OnTime 私はもっとスマートの方法はないものか、と思うだけです。それこそ、Calculate イベントが働かないのかなって思いました。(どうやら、見事に違うようですね。) 一度、その取得のシステム自体を調べていただけませんか? 私自身、この件については、満足のいける終止符を打ちたいな、と思っています。 なお、ウィルスチェッカーは、例えば、RegWrite やRead ような単語をチェックして、ストップは掛けても、マクロ自体が動かなくなることはないはずです。

QAZ123
質問者

補足

すみません。誤解を与えたようなのですが、現在はRSSからのデータでテストしている訳ではなく、手入力でA1のセルにキーボードで入力している状態でイベントが動作しません。 2つ下で記載していただいたWorksheet_Calculate()とWorksheet_Change()の場合 (1)EXCEL2000で新規にBOOKを作成 (2)microsoft excel objectsのsheet1にイベントを作成 → イベントが正常動作 (3)BOOKを登録 (4)BOOKのクローズ (5)BOOKをオープン → イベントが動作しない =NOW()をA2のセルにいれても動作しません。 これはRSSのデータではなく、キーボードでA1のセルに入力したときの状態です。 登録されたBOOKのイベントが、動作しないのがわかりません。

noname#22222
noname#22222
回答No.6

s_husky です。 先の回答をキャンセルします。 Caluculate イベントをWorksheet_Change イベントで制御しようと考えたのですが、その目的を達していません。 Worksheet_Change イベントに全てを書くべきでした。 ※折角だからCaluculate イベントを残そうと思いましたが、とんでもないミスでした。失礼!

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

なぜ、Caluculate イベントが使われるのか良く分かりません。Calculate イベントは、数式とともに用いるもので、ひじょうに特殊なイベントです。 Private Sub Worksheet_Calculate() Application.EnableEvents = False If Cells(1, 2).Value = 1 Then 'B1   Cells(1, 3).Value = "当たり" 'C1 Else   Cells(1, 3).Value = "" 'C1 End If Application.EnableEvents = True End Sub >A1のセルに1を入力しても、C1のセルに”当たり"が表示されません。 この時には、どこにも、Calculate イベントは働いてはいません。 そのようなイベントを書いたら、どこか見えない部分に、=NOW() の式を入れておけば、常に、入力するたびに、Calculate イベントが働きます。ただ、何も触らなくても、シートは変更されています。 むしろ、以下のように、Worksheet_Change イベントを用いたほうがよいです。直接入力する場所が、A1 なら、A1 をTarget にすればよいです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Address(0, 0) <> "A1" Then  If IsNumeric(Range("A1").Value) = False Then Exit Sub  Application.EnableEvents = False  If Range("A1").Value = 1 Then    Range("C1").Value = "当たり"  Else    Range("C1").ClearContents  End If  Application.EnableEvents = True End Sub

QAZ123
質問者

お礼

(訂正)ウィルセセキュリティ2006ではなく、ウィルスキラー2006でした。

QAZ123
質問者

補足

Caluculate イベントを使う理由は、実際のB1のセルのデータは、A1のセルのデータをもとに計算されるものではなく、証券会社のRSSから送られてくるデータで、一定時間毎に変化しているものなのですが、説明が難しいので、これまでのような記述になりました。申し訳ありません。 記載していただいたWorksheet_Calculate()とWorksheet_Change()なのですが、EXCEL2000で新規にBOOKを作り、microsoft excel objectsのsheet1にイベントを書いた直後は動作するのですが、一旦、BOOKを登録した後、BOOKを閉じ、そのBOOKを開けた後では動作しません。、=NOW()をA2のセルにいれても動作しません。 イベントを作るのは初めてでよくわからないのですが、イベントが発動するためには、なにか設定があるのでしょうか? ためしに、マクロのセキュリティレベルを低に下げてみても、動作しませんでした。 登録したBOOKをダブルクリックで開くとき、ウィルセセキュリティ2006が一瞬動作するようなのですが、これがイベントの発動の障害となっている可能性はありますか?

noname#22222
noname#22222
回答No.4

s_husky です。 Sheet1.Cells(1, 1)->Sheet1.Cells(2, 1)

QAZ123
質問者

補足

回答ありがとうございます。 新規のBOOKを開けて、microsoft excel objectsのsheet1に、イベントを書いた場合は、表示されるのですが、そのBOOKを登録し開くとイベントが起動せず表示しないところがわかりません。

noname#22222
noname#22222
回答No.3

・A1が変更されたら計算ということでOKかと。 ・ただし、”当たり”を消すことも必要では... Option Explicit Private Sub Worksheet_Calculate()   Sheet1.Cells(1, 3).Value = IIf(Sheet1.Cells(1, 1).Value = 1, "当たり", "") End Sub Private Sub Worksheet_Change(ByVal Target As Range)   If Target = Sheet1.Cells(1, 1) Then     Worksheet_Calculate   End If End Sub

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.2

補足の方法では、私のPCでは、正しく表示されます。 その時、B1のセルは、何になっていますか?

QAZ123
質問者

補足

A1,B1,C1のセルの値は次のようになります。 括弧の中が値です。 (1)C1のセルをクリア・・・A1(0),B1(0),C1(空白) (2)A1のセルに"9”を入力・・・A1(9),B1(9),C1(空白) (3)改めてA1のセルに"1"を入力・・・A1(1),B1(1),C1(空白)

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.1

確かにその通りになりますね。 A1の値が1以外から1になる時にしか表示されません。 (再計算が発生する時のみ)

QAZ123
質問者

補足

回答ありがとうございます。 C1のセルに”当たり"が表示されている場合は、次の処理をしています (1)C1のセルをクリア (2)A1のセルに"9”を入力 (3)改めてA1のセルに"1"を入力 この処理で再計算はされていると思うのですが、C1のセルに”当たり"が表示されません。 よろしくお願いします。

関連するQ&A

  • エクセルマクロで特定の範囲内の検索

    A10からA100までのセルを上から順に調べて、セルにAという文字が入力されているときに、その隣にBという文字を入力するマクロを下記のように作りました。 「セルにAという文字が入力されているとき」という条件に加え、「検索しているセルから上の9個のセル(cells(i-9,1)からcells(i-1,1)まで)にAという文字が入力されていない」という条件を加えたいのです。 Sub 検索() Dim i As Integer For i = 10 To 100 If Cells(i, 1).Value = "A" Then Cells(i, 2).value = "B" End If Next i End Sub つまり If Cells(i, 1).Value = "A" Then  の部分を If Cells(i, 1).Value = "A" かつ Range(cells(i-9,1),cells(i-1,1))にAが入力されていない Then という形にしたいのですが、表現の仕方がわかりません。 ご教示よろしくお願いします。

  • EXCEL VBA におけるブック終了後の値の保存方法について

    EXCEL VBAについて質問があります。もしかしたら初歩的なことかもしれませんがよろしくお願いいたします。 まず、 Sub Test() Dim i As String i = InputBox("好きな果物を入力してください") Sheets("Sheet1").Range("A1").Value = i End Sub を実行し、ブックを保存して終了する。 ブックを開く Private Sub Workbook_Open() Dim k As String k = Sheets("Sheet1").Range("A1").Value If k = "みかん" Then MsgBox ("a") Else: MsgBox ("b") End If End Sub この処理を Sheets("Sheet1").Range("A1").Value = i というシート上のセルに値を保存するという方法を取らずに iの値をブック終了後もプロシージャ内に持っておくというのは可能なのでしょうか。 Publicで宣言してもブックを一度閉じると やっぱりiの値は保存されませんでした。 どうぞよろしくお願いいたします。

  • エクセル2007 参照セルの値が認識されない

    エクセル2007の環境で下記マクロを実行すると、 アクティブシートのセルA1に数字が入っている場合、Sheet1のセルA1に値を転記しても そのセルA1の値をVLOOKUP関数で参照できません。 マクロに問題があるためなのか何処に問題があるのか分からないので教えてください。 宜しくお願いいたします。 【sheet】は アクティブシートの3行目から1000行目までのA列のセルをクリックしたらセルA1に値を表示 その後、下記【モジュール】を使用し、 アクティブシートのセルA1が空白の場合、 A列の数値をSheet1のセルA1に転記し、アクティブシートのA列の数値が空白になるまで循環する。 Sheet1のセルA1の値をVLOOKUP関数で参照した内容を表示、印刷します。 ----------------------------------------------------------------- '【sheet】 Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Count > 1 + IsEmpty(.Value) Then Exit Sub If Application.Intersect(.Cells, Range("A3:A1000")) Is Nothing Then Exit Sub ActiveSheet.Cells(1, 1).Value = .Value End With End Sub ----------------------------------------------------------------- '【モジュール】 Sub TEST() Dim myBtn As Integer Dim myMsg As String, myTitle As String Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long myMsg = "●●●" myTitle = "確 認" myBtn = MsgBox(myMsg, vbYesNo + vbExclamation, myTitle) If myBtn = vbYes Then Set WS1 = ActiveSheet Set WS2 = Sheet1 If WS1.Cells(1, 1).Value = "" Then With WS1 For i = 3 To 65536 If .Cells(i, 1).Value = "" Then Exit For WS2.Cells(1, 1).Value = .Cells(i, 1).Value WS2.Cells(1, 2).Value = ActiveSheet.Name 'WS2.PrintOut Copies:=1 Next i End With ElseIf WS1.Cells(1, 1).Value >= 1 Then WS2.Cells(1, 1).Value = WS1.Cells(1, 1).Value WS2.Cells(1, 2).Value = WS1.Name 'WS2.PrintOut Copies:=1 Else End If End If End Sub -----------------------------------------------------------------

  • VBAのループ処理について

    VBA(Excel2000)にて、参考書等を見て下記のコードを作成しました。 「セルA1かA10において、同じ数値が続けて入力されたら、最後のセル(一番下のセル)をB列にコピーする。」 Sub ループ() Dim a As Long With Range("a1:a10") For a = 1 To .Count - 1 If .Cells(a).value <> .Cells(a + 1).value Then .Cells(a, 2).value = .Cells(a).value End If Next .Cells(.Count, 2).value = .Cells(.Count).value End With End Sub 上記の「For idx = 1 To .Count - 1」の意味が分かりません。 よろしくお願いします。

  • 1つのワークシートでイベントを続けて実行する方法

    こんにちは。 最近独学でマクロ・VBAの勉強を始めた者です。 会社にて、各出先から私の部署へ提出させる書類の雛形を マクロを駆使しながら作成していますが、行き詰ってしまいました。 1つのワークシートオジェクトに『Private Sub Worksheet…』のActivate→Changeの順で実行したく、 標準モジュールのようにEnd Subで一旦区切ってから続けて記述してみましたが上手く行きません。 (Activateは実行されるが、Changeは実行されない) 先述の通り超初心者のため、根本的に理解していない部分等あるかと思います。 さらに当サイトは初めて利用するので、質問の仕方に不備がありましたら申し訳ありません。 解決策をご教示お願い致します。                       記 1.シートがアクティブになった際、A1が空白セルの場合はインプットボックスで入力させる Private Sub Worksheet_Activate() If Range("A1") = "" Then Dim ans As String ans = InputBox("担当者名を入力して下さい", "担当者名", "") If ans <> "" Then Range("A1").Value = ans End If End If End Sub 2.A1に文字が入力されたら、下記※を実行する(←Changeイベント) ※ブック保護解除→A1に入力した文字をシート名に入力→再度ブック保護 (計算式が多数入っているため、シートおよびブックは保護しています) Sub ブック保護解除() ActiveWorkbook.Unprotect Password:="1111" End Sub Sub シート名変更()  On Error GoTo ERR_HANDLER ActiveSheet.Name = ActiveCell.Value Exit Sub ERR_HANDLER: MsgBox "選択されているセルの値はシート名にできません。" _ & vbCrLf & "他のセルを選択するか、データを修正してください。" End Sub

  • エクセル マクロ 抽出

    教えてください。 ○と記入されたセルを参照して、一つ上のセル・A列にある同じ行のセル・ 9行目にある同じ列のセルを抽出しようとしています。 下記の通り入力すると 行数=値.Rowでエラーが出たしまいました。 試行錯誤頑張りましたが解決できそうにありませんのでお力を貸して頂けないでしょうか。 Sub 抽出() Dim i, 行数, 列数 As Long Dim 値 As Range i = 0 行数 = 値.Row 列数 = 値.Column For Each 値 In Sheets("sheet1").Range("C12:R171") If 値.Value = "○" Then i = i + 1 With Sheets("sheet2") .Cells(i, 3).Value = Sheets("sheet1").Cells(行数, 1).Value .Cells(i, 4).Value = Sheets("sheet1").Cells(9, 列数).Value .Cells(i, 5).Value = 値.Offset(-1, 0).Value End With End If Next End Sub

  • ハイパーリンクのイベント挙動について

    Excel2007でのハイパーリンクをクリックした際に発生するイベントについてお伺いさせてください。 Excelでハイパーリンクのイベントを用いてやりたいことがあったのですが、どうしてもWorkbook_SheetFollowHyperlinkでの動作がうまくいかないため、以下の処理を試みてみました。 Private Sub Workbook_SheetFollowHyperlink                      (ByVal Sh As Object, ByVal Target As Hyperlink)     Worksheets("sheet1").Cells(1, 1).Value = 5 End Sub ところが、ハイパーリンクをクリックしてもsheet1のセルA1には代入は行われず、ただリンク先のセルへ飛ぶだけの処理となってしまいます。 以上を踏まえた上で以下の2点について質問させてください。 ・Workbook_SheetFollowHyperlinkはブック内のハイパーリンクをクリックしたときに呼び出されるという認識に間違いがあるのでしょうか。 ・上記のようにハイパーリンクをクリックした際に指定したセルへ適当な数値を代入するにはどうすればよいのでしょうか。 わかりにくい文章で申し訳ありませんが、ご教授の程よろしくお願いいたします。

  • エクセル マクロ修正

    シート1~5まであります。別に情報シートを作成しています それぞれ同じ原本から作成しています 全部のシートにA1~A10のセルに日付、B1~B10のセルに文字など入力がするところがあります 入力はA1から順番に入れていきます 例えば 保存ボタンを作成しておく シート1のA1に日付、B1に”文字”を入力し、保存ボタンをおす 情報シートに日付と内容が一致する情報がなければ、 情報シートのA列にシート名、B列に日付、C列に入力した内容が 空白のところに出力される ボタンのマクロがCommandButton1_Clickとしたら Private Sub CommandButton1_Click() 検索 End Sub 標準モジュールに Sub 検索() Dim c As Range Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws1LastRow As Long Dim ws2LastRow As Long Set ws1 = Sheets("情報シート") Set ws2 = ActiveSheet If ws2.Range("A1").Value = "" Or ws2.Range("B1").Value = "" Then MsgBox "検索する日付もしくは語句が入力されていません。", vbCritical Exit Sub End If If ws1.Range("A1").Value = "" Then ws1LastRow = 0 Else ws1LastRow = ws1.Cells(Rows.Count, "A").End(xlUp).Row End If ws2LastRow = ws2.Cells(Rows.Count, "A").End(xlUp).Row For Each c In ws1.Range(ws1.Cells(1, "B"), ws1.Cells(Rows.Count, "B").End(xlUp)) If c.Value2 = ws2.Cells(ws2LastRow, "A").Value2 Then If c.Offset(0, 1).Value = ws2.Cells(ws2LastRow, "B").Value Then MsgBox "既にデータが存在します", vbInformation Exit Sub End If End If Next ws1.Cells(ws1LastRow + 1, "A").Value = ws2.Name ws1.Cells(ws1LastRow + 1, "B").Resize(1, 2).Value = ws2.Cells(ws2LastRow, "A").Resize(1, 2).Value MsgBox "データを追加しました", vbInformation Set ws1 = Nothing Set ws2 = Nothing End Sub これを教えて頂き作っていたのですが 別のシートを作成しこのプログラムを応用していたのですが うまく起動しないため再度投稿しました 今度のやつは固定でやろうと思っていていじったのですが 別の欄の文字が表示してしまった 結合セルB2:C4に日付を入れる 結合セルL2:L30に内容を入れるようにしたいのですが ここだけのセルを参照するようにしたいのです。 どうすればいいでしょうか? 試したことAをB2にかえ、BをL2にしたら変なことになりました・・・

  • Excel VBA Worksheet_Change イベントについて

    Excel VBA Worksheet_Change イベントについて質問です。 セルH8とI8を結合し、入力規則よりリストボックスを配置しました。 本シートにWorksheet_ChangeをVBAで作成しましたが、 セルH8:I8をDeleteすると実行時エラー13が発生します。 If Target = "" then exit sub end if や If Target.value = "" then exit sub end if や If Target <> "" then 処理 end if としても対処できませんでした。 よい対処方法のアドバイスよろしくお願いします。

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

    QNo.3421130で質問させて頂いた件の続きなのですが 入力シート(1)のA1に入力された値を、シート2のB1に表示(つまりB列の同じ行数のセルに表示)するというマクロをお教え頂き、早速実践してみましたが、入力シートA1に入っている値が入力シートA10から算出された値(例:A11に日付の2007/10/18と入っていて、A10にはMONTH関数で10だけを抽出している。そのA10の値10をA1が参照している状態やIF関数で反映された値等)がシート2に表示されません。 また本マクロは入力シート(1)とシート2の同じ行列のセルの表示しか出来ませんが、たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 以下、お教え頂いたマクロです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 1 Then    Sheets("Sheet2").Cells(Target.Row, "B").Value = Target.Value  End If End Sub 続きの質問であることと、説明が分りにくく大変申し訳ありません。 非常に困っております。よろしくお願いします。

専門家に質問してみよう