マクロの実行について質問です。

このQ&Aのポイント
  • マクロ勉強中です!何時間も調べておりますが、どうしても分からないのでお教え下さい(;_;)
  • 別シートの都道府県が混在するデータの中から、3列の付属語が『下関』のものだけをコピーして、シート1に貼り付けるマクロを作成しました。
  • マクロの実行時に、ハイパーリンクをクリックして実行する方法を教えてください。
回答を見る
  • ベストアンサー

マクロの実行について 質問です。

マクロ勉強中です! 何時間も調べておりますが、 どうしても分からないので お教え下さい(;_;) 別シートの都道府県が混在するデータの中から、 3列の付属語が『下関』のものだけをコピーして、シート1に貼り付けるマクロを マクロの記録で 『下関』 というタイトル?にして作りました。(下記) これを実行するときに、マクロ名からではなく、 下の表の R3C8セルの、『下関』 というハイパーリンクをクリックで 実行される・・・・ そんなふうにするには、どうしたらいいのでしょうか? ご回答を おまちしております。よろしくお願いします! Sub 下関() ' ' 下関 Macro ' ' Keyboard Shortcut: Ctrl+a ' ActiveWindow.SmallScroll Down:=-9 Range("B3").Select ActiveWindow.SmallScroll Down:=117 Range("B3:F137").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=-9 Range("H3").Select Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True Selection.Copy Sheets("Sheet1").Select Range("B3").Select ActiveSheet.Paste Range("C3").Select End Sub

  • p1_1q
  • お礼率95% (39/41)

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! 何とか希望に近い形になってよかったです。 昨日の回答で「セルをダブルクリック」する方法がある!とだけ言っておいてその方法を載せていませんでしたので 余計なお世話かもしれませんが、今日はそのコードの一例です。 前回同様、Sheet2にデータがありSheet2のH3セルに「付属語」があるとします。 Sheet2のH3セルをダブルクリックするとSheet1に表示する方法です。 これまた余計なお世話かもしれませんが、「付属語」は単に「下関」となっていますが もし住所であれば元データは「山口県下関市○○本町・・・」のような感じになっていると思いますので 「付属語」が含まれるデータすべてをSheet1に表示するようにしてみました。 下記のコードをSheet2のSheet見出し上で右クリック → コードの表示 → VBE画面 に貼り付けてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target = Cells(3, 8) Then Dim i As Long Dim ws As Worksheet Set ws = Worksheets("sheet1") i = Cells(Rows.Count, 2).End(xlUp).Row Range(Cells(2, 2), Cells(i, 6)).AutoFilter field:=2, Criteria1:="*" & Target & "*" Columns("B:F").Copy ws.Activate ws.Cells(1, 2).Select ActiveSheet.Paste ws.Columns("B:F").AutoFit Cancel = True Worksheets("sheet2").Select Selection.AutoFilter ws.Activate ws.Cells(1, 1).Select End If End Sub これでSheet2のH3セルをダブルクリックしてみてください。 尚、前回のような「付属語」と完全一致のデータ表示にする場合は >Range(Cells(2, 2), Cells(i, 6)).AutoFilter field:=2, Criteria1:="*" & Target & "*" の行を >Range(Cells(2, 2), Cells(i, 6)).AutoFilter field:=2, Criteria1:=Target に変更してみてください。 何度も失礼しやんした。m(_ _)m

p1_1q
質問者

お礼

 す ば ら し いっ! 2種類(+α)もご伝授いただき、ありがとうございます。 (人^□^) また一瞬で、出てでてきました♪ なんと なんと・・・ 付属語、実は その通りなのです! 達人には、予知能力が あるに違いないです (+^▽^+) 『山口県下関市彦島〇〇1-5-8』と表示され、列幅も付属語にあわせて 広くなってました。 『完全一致のデータ表示』も、ぶち参考になります♪ どこまでも深いご配慮に 驚きと感激で、言葉が見つかりません。 時間を裂いて考えてくださったマクロを、コピーして貼りつけただけで終わらないように、 違いのわかる女 になります! 今はまだ、ひとかけらも解らないですけど・・・・10年後かかっても、必ず。

その他の回答 (2)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 普通にやるとすればH3(R3C8)セルをダブルクリックするとマクロが走る方法が一般的だと思います。 (Sheet2のH3セルデータを変更しようとH3セルをアクティブにするたびにマクロが走ってしまいます) ご希望としてはH3セルをハイパーリンク設定し、 「付属語」でオートフィルタを掛けてそれをSheet1に表示する方法をお望みのようですので・・・ ↓のようなコードを作ってみました。一例です。 Sheet2にデータがありSheet1に表示するようにしています。 尚、Sheet2のH3セルはハイパーリンク設定でSheet1に飛ぶようにしておきます。 Sheet2のSheet見出し上で右クリック → コードの表示 → ↓のコードをコピー&ペーストしてみてください。 Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) Dim i As Long Dim ws1 As Worksheet Set ws1 = Worksheets("sheet1") i = Cells(Rows.Count, 2).End(xlUp).Row Range(Cells(2, 2), Cells(i, 6)).AutoFilter field:=2, Criteria1:=Cells(3, 8) Columns("B:F").Copy ws1.Activate ws1.Cells(1, 2).Select ActiveSheet.Paste ws1.Columns("B:F").AutoFit Application.CutCopyMode = False Worksheets("sheet2").Select Selection.AutoFilter End Sub こんなんではどうでしょうか? 尚、最初に書いたようにSheet3のH3セルをダブルクリックすれば同様の操作が可能なコードもできます。 とりあえず、今回はこの辺で! 参考になれば良いのですが・・・m(_ _)m

p1_1q
質問者

お礼

tom04さん、こんばんは! ほんとに一瞬で、できました! (^▽^)人 ものすごく難しいマクロ・・・ご配慮にも、再び感謝感激です。 マクロ名からの実行と シートのセルなどからの実行・・・その違いさえわからず、 あらためて 難しさを実感してます(p;;) 会社での、連日の激務、大問題勃発などで  頭が回らなくなっていた今日この頃・・・(愚・_・痴) 今回もまた素晴らしい、心優しきマクロを教えていただき、元気がでました!(^ワ^) どこが違うのかを比べながら 勉強していきます。

  • silverfd
  • ベストアンサー率57% (204/356)
回答No.1

Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink) (上記のマクロ) End Sub というのを、対象となるワークシートのシートモジュールに書き込んだらできるはずです。 まぁハイパーリンクがどうなっているかは別の話とします。

p1_1q
質問者

お礼

silverfdさん(^^)ありがとうございます! マクロという言葉を知ってから、1ヶ月・・・・毎日インターネットで見るマクロに 勝手に解説をつけながら勉強していますが、 なかなか難しいです(;_;q) 実際は、質問内容とは かなり違うのですが・・・ すこーし 教えて頂いて、なんとか自分で・・・・と思ったのでした。 今から、マクロの記録での『セレクト』を使わないようにして、 できるだけ短くする勉強をしようと思っています。 ご無礼を、お許し下さいませ。

関連するQ&A

  • マクロの実行とコマンドボタン

    office2000、WIN98SEです。 マクロの記録でマクロを作成しました。 これをコマンドボタンにコピペして実行するとエラーになります。マクロの実行から動かすとなんの問題もありません。なにがいけないんでしょう。教えてください。 ちなみにやりたいことは、複数のシートの同じセルを一気にクリアにしたいです。 記録したマクロは以下の通りです。宜しくお願いします。 Sheets(Array("用紙(1)", "用紙(2)", "用紙(3)", "用紙(4)")).Select Sheets("用紙(1)").Activate Range("B9").Select ActiveWindow.SmallScroll Down:=36 Range("B9:C58").Select Selection.ClearContents Range("F9").Select ActiveWindow.SmallScroll Down:=36 Range("F9:G58").Select Selection.ClearContents Range("I9").Select ActiveWindow.SmallScroll Down:=36 Range("I9:I58").Select Selection.ClearContents Sheets("用紙(1)").Select Range("B9").Select End Sub

  • 同じ作業を複数のシートに実行させるにはどうしたらいいのでしょうか

    EXCELVBAであるシートに作業をさせるVBAを作成しました。 同じ作業を複数のシートに 実行させるにはどうしたらいいのでしょうか。 宜しくお願い致します。 **************作成したVBA********** Sheets("sheet1").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… *********************************** ↓ sheet1とsheet2に同じ作業をさせたい 以下のやりかただと長くなるためまとめたい    **************作成したVBA********** Sheets("sheet1").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… Sheets("sheet2").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… Sheets("sheet3").Select ActiveWindow.SmallScroll Down:=66 Range("D2:D101").Select Selection.Cut   …50行ほどあります… ***********************************

  • Excel2007のマクロでマクロを実行したところ、エラーが出てしまい

    Excel2007のマクロでマクロを実行したところ、エラーが出てしまいました。どうすればよいでしょうか? 実行時エラー'1004'「RangeクラスのSelectメソッドが失敗しました」 Range("テーブル1[#All]").Selectでエラーになります。 マクロの記録を使っただけなので、どう直せばよいのかさっぱりわかりません。 どうかよろしくお願いします。 Range("A5").Select ActiveWindow.SmallScroll Down:=12 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.SmallScroll Down:=-12 Columns("L:P").Select Selection.Delete Shift:=xlToLeft ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 1 Range("A5").Select ActiveWindow.SmallScroll Down:=30 Range("A5:L55").Select ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$5:$L$55"), , xlYes).Name = _ "テーブル1" Range("テーブル1[#All]").Select ActiveWindow.SmallScroll Down:=-36 Range("テーブル1[[#Headers],[列5]]").Select ActiveWorkbook.Worksheets("ID.01").ListObjects("テーブル1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("ID.01").ListObjects("テーブル1").Sort.SortFields.Add _ Key:=Range("テーブル1[[#All],[列5]]"), SortOn:=xlSortOnValues, Order:= _ xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("ID.01").ListObjects("テーブル1").Sort .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveSheet.ListObjects("テーブル1").Range.AutoFilter Field:=12, Criteria1:= _ Array("condition", "congruent", "control", "experiment", "="), Operator:= _ xlFilterValues ActiveWindow.SmallScroll Down:=-6 End Sub

  • 記録したマクロを他のシートにも同時に実行する方法

    いつもお世話になります。 下記のように選んだセルのデータを削除するマクロを「マクロの記録」で作成しました。 Sub Macro2() ' ' Macro2 Macro ' ' Range("E5:R12").Select ActiveWindow.SmallScroll Down:=6 Range("E5:R12,E14:R22").Select Range("E14").Activate ActiveWindow.SmallScroll Down:=12 Range("E5:R12,E14:R22,E24:R28").Select Range("E24").Activate ActiveWindow.SmallScroll Down:=6 Range("E5:R12,E14:R22,E24:R28,E30:R34").Select Range("E30").Activate Selection.ClearContents End Sub 「Macro2」の実行ボタンを作り、シート名「1」~「31」の同じセルのデータをボタンをクリックして、一括で削除したいのですが、この記述をどのように変更したらよいのか、マクロを始めたばかりの初心者の私にご教授して頂けませんでしょうか? 「マクロの記録」で各シートを選び、セルを選んでdeleteして行く方法はありますが、今後のためにも記述の編集で出来る方法をお教え下さい。 よろしくお願いいたします。 当方、エクセル2010で作成していますが、エクセル2002の環境で使います。

  • エクセルマクロの件

    AとBにあるデータの一覧をCにコピーして、全体を日付順にソートするという処理をしたいと思っています。 そこでエクセルマクロにて (1) Aのデータの必要部分をコピー、Cに貼り付け (2) Bのデータの必要部分をコピー、Cに貼り付け (3) 全体を日付順にソート というものができました。 ただ、Bのデータを貼り付ける位置で問題が発生しています。 仮に、Aに200行までのデータが入っている場合、Bのデータを201行目に張り付けすれば問題ありませんが、Aのデータが増えたときにはAのデータの201行目以降はBのデータで上書きされてしまいます。 そこで、Bのデータを上記の例だと250行目あたりに張り付けするようにマクロを変えると、なぜかBのデータは一切Cに反映されなくなってしまいます。 この理由と、上記の対策があれば教えていただければと思います。 ちなみに、現在設定されているマクロは以下の通りです。 自動記録にてつくってあるので無駄な部分もあるかと思いますが、よろしければご覧いただければと思います。 Sheets("Aのシート").Select ActiveWindow.SmallScroll Down:=-138  Range("A4:O200").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=-162  Range("A4").Select ActiveSheet.Paste Application.CutCopyMode = False  Sheets("Bのシート").Select Range("G25:G28").Select Range("G28").Activate ActiveWindow.SmallScroll Down:=-30 Range("A4:O120").Select Selection.Copy Sheets("Cのシート").Select ActiveWindow.SmallScroll Down:=147 Range("A181").Select ActiveSheet.Paste Cells.Select Range("A4:O200").Select Selection.Sort Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("D4") _ , Order2:=xlAscending, Key3:=Range("E4"), Order3:=xlAscending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _ xlSortNormal, DataOption3:=xlSortNormal End Sub

  • こんなマクロなんですが。

    下記のマクロでエクセルの表からデータ(文字列)を取得するようにしたいとおもっています。 Range("B23").Select Selection.Copy Range("F23").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False Range("B24").Select Selection.Copy Range("F24").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Range("B25").Select Application.CutCopyMode = False Sheets("September 03").Copy Before:=Sheets(2)          ←ここ Selection.Copy Sheets("September 03 (2)").Select                   ←ここ Sheets("September 03 (2)").Name = "September 10"       ←ここ Range("B33").Select Application.CutCopyMode = False ActiveWindow.SmallScroll Down:=-15 Range("F12:L18").SelectEnd Sub と、まだ続くんですが、とりあえずここまでで。 番地のデータを取り込むようにしたいんですが、うまくいきません。 ←ここ っていうのがまさにそれです。

  • Excelマクロを削除するマクロについての質問です。

    Excelマクロを削除するマクロについての質問です。 現在Excel2003で、記入に便利なようにマクロを使って「パソコンボランティア活動報告書」(以下"活動報告書")を作っています。 この活動報告書をセキュリティ警告(マクロを有効にする等)が出ないようにしてホームページに載せたいので、私なりに「新しいマクロの記録」を使って、「マクロ削除」のマクロを作ってみました。 しかしこれでは今までのマクロは削除されますが、「マクロ削除」マクロが残ってしまいます。 今までのマクロはもちろんのこと、「マクロ削除」マクロを消すためにはどうすればいいのでしょうか? Sub マクロ削除() ' ' マクロ削除 Macro ' ' ActiveSheet.Unprotect ActiveWindow.SmallScroll Down:=9 Range("Q27:R27").Select Selection.ClearContents ActiveWindow.SmallScroll Down:=-21 Sheets("リスト項目").Visible = True Application.DisplayAlerts = False Sheets("リスト項目").Delete Cells.Select With Selection.Validation .Delete .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _ :=xlBetween .IgnoreBlank = True .InCellDropdown = True .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Range("E4:P4,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7,C15:AG17").Select Range("C15").Activate ActiveWindow.SmallScroll Down:=9 Range("E4:P4,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7,C15:AG17,I27:O27,C28:AG41"). _ Select Range("C28").Activate ActiveWindow.SmallScroll Down:=15 Range( _ "E4:P4,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7,C15:AG17,I27:O27,C28:AG41,C42:AG44"). _ Select Range("C42").Activate Selection.ClearComments ActiveWindow.SmallScroll Down:=-36 Range("AC4:AE4,F5:I5,J5:AG5,E6:N6,R6:AG6,F7:J7,O7:AG7").Select Range("O7").Activate Selection.ClearContents Range("E4:P4").Select ChDir "C:\work" ActiveWorkbook.SaveAs Filename:="C:\work\yyyymmddパソコンボランティア活動申請及び報告書.xls", _ FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Range("E4:P4").Select End Sub

  • マクロの変更の仕方を教えて下さい。

    前任者の作ったエクセルの表を使っています。商品販売と計算の2種類のシートがあります。商品販売にはマクロに関係する集計とクリアの二つのボタンが作られてあります。教えて頂きたい何点かがあるのですが、最初にクリアのマクロの変更をお願いします。 商品販売のエクセルの行数を現在の300行から600行に増やしたいのです。エクセルの表は増やせるのですが、マクロは単に300の数字を600に訂正するだけでいいのか分かりません。是非教えて下さい。 Range("A6:B300,E6:E300,G6:G300,I6:I300").Select Range("I6").Activate Selection.ClearContents Sheets("計算シート").Select ActiveWindow.SmallScroll Doun:=-15 Range("T3:AI297").Select Selection.ClearContents ActiveWindow.SmallScroll Down:=-231 ActiveWindow.ScrollRow=55 ActiveWindow.ScrollRow=54 と55 54 53 52 49 46と数字が不規則に小さくなりながら続き、最後は3で終わり ActiveWindow.ScrollRow=3 Range("R2").Select Sheets("商品販売").Select Range("I1").Select ActiveWindow.ScrollRow=295 ActiveWindow.ScrollRow=294 と今度は295 294 292 291 288 285 279とまた数字が続き 最後は ActiveWindow.ScrollRow=6 Range("I2").Select End Sub ActiveWindow.ScrollRow= の数字の意味が全く分かりません。構わずに最初の300→600の訂正だけで大丈夫でしょうか?

  • 保護の解除・設定

    いつもありがとうございます。 現在シートの保護がパスワード入りでかかっています。 マクロで保護を解除するときに、 パスワードを入力不要で解除できませんか? また、引続きシートを保護するときに、 パスワードを入力しないで、元の、パスワードで、 保護が出来るでしょうか? 現在は、下記のようになっています。 (マクロの記録でしか作れませんので・・、) ActiveSheet.Unprotect ActiveWindow.SmallScroll Down:=24 Range("B50:X69").Select Selection.Copy ActiveWindow.LargeScroll Down:=-2 ActiveWindow.LargeScroll ToRight:=-3 ActiveWindow.SmallScroll Down:=-9 Range("B1").Select ActiveSheet.Paste Range("B2").Select Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 以上、よろしくお願い致します。

  • エクセルマクロの解説をお願いします!

    マクロ勉強中の初心者です。度々質問させていただいてます。 下記はあるマクロの抜粋なのですが、何をしているのか、何を表しているのかがわかりません。 一応途中までは自分なりに解釈してみたのですが、この部分は解読不能でした。どうかお力をお貸しください。   Dim a As Integer   a = Range("A65536").End(xlUp).Row ActiveWindow.SmallScroll Down:=-18 Columns("A:A").Select Range("A" & a).Activate Application.CutCopyMode = False Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWindow.SmallScroll Down:=-12