
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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教科書などに初めから書いてあ...
-
ノートPC探してます。イラスト...
-
プログラマー向けのノートパソ...
-
消しゴムがくっついて、跡が取...
-
分子量とマーカー移動度の片対...
-
CDやDVDに書くマジックペン
-
障害者手帳を無くしてしまいま...
-
自作パソコンから既製品に買い...
-
ノートPCは持ち運べないと意味...
-
内容証明郵便内の文書に太字を...
-
日頃、感じる不便なものってあ...
-
リールの紐が切れてしまったの...
-
ネットワークが検出できません
-
ハンゲームって無料ですよね??
-
PCモニターでXBOX360
-
名刺サイズの黒い台紙を探して...
-
家計簿のページを印刷したい
-
デイトレードにおすすめのパソ...
-
ノートPCのスペック、あなた...
-
パソコンで絵を描くにはどんな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
書いたり消したりできるラミネ...
-
教科書などに初めから書いてあ...
-
CDやDVDに書くマジックペン
-
大学を平日一日休んで運転免許...
-
Excel:任意の列だけCSV形式で...
-
消しゴムがくっついて、跡が取...
-
「覚書」、「メモ」、「備忘録...
-
両面印刷するとき裏表とも罫線...
-
Windows10で、拡張子が.pyのフ...
-
VBAでメモ帳にコピペをしたいの...
-
日頃、感じる不便なものってあ...
-
色鉛筆の箱の修理について
-
Wordで 文字の一部にモザイクを...
-
メモ帳のテキストがいつのまに...
-
ぺたろうの代わりが欲しい パソ...
-
「筆記用具」という言葉はノー...
-
メモ帳でタブ幅の設定はできる...
-
字が下手すぎて祝儀袋を持って...
-
PCの画面上に文字や線を引ける...
-
プロジェクタだと動画が映らない
おすすめ情報
作成したマクロは以下のものです。*の置換部分を追加してもらえればと考えております。
そんな単純なものではないのかもしれませんが、分かればお願いします。
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