アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

VBEの右クリックに「よく使う構文の貼り付け」を追加したいと考えています。

例:右クリックメニューから"for文"→"終端セルまで"で以下の文を張り付ける
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
for i = 2 to Cells(Rows.Count, 1).End(xlUp).Select

next i
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

"選択範囲のコメントアウト"を追加したり、Excel側の右クリックにマクロを登録する等の方法は検索したら出てきたのですが、表題の件は見つけられませんでした。

現状、直接記入するかメモ帳から貼り付けていますが少し不便を感じています
ご存知の方がいらしたら、ぜひ教えて頂きたいですm_m

補足質問(こちらは回答不要です)
VBEのショートカットに"選択の開始"は登録出来ないでしょうか
Shiftキーとの併用で任意の範囲選択が出来ることは存じていますが、Shiftキー押しっぱなしでは運指が辛い時があります

A 回答 (4件)

こんにちは。



× for i = 2 to Cells(Rows.Count, 1).End(xlUp).Select

○ For i = 2 to Cells(Rows.Count,1).end(xlUp).Row

ご希望に叶うかは分かりませんが、個人的なことですが、ちょうど、この件について、その貼り付けするツールの作者とのやり取りをこの間までしていたばかりです。

右クリックメニューでは、知りませんが、Ctrl + Shift + R のショートカットキーで、以下を登録してあります。
Lastrow=Cells(Rows.Count,1).End(xlUp).Row
これらのコード(テンプレート)は、40項目ぐらい登録しています。

ツールの名前は、「MZ-Tools」 といいます。MZは、マジンガーZの略だそうです。
VBAのみならず、VSでも使用できる、世界的に有名なツールのひとつです。

解説は以下で出ています。
https://www.ka-net.org/blog/?p=6260

現在は、Ver.8 で、$79.5 で、日本語対応もしていませんので、日本では、あまり一般的には購入されないとは思います。それでも、かつてVer.3 (フリー)は、皆の知られたツールでした。Ver.3 は、同じ機能はありましたから、ウィルスさえ気をつければ、本家にはありませんが、探せば見つかるかと思います。
https://www.mztools.com/index.aspx

なお、その昔は、VSSという、MSのディベロッパーバージョンの中にあったのですが、これはデータベース状にしてしまい、後がとても使いづらかったです。MZ-Tools には、ショートカットキーとは別に、お好みコード・エレメントという機能もついています。
「[Excel,VBA,VBE] VBE上」の回答画像2
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

「MZ-Tools」の存在は知っていましたが(某VBA本著者が使っていた為)、業務上導入できないので諦めていました。

>>右クリックメニューでは、知りませんが、Ctrl + Shift + R のショートカットキーで、以下を登録してあります。
まさにその機能(の代わりになるもの)を求めていました。VBE単体ではALT+αのショートカットキーしか適用出来ないんですよね...
せめて既存ショートカットキーの割り当て変更ぐらいはしたいものです
(Ctrl+Yの行削除に何度苦しめられたことか)

詳細な説明ありがとうございました。同様に困っている方の参考になればと思います。

お礼日時:2019/03/16 15:42

>Applicationオブジェクトをほとんど触ったことが無く、


そんなことはないはずです。ふつう、標準モジュールの場合、親オブジェクトはは、Application オブジェクトですから、その表示は省略しても動くはずです。

>よみ "ふぉいえ" (For i Endの略)
なるほど、単語登録を忘れない限りは大丈夫ですね。
「ん」を最初につけると良いとか聞きましたが、そういう方法もありますね。

>VBA Editor上で動作する、Application.Undoに該当するものがあるのでしょうか?

それは、Ctrl+z のことでしょうか。

今、こういう質問は見られなくなりましたね。Wscript.Shell を使う方法があります。つまり、Wscript を利用します。VBAの外から命令するので、VBAからは直接影響を受けなくなります。

話が戻りますが、ちょっと思いついた単語・文章登録の貼り付けプログラムですが、登録した文をクリツプボードに入れる方法があります。ふつうは、UserForm を利用しますが、それ以外の究極のクリップボードのコードです。過去のコードを利用して、たまたま出来てしまったので、紹介しておきます。これは、Windows側のクリップボードを利用した本格的なものです。ただし、エラー処理はされていません。Shortcut で呼び出して、数字や文字を入れます。クリックボードに入れたら、Ctrl + V で貼り付けてください。これをアドインなどにすれば、かなり本格的なものになります。
'---------------------------
'Excel は、32bit 用
Public Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Public Declare Function OpenClipboard Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
Public Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Public Declare Function EmptyClipboard Lib "user32" () As Long
Public Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Public Declare Function CloseClipboard Lib "user32" () As Long

Public Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long


Sub SelectSentences()
Dim num As Variant
Dim msg As String
num = Application.InputBox("数字を入れてください。", "SetenceLists", Type:=1)
If num = False Then Exit Sub
Select Case num
Case 1
 msg = "Lastrow = Cells(Rows.Count, 1).End(xlUp).Row"  '登録文(改行も入れられます)
Case 2
 msg = "Set Rng =Range(""A1"", Cells(Rows.Count, 1).End(xlUp))"
Case 3
 msg = Format(Date, "yyyy/mm/dd (aaa)")
End Select
Call CopyBufFClip(msg)
End Sub

Private Sub CopyBufFClip(ByVal buf As String)
Dim hText As Long
Dim pText As Long
If OpenClipboard(ByVal 0&) Then
 hText = GlobalAlloc(&H42, LenB(buf) + 1)
 pText = GlobalLock(hText)
 If Not IsNull(pText) Then
  pText = lstrcpy(pText, buf)
  Call GlobalUnlock(hText)
  EmptyClipboard
  hText = SetClipboardData(1 Or 7, hText)
 End If
 CloseClipboard
End If
End Sub

'---------------
Application.InputBox("数字を入れてください。", "SetenceLists", Type:=2) 2は文字列
Case 1 ここを数字ではなく、文字にすることも可能です。
改行は、"文" & vbCrlLf & "文" で入ります。
---------------------
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

>>Applicationオブジェクトをほとんど触ったことが無く、
>そんなことはないはずです。ふつう、標準モジュールの場合、親オブジェクトはは、Application オブジェクトですから、その表示は省略しても動くはずです。
その通りですね。"触る"という表現が間違っていました。普段はモジュールやブック以下しか意識せず、たまに.ScreenUpdatingなり.Waitを使う程度の知識レベル という意味です

>「ん」を最初につけると良いとか聞きましたが、そういう方法もありますね。
なるほど。「んあ」にFor系「んい」にWhile系 等と決めておけば、通常変換されない上に略語をしっかり覚えずとも欲しい定型文を選択できますね

>Wscript.Shell を使う方法があります。つまり、Wscript を利用します。VBAの外から命令するので、VBAからは直接影響を受けなくなります。
ありがとうございます。早速、貼って頂いたコードと共に試してみました。

Sub hoge() 'SelectSentencesの末尾で実行

 Dim WSH
 Set WSH = CreateObject("WScript.Shell")
 'メモ帳を開き、クリップボードの内容を張り付ける
 WSH.Run ("notepad.exe")
 Application.Wait Now() + TimeValue("00:00:01")
 WSH.SendKeys "^v"

End Sub

貧相なコードですみません。
Wscriptを軽く調べてみたところ膨大な量の情報が流れ込んできたので(有難いことです)こちらはじっくりと勉強させて頂こうと思います。

Windows側のクリップボードを利用するのは目から鱗でした。
特にCase 3 の「事前に整形した文字列をクリップボードにコピーする」ショートカットは、私の実務の一部の効率化に直結するものでした。
早速、組み込んで使ってみようと思います。

私が考えもしなかった手法や関数の数々を教えて頂き本当にありがとうございます...
まだまだ勉強が必要ですが、現時点でかなりの効率化が図れる実感があります。
度々の親切なご回答、あらためてありがとうございました!

お礼日時:2019/03/17 17:38

こんばんは。



>せめて既存ショートカットキーの割り当て変更ぐらいはしたいものです
>(Ctrl+Yの行削除に何度苦しめられたことか)

この程度は、OnKeyメソッドで登録すればよいです。
個人用マクロブックに登録すれば、マクロブックでなくても可能です。

Private Sub Workbook_Activate()
   Application.OnKey "^y", "MyMacro"   '^ は、コントロール+y
End Sub

後は、VBA Editor 上で動く、COM アドインになってしまうので、業務上許されないなら、どうしようもないですね。経験はあるのですが、USBメモリも許されるわけではありませんからね。

持ち込みできないときは、ある程度の期間、在籍できるなら、通常出てこない単語で、IME に登録します。ユーザー辞書に登録するので、本体に影響を与えるわけではありません。そうでなければ、やはりメモ帳でテキストファイルにするか、暗記するかどちらかになりますね。(暗記しても、私の場合、しばらく使っていないと忘れます)
    • good
    • 1
この回答へのお礼

再度のご回答ありがとうございます。
"業務上導入できない"ことから、いくつも代案を挙げて頂きたいへん感謝しております


Applicationオブジェクトをほとんど触ったことが無く、試しに作ってみたのですがExcel上でしか適用されませんでした。
''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Mymacro()
 Application.Undo
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''
VBA Editor上で動作する、Application.Undoに該当するものがあるのでしょうか?


IME登録は完全に盲点でした。
単語 "For i = 2 to Cells(Rows.Count,1).End(xlUp).Row"
よみ "ふぉいえ" (For i Endの略)

試しに上記を登録して使ってみた所、直観的に素早く入力できました
入力に慣れたら、メモ帳からのコピペより断然早くなりそうです
改行込みの単語登録には“オープン拡張辞書”なるものが必要らしいので、別途調べてみようと思います(恐らく私の環境では無理そうですが)
.tsv形式で一括登録できるのも、Excel上で整理出来てとても良いですね

お礼日時:2019/03/16 22:00

市役所などの自治体が行っているパソコン相談で相談したほうが良いと思います。

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
Excelの基本動作等の相談には乗ってくれるとは思いますが、表題の件は無理かと思われます(特別詳しい方がいれば別ですが...)

お礼日時:2019/03/16 10:10

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