忍者ブログ

クリップボード内の文字列を置換するスクリプトg

2024年10月21日
エクセルのグラフが言うことを聞かない。

データのある月までグラフを表示したいんだけど、空欄の部分を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
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字