No.2ベストアンサー
- 回答日時:
こんにちは。
>(メモ帳上で操作したい)
かつて、Resource Hacker というツールで、構造を把握して、操作できましたが、Windows7 ぐらいからできなくなったと思います。少なくとも、私には、キーボードマクロのUWSCを操るならともかく、その問題は、何年掛かっても解決していません。
Excelが2003から2007に変わったと同様に、メモ帳の構造が変わったからだと思うのです。
貼り付け後に操作するのは、#1のコードよりも更に複雑になることは想像がつきます。もちろん、ショートカットキーを連続してできる見込みがあれば、やってみる価値はあると思います。
そこで、私が考えたのは、貼り付ける前に操作することです。
補足に載せられている
ActiveSheet.Range("BI4:CD21").Copy
この部分を、一旦、テキストに変えて、それを変数に入れて、その中で処理してから、クリップボードにいれればよいはずです。
Const CLSID As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
Set CB = CreateObject("new:" & CLSID)
これは、Excelのクリップボードです。あまり応用力はありませんが、Text 処理ぐらいなら可能です。
ただ、もし、ここの質問を他の回答者が読めば、かならず指摘されるのは、メモ帳を立ち上げて貼り付けるという順番の問題です。ふつうは、そのようなことはせずに、テキスト出力をしてから、メモ帳で吸い上げるということをします。そのほうが遥かに安全で確実です。つまり、一度、テンポラリーファイルを置いて処理するということです。
#1でやっていることはそれほど難しいものではありませんが、私個人が、どうしても操作中にハンドルが外れる問題に、数年前に試行錯誤で作ったコードです。
それから、これは、WScript から行うものだとすれば、
With CreateObject("Wscript.Shell")
.SendKeys "^A"
.SendKeys "^C"
.SendKeys "%{F4}"
.SendKeys "{Light}"
.SendKeys "{Enter}"
End With
になるはずです。しかし、保存が自動で行われるものでしたら、なおさら、
Excelで、CSVを出力するコードと同じように、Text を吐き出させるように作ったほうが楽だと思います。話しが見ええないようでしたら、サンプルを作ります。
VBAの中で、
Open OutFileName For Output As #1
Print #1,strLine '一旦、バッファに入れて、そこで処理して、Print(出力)させる
Close #1
を使えばよいです。
とても参考になりました。 この文章を頼りに解決しました。
Sub 計画書()
Dim ret As Long
ActiveSheet.Range("BI4:CD21").Copy
ret = Shell("Notepad.Exe", vbNormalFocus)
AppActivate ("無題 - メモ帳")
CreateObject("Wscript.Shell").SendKeys "^v"
Application.SendKeys "%ER", True
SendKeys """"
SendKeys "{Tab 5}"
SendKeys "{Enter}"
SendKeys "{Esc}"
SendKeys "^a"
SendKeys "^c"
SendKeys "%{F4}"
SendKeys "{Tab}"
SendKeys "{Enter}"
End Sub
ありがとうございました。
No.3
- 回答日時:
> *この間に「””」→空 の置換 マクロを 追加したい (メモ帳上で操作したい)
この部分を素直に回答すると
SendKeys "%E"
SendKeys "{DOWN}"
SendKeys "{DOWN}"
SendKeys "{DOWN}"
SendKeys "{DOWN}"
SendKeys "{DOWN}"
SendKeys "{DOWN}"
SendKeys "{DOWN}"
SendKeys "{ENTER}"
SendKeys """"
SendKeys "{TAB}"
SendKeys "{TAB}"
SendKeys "{TAB}"
SendKeys "{TAB}"
SendKeys "{TAB}"
SendKeys "{ENTER}"
SendKeys "%{F4}"
なります。
ダブルクォートをメモ帳の置換機能で削除しています。
※Windows10のメモ帳ではこれで動作しました、他のWindowsのメモ帳ではもしかしたら
ボタン等のレイアウトの違いからDOWNやTABの回数が異なるかもしれません。
ただ他の回答者様も仰られているように
わざわざメモ帳を開いて操作し、さらにコピーするという操作は普通行いません。
直接テキストファイルに出力すると思います。
メモ帳で編集してからクリップボードへコピーしたデータを最終的にどうしたいのかをご提示いただけば
もっとシンプルで確実な方法の回答がつくかもしれませんよ。
ありがとうございます。これで解決できました。
仕事上のことで””がつくとエラーになって送信できないとのことなので、これをとれる方法を考えていました。
文章足らず申し訳ありませんでした。
添付ファイルもテキストファイルになりますが、貼り付け作業は他部署の方が必要な個所へ行うことになっています。
しかし、これで解決できたので良かったです。本と考えて下さりありがとうございました。
No.1
- 回答日時:
以下は、ご質問の解答とは違うかもしれませんが、「コピーするところまでできましたが……」では、実際、どんなコードなのかは分かりかねますので、結果的には最初から作ったほうが早いように感じました。
>エクセルからメモ帳にコピーする
今、試してみましたが、" " が入る様子はありませんね。どのようなコードか分かりませんが、サンプルを書いておきます。以下は、貼り付けの一般的なコードだと思います。
クリップボードも、Win APIという方法もありますが、簡易型にしてしまいました。倍以上のコードになるからです。ExcelのClipBoard オブジェクトは、あまりオン・オフを繰り返し使うとハングする可能性があります。
以下は、ActiveCell の文字を、メモ帳にぺーストするという内容です。
'//標準モジュール
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
''Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Const WM_PASTE As Long = &H302
Sub Notepad_Paste()
Dim CB As Object
Dim hWnd As Long
Dim hWnd_c As Long
Dim cnt As Long
Const CLSID As String = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"
Set CB = CreateObject("new:" & CLSID)
If ActiveCell.Value = "" Then MsgBox "データが空です", vbExclamation: GoTo EndLine
CB.SetText ActiveCell.Value
CB.PutInClipboard
hWnd = FindWindow("Notepad", vbNullString)
If hWnd = 0 Then
Shell "Notepad.exe", vbNormalNoFocus
End If
Do
cnt = cnt + 1
hWnd = FindWindow("Notepad", vbNullString)
' hWnd = GetForegroundWindow() '現行では不要です。
DoEvents
hWnd_c = FindWindowEx(hWnd, 0&, "Edit", vbNullString)
Loop Until hWnd > 0 And hWnd_c > 0 And cnt < 6
Call SendMessage(hWnd_c, WM_PASTE, 0&, ByVal 0)
EndLine:
Set CB = Nothing
End Sub
'//
なお、改行そのものを入れるのでしたら、
If ActiveCell.Value .... の後に、
buf = Replace(ActiveCell.Value, vbLf, vbCrLf)
CB.SetText buf
として、クリップボードに入れてあげればよいです。
ご回答ありがとうございます。
また、親切に作成までしてくださりありがとうございます。
しかし、初心者のため、上記の内容が難しく理解できません。
作成したマクロは以下のものです。*の置換部分を追加してもらえればと考えております。
そんな単純なものではないのかもしれませんが、分かればお願いします。
Sub 計画書()
Dim ret As Long
ActiveSheet.Range("BI4:CD21").Copy
ret = Shell("Notepad.Exe", vbNormalFocus)
AppActivate ("無題 - メモ帳")
CreateObject("Wscript.Shell").SendKeys "^v"
*この間に「””」→空 の置換 マクロを 追加したい (メモ帳上で操作したい)
SendKeys "^A"
SendKeys "^C"
SendKeys "%{F4}"
SendKeys "Light"
SendKeys "Enter"
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 文字化け。メモ帳でUTF-8に変換後、エクセルへ貼り付けたいです。 3 2022/08/14 07:21
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- 電子書籍 WIN10で誤ってメモ帳タッチしてしまった 2 2022/12/29 21:02
- iPhone(アイフォーン) iPhoneのメモ帳を使ってますが、突然全然違うところに画面がジャンプします。なんですか ?この仕様 1 2022/12/19 09:19
- フリーソフト AutoHotKeyは別の独立したファイルで 動作させる方法はないのでしょうか 1 2022/09/04 13:14
- Windows 10 WIN11 UPdate 3 2022/09/22 08:36
- Excel(エクセル) メモ帳からエクセルにセル区切りで表示させたいんです 7 2023/02/25 22:04
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
- Excel(エクセル) エクセルでCSVを編集するとき、空白(NULL?)はどう入れますか 6 2023/06/08 15:30
- Android(アンドロイド) スマホのメモ帳の中身が消えてしまいました。 1 2023/01/15 17:33
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
VBAでメモ帳にコピペをしたいのですが…
PowerPoint(パワーポイント)
-
ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存
Visual Basic(VBA)
-
VB6側からテキストファイルをクリアにする方法
Visual Basic(VBA)
-
-
4
VBA メモ帳の上書き保存がしたい
Ruby
-
5
メッセージボックスのOKボタンをVBAでクリックさせたい
Visual Basic(VBA)
-
6
Excelからテキストへのコピーペースト
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教科書などに初めから書いてあ...
-
「筆記用具」という言葉はノー...
-
指を動かす人・・・。
-
日頃、感じる不便なものってあ...
-
ペンは剣よりも強しだが、戦闘...
-
VBAでメモ帳にコピペをしたいの...
-
「覚書」、「メモ」、「備忘録...
-
水泳帽の学年書き直し
-
Wordで 文字の一部にモザイクを...
-
Excel:任意の列だけCSV形式で...
-
消しゴムがくっついて、跡が取...
-
くっついた消しゴムかすをとる...
-
敬語「そちらは~様のお宅でい...
-
ヨドバシドットコムも置き配し...
-
メモ帳でタブ幅の設定はできる...
-
ウィンドウ11 メモ帳が文字化...
-
書いたり消したりできるラミネ...
-
CD盤の表面
-
授業中寝る人にノートを写させ...
-
他者の手首切断の夢ってどうい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メモ帳のテキストがいつのまに...
-
教科書などに初めから書いてあ...
-
「筆記用具」という言葉はノー...
-
Excel:任意の列だけCSV形式で...
-
Windows10で、拡張子が.pyのフ...
-
消しゴムがくっついて、跡が取...
-
ヨドバシドットコムも置き配し...
-
指を動かす人・・・。
-
PrintScreenキーが効かなくなり...
-
書いたり消したりできるラミネ...
-
小6でこの絵上手いですか? ア...
-
プロジェクタだと動画が映らない
-
Wordで 文字の一部にモザイクを...
-
日頃、感じる不便なものってあ...
-
他者の手首切断の夢ってどうい...
-
水泳帽の学年書き直し
-
「覚書」、「メモ」、「備忘録...
-
ペンだこのようなものが親指の...
-
大学を平日一日休んで運転免許...
-
くっついた消しゴムかすをとる...
おすすめ情報
作成したマクロは以下のものです。*の置換部分を追加してもらえればと考えております。
そんな単純なものではないのかもしれませんが、分かればお願いします。
Sub 計画書()
Dim ret As Long
ActiveSheet.Range("BI4:CD21").Copy
ret = Shell("Notepad.Exe", vbNormalFocus)
AppActivate ("無題 - メモ帳")
CreateObject("Wscript.Shell").SendKeys "^v"
*この間に「””」→空 の置換 マクロを 追加したい (メモ帳上で操作したい)
SendKeys "^A"
SendKeys "^C"
SendKeys "%{F4}"
SendKeys "Light"
SendKeys "Enter"
End Sub