VBAの自動記録の場合は、CTR+Aなどで実行できますが、キーボード上段にあるF1からF12のキーを押すと実行することは可能ですか?

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

A 回答 (1件)

こんにちは。

maruru01です。

標準モジュールの「Auto_Open」プロシージャか、ThisWorkbookモジュールの「Workbook_Open」プロシージャに、

Application.OnKey "{F1}", "マクロ名"

のように記述します。
詳細は、VBAのヘルプで「OnKey」を検索してみて下さい。
    • good
    • 0

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

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

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

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

QエクセルマクロVLookupについて

定義ブック.xlsm : 項目名、項目カテゴリ名、項目名長、文字種類 を定義する為ブック。
辞書ブック.xls : 項目カテゴリ名、項目名長、文字種類をこのブック内で色々処理して設定している。

定義ブックの項目名で検索し、
辞書ブックの項目カテゴリ名、項目名長、文字種類を参照してくる。

定義ブックを開いた時に辞書ブックの内容から値を参照(vlookup)するようにしたいです。
定義ブック、辞書ブック、ともに今後、行数が増える想定なので、
何行目まで、というのを変数にしてマクロで実装しようとしています。

そこで、
Application.WorksheetFunction.VLookup()
を使ってみたのですが、そのセルが正常に値を表示しません。
vlookupをセルにベタ書きにすれば値は取得できている為、検索値が見つからない為にエラーになっている系統ではないハズです。
エクセルのバージョンは2007です。

また、エクセルにvlookupをベタ書きするようにマクロを組むと、それは正常に値を表示します。
(最悪この手ですが…、セルにカーソルを合わせるとvlookupの式が表示され、避けたいトコロです)

どのように修正すれば良いでしょうか…?
マクロは初心者です…。

以下、ソースの抜粋です。

******************************************
Dim ItemCode As Variant
Dim SerchArea As Variant
Dim LastRow As Long

'辞書ブックをアクティブにする
Workbooks("辞書ブック.xls").Activate
ActiveWorkbook.Worksheets("辞書シート").ActivateLastRow = Cells(Rows.Count, 1).End(xlUp).Row

'項目数を取得
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row

'最終行を取得(辞書ブック.辞書シートのvlookupを何行目までの範囲にするか)
SerchArea = "[辞書ブック.xls]辞書シート!$B$5:$F$" & LastRow


'定義ブックをアクティブにする
Workbooks("定義ブック.xlsm").Activate
ActiveWorkbook.Worksheets("定義シート").Activate

For I = 11 To ColumnCnt
'C11セルから下へ、項目名を検索値として取っていく
ItemCode = Cells(I, 3)
'辞書ブックから値を取得(項目カテゴリ名) 【この書き方だとセルには「value!」と表示される】
Cells(I, 16).Value = Application.VLookup(ItemCode, SerchArea, 2, False)

'辞書ブックから値を取得(項目名長) 【この書き方ならセルには正しく値が表示されるけど、勿論、セルにカーソルを合わせると、vlookupの式が表示される】
Cells(I, 38).Value = "=VLOOKUP(C" & I & ",[辞書ブック.xls]辞書シート!$B$5:$F$" & LastRow & ",4,FALSE)"
Next I

定義ブック.xlsm : 項目名、項目カテゴリ名、項目名長、文字種類 を定義する為ブック。
辞書ブック.xls : 項目カテゴリ名、項目名長、文字種類をこのブック内で色々処理して設定している。

定義ブックの項目名で検索し、
辞書ブックの項目カテゴリ名、項目名長、文字種類を参照してくる。

定義ブックを開いた時に辞書ブックの内容から値を参照(vlookup)するようにしたいです。
定義ブック、辞書ブック、ともに今後、行数が増える想定なので、
何行目まで、というのを変数にしてマクロで実装しようとし...続きを読む

Aベストアンサー

>何行目まで、というのを変数にしてマクロで実装しようとしています。

辞書の範囲が増えても
Range("B:F")
と指定すれば最終行を求める必要はないのですが

マクロ上でVLOOKUPを利用する場合
Application.VLookup(検索値, 範囲, 列番号, 検索方法)

範囲(SerchArea) は Rangeオブジェクトです

ちと修正すると

Sub sample()
'ここから
Dim objWBK As Workbook
Dim objSH As Worksheet
Dim SerchArea As Range
Set objWBK = Workbooks("辞書ブック.xls")
Set objSH = objWBK.Worksheets("辞書シート")
Set SerchArea = objSH.Range("B:F")
'ここまでが検索範囲の定義です

For I = 11 To ColumnCnt  'ColumnCntは変数ですか?提示されたマクロには定義されていませんが、そのまま残しておきます

ItemCode = Cells(I, 3)
Cells(I, 16).Value = Application.VLookup(ItemCode, SerchArea, 2, False)
Next
End Sub

これで動くな?

>何行目まで、というのを変数にしてマクロで実装しようとしています。

辞書の範囲が増えても
Range("B:F")
と指定すれば最終行を求める必要はないのですが

マクロ上でVLOOKUPを利用する場合
Application.VLookup(検索値, 範囲, 列番号, 検索方法)

範囲(SerchArea) は Rangeオブジェクトです

ちと修正すると

Sub sample()
'ここから
Dim objWBK As Workbook
Dim objSH As Worksheet
Dim SerchArea As Range
Set objWBK = Workbooks("辞書ブック.xls")
Set objSH = objWBK.Worksheets("...続きを読む

QF1キーを押してもヘルプを表示しない方法

こんにちは、カテゴリーがあってるかわからないのですが・・・

キーボードでF1を押すたびにエクセルなどでヘルプが表示されます

これをさせない方法はあるのでしょうか?

キーの位置関係から、しょっちゅうでてしまうので困ってます

よろしくお願いします

Aベストアンサー

こんにちは。
このソフトで出来ると思います。
フリーなのでお試しください。
http://www.vector.co.jp/soft/win95/util/se063968.html

参考URL:http://www.vector.co.jp/soft/win95/util/se063968.html

QマクロでVLOOKUP数式書込 任意ファイルを指定する

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

前回、こちらで下記の質問をさせて頂きました。
https://oshiete.goo.ne.jp/qa/9372398.html

この時は、教えて頂いた方法でイケる!と思っていたのですが
後日確認すると、別ファイルからも数値を参照させていたことが判明しました。
自分で作った集計表なのに、簡単な動作確認しかしておらず
実際使用する時のことを考えていなかったため失念しておりました。
お恥ずかしい限りです。

その後、色々な情報を見て試行錯誤したのですが
やはりVLOOKUPの数式を書き込む際に任意のファイルを指定できるのが
別ファイルの数値を参照する際にも応用できますし
動作として、とても理想的なのですが…
やはりネットの情報だけでは限界があり
また、私自身も勉強不足でマクロのコードを読み解くことが出来ない為
なかなか、いい方法を編み出すことが出来ません。

調べていて、VLOOKUP+INDIRECT関数が理想に近いような気もしたのですが
参照先ファイルを開いていないとエラー値が返ってくるとの事で
別部署で開くことを考えると、ちょっと違うし…と未だ悩んでおります。
そこで、質問タイトルのような動作をさせることが出来るマクロをご教授頂きたく
再度質問させて頂くことにしました。


集計時の条件は以下の通りです。
①ファイルA、ファイルB、ファイルCと3つのファイルが存在し、
 ファイルCはファイルAとファイルBから数値を参照し構成される表です。
 ※今回の質問は、このファイルCの集計時に使用するマクロです。
②ファイルAおよびファイルBの数値参照行は毎回変動してしまうため、
 VLOOKUPを使用することを考えました(VLOOKUPに拘りがあるわけではありません)
③ファイルAおよびファイルBは月毎に名称が変更されます。

効率化を考えるなら、ファイルを一纏めにすることが最善なのでしょうが
一つのファイルにシートが沢山あり、その後の業務効率の関係上
ファイルA・B・Cを一つのファイルにすることは出来ません。


前回の質問でも書かせて頂いたように
任意セル(ファイルC)にファイル名を入力後、マクロを実行すると
そのセルにあるファイル名をVLOOKUPで参照引用させる
という動作が理想です。
社内に専門的知識を有する者が居ない為
誰でも操作できるファイルにしたいので、知識も無いくせに欲をかいて申し訳ありません。
マクロじゃ無理という場合は、どういった方法があるか教えて頂ければ幸いです。

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

前回、こちらで下記の質問をさせて頂きました。
https://oshiete.goo.ne.jp/qa/9372398.html

この時は、教えて頂いた方法でイケる!と思っていたのですが
後日確認すると、別ファイルからも数値を参照させていたことが判明しました。
自分で作った集計表なのに、簡単な動作確認しかしておらず
実際使用する時のことを考えていなかったため失念しておりました。
お恥ずかしい限りです。

その後、色々な情報を見て試行錯誤したのですが
やはりVLOOKUPの数式を書き込む際に...続きを読む

Aベストアンサー

お久しぶりです。前回の質問者のママチャリです。
リンクしているファイルが2つあるのであれば、2つ目のリンク先も変更すればいイケるのではないでしょうか。
こんな感じです。

Sub sample()
With ThisWorkbook
.ChangeLink Name:=.LinkSources(xlExcelLinks)(1), _
NewName:=Range("A1"), Type:=xlExcelLinks
.ChangeLink Name:=.LinkSources(xlExcelLinks)(2), _
NewName:=Range("A2"), Type:=xlExcelLinks
End With
End Sub

上記サンプルは、1番目のリンク先をA1セルで指定したファイル名に。2番目のリンク先をA2セルで指定したファイル名に、それぞれ変更します。

Qオートシェイプで作成した図形を矢印キーで移動させようとするとどのキーを押しても上にしか移動しない

マウスで強制的に下に移動することは出来るが思うようなところには動かせない
図形を選んで「図形の書式設定」を色々変えてみたが全く変わらない
また図形の順序を変えようとしたがこれも全く効かない

Aベストアンサー

新規作成文書でオートシェイプ図形を描画しても、そのような状態になりますか。
新規作成で問題なしの場合は、文書のどこかが破損した可能性があります。
この場合は、新規文書にコピー/貼り付け直して、修復できる可能性があります。
http://support.microsoft.com/kb/826864/ja

スタート→ファイル名を指定して実行で、winword.exe /a と指定してWordを起動してから、オートシェイプ図形を描画して行ってみた場合はどうですか。
正常に動作する場合は、全文書対象のテンプレートファイルに問題が発生している可能性があります。
ファイル検索で Normal.dotを探して、ファイル名を変更するか削除することで対処できます。
http://support.microsoft.com/kb/881319/JA/
http://support.microsoft.com/kb/826839/ja
 
Ctrlキーを押したままWordをセーフモードで起動して、オートシェイプ図形を描画して動作を確認してみます。
正常な動作になる場合は一旦終了して、再度Wordを通常に起動し、同じように正常動作となるか確認をしてみます。
http://support.microsoft.com/kb/827706/ja

ヘルプ→アプリケーションの自動修復を実行してから、オートシェイプ図形の動作を確認してみます。

その他、Wordのトラブルシューティング方法です。
http://support.microsoft.com/kb/826840/ja
http://support.microsoft.com/kb/883032/JA/
 

新規作成文書でオートシェイプ図形を描画しても、そのような状態になりますか。
新規作成で問題なしの場合は、文書のどこかが破損した可能性があります。
この場合は、新規文書にコピー/貼り付け直して、修復できる可能性があります。
http://support.microsoft.com/kb/826864/ja

スタート→ファイル名を指定して実行で、winword.exe /a と指定してWordを起動してから、オートシェイプ図形を描画して行ってみた場合はどうですか。
正常に動作する場合は、全文書対象のテンプレートファイルに問題が発生して...続きを読む

Qifとvlookupに代わるようなマクロ

お願いします。
一行1件で900件程度のデータがあります。1件当たりの項目(列)は150ほどです。住所録.xlsというファイルです。
これとは別に、個別1.xls~個別30.xlsというファイルがあり、それぞれシートが30ずつあります。
このシート全てに同一の個票フォーマットを作りました。vlookupやifとvlookupの組み合わせ関数をそれぞれの該当セルに入れれば各データは取り出せるのですが、非常に重く実用に向きません。こういった作業を効率よく行えるマクロをお教え願えませんでしょうか?
宜しくお願いいたします。

Aベストアンサー

なぜ、重くなるのか、というと、Vlookup などは、その戻り値を確保していないので、複数の場所に、そういった関数があると、すべてが連動してしまうからです。簡単な方法は、再計算を手動にすることですが、意外に効率が落ちます。

それをそのまま、マクロに以下のように移植してあげればよいわけです。

Rtn = Application.WorksheetFunction.Vlookup(検索値,範囲,列番号,検索の型)

を、Rangeオブジェクトと、数値で与えてやればよいはずです。

Rtn は、エラーも返ることもあるので、注意してください。
If IsError(Rtn) =False Then
  MsgBox Rtn
End If

とでもしてください。
難しく考えないでよいと思います。

ただし、.Formula = "=式" のようなスタイルにはしないでください。

結局のところ、ワークシート関数にまさるマクロ関数はないと言っても過言ではありません。Find メソッドなど、VBAネイティブメソッドと比較すると、遥かに、ワークシート関数のほうが処理が速いです。

最後に、そのようなファイルは、Accessなどのデータベースに移したほうがよいのではないか、と個人的には思います。

なぜ、重くなるのか、というと、Vlookup などは、その戻り値を確保していないので、複数の場所に、そういった関数があると、すべてが連動してしまうからです。簡単な方法は、再計算を手動にすることですが、意外に効率が落ちます。

それをそのまま、マクロに以下のように移植してあげればよいわけです。

Rtn = Application.WorksheetFunction.Vlookup(検索値,範囲,列番号,検索の型)

を、Rangeオブジェクトと、数値で与えてやればよいはずです。

Rtn は、エラーも返ることもあるので、注意してくださ...続きを読む

Qファンクションキー(F1)を機能停止したい!!

いつも参考にさせて頂いております。
今回もよろしくお願いします。

さて、Windows98でOffice2000をしようしていますが、文字変換前の打ち間違いなどで、『ESC』キーを押す機会があります。私の端末(SHARPのメビウス)では、『ESC』と『F1』キーがすぐ横に配置してあり、よく押し間違えてしまい、その度にHELPが起動してしまいます。
(気のせいかもしれませんが、Officeが95から2000に変えてからHELPの起動に凄く時間がかかるようになった印象があります)
正直 HELPの起動はかなり邪魔なので、機能を外したいのですが可能でしょうか?

Aベストアンサー

エクセルなら、マクロで『F1』キーを無効にできます。
マクロでできるってことはWordでもできるんだと思うのですが、
それはやったことないので。
エクセルの場合は、下記のマクロを個人用マクロブックに登録すればOKです。

Sub auto_open()

Application.OnKey "{F1}", "" ' F1キーでヘルプを表示させない

End Sub

QマクロでVLOOKUP関数をつかいたいのですが

エクセルでマクロを使ってVLOOKUP関数みたいなことを
したいのですが(文章力が無くてすみません。)

sheet1のセルb4を検索値にして、
sheet2のリストb3:C32を範囲に指定します
列番号は 2 
検索の型ほ FALSE      です。

この値をsheet1のセル"O4"に表示させて、
なおかつ”O4:O33"までオートフィルで数式を入れたいときは
どのようにマクロを組めばよいのでしょうか。

ほとんど初心者なのでマクロの記録を使ってやってみたのですが
エラーになってしまい、うまくいきません。
他力本願で申し訳ないのですがどなたか詳しい方
ご回答をお願いいたします。

Aベストアンサー

マクロ実行時のアクティブセルはどこになっていますか?
コードを見ると、O4セルがアクティブセルになっていないと、エラーが発生すると思います。

最初に
Range("O4").Select
として、セルO4をアクティブにしてみてください。

それが確認できると、次はSelectをやめてみましょう。

Range("O4").FormulaR1C1 = "=VLOOKUP(RC[-13],前月データ貼付!R3C2:R32C5,2,0)"
Range("O4").AutoFill Destination:=Range("O4:O33"), Type:=xlFillValues

この2行ですみます。
セルを指定しているので、アクティブセルを意識しなくても大丈夫です。

更に、セル(例:Range("O4"))の上位オブジェクトのシート名が省略されていることに気がついてください。
ということは、アクティブなシートがマクロの実行対象になります。
シート名で修飾すれば、マクロ実行時に、どのシートがアクティブであろうと同じ結果が得られるようになります。

マクロ実行時のアクティブセルはどこになっていますか?
コードを見ると、O4セルがアクティブセルになっていないと、エラーが発生すると思います。

最初に
Range("O4").Select
として、セルO4をアクティブにしてみてください。

それが確認できると、次はSelectをやめてみましょう。

Range("O4").FormulaR1C1 = "=VLOOKUP(RC[-13],前月データ貼付!R3C2:R32C5,2,0)"
Range("O4").AutoFill Destination:=Range("O4:O33"), Type:=xlFillValues

この2行ですみます。
セルを指定しているので、アクティ...続きを読む

Qエクセル記録したマクロを実行するとエラーがでます

マクロを記録させ、実行しようとするとエラーがでます。

エラーメッセージは、
「コンパイルエラー 印数は省略できません。」

で、エラー箇所は下記の☆と☆の間です。

End With
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.31)
.RightMargin = Application.☆InchesToPoints☆()
.TopMargin = Application.InchesToPoints()
.BottomMargin = Application.InchesToPoints()
.HeaderMargin = Application.InchesToPoints()
.FooterMargin = Application.InchesToPoints()
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1
.PrintErrors = 1620
End With


当方マクロの知識がないもので
なぜそうなったのか、どうすれば解決するのかわかりません。

お力を貸して下さい。

マクロを記録させ、実行しようとするとエラーがでます。

エラーメッセージは、
「コンパイルエラー 印数は省略できません。」

で、エラー箇所は下記の☆と☆の間です。

End With
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.31)
.RightMargin = Application.☆InchesToPoints☆()
.TopMargin = Application.InchesToPoints()
.BottomMargin = Application.InchesToPoints()
.HeaderMargin = Application.InchesToPoints()
....続きを読む

Aベストアンサー

> 印数は省略できません
引数(引数と呼ぶ)の間違いです。「いんすう」というと素の世界では笑われます。
Application.InchesToPoints()はVBAで使える関数(正確にはメソッド)で、関数(メソッド)には引数を取ります(広く言うと取らないときもあるが)。ここがなぜマクロの記録で無し()になったか分かりませんが、質問者が消したのでしょう。
インチ数をポイント数に換算する関数(メソッド)ですから、具体的なインチ数を数値かまたは、数値を代入した変数を入れないとダメです。
外に下のコード行も一緒です。これらの行を書かなければ既定値で設定されるはずです。
ーー
むやみにマクロの記録を使っている感じで、やはり基礎的なことは勉強が必要なんだと思います。

QVlookupマクロにつきまして

初心者で、
エクセルのマクロにて、下記の処理を行おうとしているのですが、
上手く行きません。
どなたかお助けください!

B3=Vlookup(A3,Sheet2!A:F,3,False)
B4 A4
B5 A5
とA列に値がある限りカウントアップしていきます。
以下の通り考えてみたのですが、動きません。

Sub vlookup()

Dim i As Long
For i = 3 To Cells(Rows.Count, "A").End(xlUp).Row
Cells(i, "B") = Application.WorksheetFunction.VLookup(Range(Cells(i, "A")), Worksheets("Sheet2").Range("A:F"), 3, False)
Next
End Sub

すみません、宜しくお願いします。

Aベストアンサー

こんばんは!

RANGEプロパティとCELLSプロパティを重複して記述しているので、
ちゃんと動作してくれないと思います。

>.VLookup(Range(Cells(i, "A")),

の行を

>vlookup(Cells(i, "A")
とするか、もしくは
>vlookup(Range("A" & i)

のようにしてみてください。m(_ _)m

Q保存ボタンを押した瞬間に処理を実行したい

マクロ初心者です。いつもお世話になっております。
また困っているので助けてください。

Sheet1というシート上に、マクロを組み込んだコマンドボタン(押すと画像を選べるフォームが出てきて、クリックすることでセルに画像を挿入できる)等が複数あります。
現在、Sheet1で全ての作業が済んだ後、設置してある保存ボタンを押すと不要なコマンドボタン(button294など)とSheet1以外の不要なシートが全て削除され、「ファイル名を付けて保存」ダイアログが出てくるようにプログラムを組んでいます。

Sub 保存ボタン_click()
Dim Filnam As String
Dim SourceFile As String
SourceFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name
Filnam = GetFileName
'Worksheet上の不要なオブジェクト削除
ActiveSheet.Shapes("Button 294").Delete

'"Sheet1"以外の不要シート削除
  Application.DisplayAlerts = False
For Each ws In Worksheets
If ws.Name <> "Sheet1" Then ws.Delete
Next
Application.DisplayAlerts = True

'名前を付けてファイルを保存
Dim 既定ファイル名 As String
Dim 保存ファイル名 As Variant
既定ファイル名 = "チラシ" & ".xls"
保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名)
If 保存ファイル名 = False Then
MsgBox "保存は中止されました"
Else
ActiveWorkbook.SaveAs 保存ファイル名
Application.DisplayAlerts = True
End If
End Sub

この動きに沿って素直に保存する分には特に問題はないのですが、保存をキャンセルした場合、もうボタンやシートが消えてしまっているため、作業中のシートに戻っても再び編集ができません…。
なので、保存ボタンを押すまではシート削除などの実行が待機され、ボタンを押した瞬間にプログラムが動くようにできないか?
あるいは、保存を中止した場合は一つ前の操作の段階(シートやボタンや削除される前の状態)に戻ることはできないか?
と考え悩んでいます。
是非お知恵をお貸しください。よろしくお願い致します。

マクロ初心者です。いつもお世話になっております。
また困っているので助けてください。

Sheet1というシート上に、マクロを組み込んだコマンドボタン(押すと画像を選べるフォームが出てきて、クリックすることでセルに画像を挿入できる)等が複数あります。
現在、Sheet1で全ての作業が済んだ後、設置してある保存ボタンを押すと不要なコマンドボタン(button294など)とSheet1以外の不要なシートが全て削除され、「ファイル名を付けて保存」ダイアログが出てくるようにプログラムを組んでいます。

Sub 保...続きを読む

Aベストアンサー

下記のコードで確認しましたが、キャンセルすると
"削除処理"と"保存処理"のメッセージは表示されませんが・・・(^^;

削除処理を移動させる場所を間違えてませんか?
もう一度確認してみてください。
Else と End If の間にあれば、実行されないはずですよ。

Sub 保存ボタン_click()
 Dim 既定ファイル名 As String
 Dim 保存ファイル名 As Variant
 既定ファイル名 = "チラシ" & ".xls"
 保存ファイル名 = Application.GetSaveAsFilename(既定ファイル名)
 If 保存ファイル名 = False Then
  MsgBox "保存は中止されました"
 Else
  MsgBox "削除処理"
  MsgBox "保存処理"
 End If
End Sub


人気Q&Aランキング

おすすめ情報