質問: エクセルのマクロ(たぶん)についての質問です。 自分の使っているエクセルシートにはA列~F列まで上から下まで1000行程度使って色々なデータがあります。 この中でF列は上から下まで 【詳細について】 :::【ご注文について】 という文章が載ってます。自分がやりたいのは他の色々なサイトからコピー&テイストしてきた 文章をこの :::の部分に1行ごとに貼り付けたいのですが通常の動作であればまず1F列にカーソルを あわせて2マウスをダブルクリックして3:::の部分までカーソルを移動させ4貼り付ける。 という風になるのですが大変手間なので省略して1F列にカーソルをあわせる2自動的に:::の 部分にカーソルが合わさり3そのままエンターキーを押せば貼り付けできる というように簡略化したいのですが操作を教えて下さい。
回答: (準備作業) ・Excelで ツール → マクロ → VisualBasicEditer ・VisualBasicEditerで ツール → 参照設定 ・参照設定で Microsoft Forms 2.0 Object Library にチェックを入れる。 (マクロ作成) (1)とりあえず空のマクロ作成 ・Excelで ツール → マクロ → 新しいマクロの記録 ・マクロの記録は とりあえず何も変更せずにOKをクリック ・Excelで A1をクリック → 記録終了をクリック (記録終了のボタンが見当たらない場合は、ツール → マクロ → 記録終了) (2)編集作業 ・Excelで ツール → マクロ → VisualBasicEditer ・VisualBasicEditer左側にて 標準モジュール → Module1 を選択 ``` Sub Macro1() ' Macro1 Macro ' マクロ記録日 : 2009/10/31 ユーザー名 : Range("A1").Select End Sub ``` といったものが右に出てくるので、以下に書き換え ``` Sub Macro1() Dim c As Variant, d As New DataObject, t As String c = Application.ClipboardFormats If c(1) = xlClipboardFormatText Then d.GetFromClipboard Cells(ActiveCell.Row, 6).Value = Replace(Cells(ActiveCell.Row, 6).Value, " :::", d.GetText) Else MsgBox ("クリップボードの内容が文字ではないので貼り付け出来ません") End If End Sub ``` (3)動作確認 ・一旦、Excel画面に戻って、いつもどおりA列に記入し、 書籍検索も行い、コピーまでを実行する。 ・VisualBasicEditorの画面に戻って、先ほどのマクロ内のどこかをクリックしておいてから、 実行 → Sub/ユーザーフォームの実行(ツールバーにもあるので、それをクリックでもOK) ・Excel画面に戻って、貼り付けが正しく行われているかをチェック。 上記マクロは実行テストを行ったものを貼り付けていますので、動かないとすれば、 F列の:::が実は半角文字だったといった具合に、どこかが微妙に違うため、 置換されなかったということになりますので、よくご確認ください。 (マクロ登録) Ctrl + V で動くようにしたい場合 Excelで ツール → マクロ → マクロ マクロのダイアログで Macro1を選択 → オプション マクロオプションダイアログで V を入力 ※これによってCtrl+Vという貼り付け動作がマクロ動作に切り替わりますが、 それは、このファイルだけです。他のファイルでは通常通りの動作となります。 (補足) ・このマクロではカーソルは移動せず、F列の内容だけが書き換わるように作ってます。 ・Excelに切り替えて、Ctrl+V で F列の内容が変わるように作ってますので、 別質問 question:1256930412 のような作業は不要になります。 ・間違った操作をする度にメッセージが出るのが煩わしいという場合は、 MsgBoxの行を削除するなり、コメントアウトするなりします。 ・画像などは貼り付けられない仕様にしています。 画像貼り付けなどを希望する場合は、IF判定の部分を適宜改造することになります。 その際には [XL95] 組込み定数一覧 (1/3) などが参考になることでしょう。