クリップボード内の文字列を置換するスクリプトg
2024年10月21日
エクセルのグラフが言うことを聞かない。
データのある月までグラフを表示したいんだけど、空欄の部分を0としてプロットされてしまう。
なんか良い方法ないの!?
今回は、エクセルのグラフの範囲を修正するためのスクリプトを作った話。
データのある月までグラフを表示したいんだけど、空欄の部分を0としてプロットされてしまう。
なんか良い方法ないの!?
今回は、エクセルのグラフの範囲を修正するためのスクリプトを作った話。
原因調査
調べたところ、グラフの設定で「データの不足を0として扱う」オプションがオンになっていないか確認せよということだった。けど、設定変えても反映されず。。。
元のグラフを作成した人に聞いたけど、選択範囲を手動で修正してるらしい。それやってらんなくない!?
力技で対策
グラフの元データは、横方向に時系列となっているので、グラフを定義しているレンジの列文字を置換すればいける。手で直しても良いけど、列指定が3箇所あるので置換した方が早い。
手作業手順
該当のグラフをクリックして、数式をコピー。メモ帳を開いてペースト。置換ウィンドウを表示して、列文字を置換。
置換結果をコピーして、元の数式フォームにペースト。
面倒すぎる。
スクリプトを作ったった
メモ帳を介して置換すると手間が大きいので、クリップボードの内容を読み込んで、特定の文字を置換してクリップボードに戻すスクリプトを作った。また例によって、パスの通ったフォルダにショートカットを配置して、名前を指定して実行できるようにした。
スクリプトを活用した手順
該当のグラフをクリックして、数式をコピー。windows + Rからスクリプトを実行して、元の数式フォームにペースト。ソースコード自体は、過去に使ったものの組み合わせなので、新しいことはなんもない。
以下ソース
rep.vbs
'クリップボードの文字列を置換して再格納するスクリプト
Option Explicit
const tarStr = ":$BU$"
const repStr = ":$BX$"
'クリップボードの情報を取得
dim tBuf : tBuf = GetClipboardText()
'文字列を置換
tBuf = replace(tBuf,tarStr,repStr)
'クリップボードへ送る
call sendClipbord(tBuf)
'******************************************
'クリップボードを取得 'http://osanai.org/47/
Function GetClipboardText()
Dim objHTML
Set objHTML = CreateObject("htmlfile")
GetClipboardText = Trim(objHTML.ParentWindow.ClipboardData.GetData("text"))
End Function
'クリップボードに格納
sub sendClipbord(text)
With CreateObject("WScript.Shell")
With .Exec("clip")
Call .StdIn.Write(text)
Call .StdIn.Close()
End With
End With
end sub
PR
Comment