2023年6月30日金曜日

excel vbaでシートの列に引用符付きの式を入れるためのコードでは、引用符をダブルで書けば良い。

 excelでは引用符は文字列を設定するために用いられる。
 例えば、B列とC烈とD列をハイフン("-")で連結するのであれば、=B2&"-"&C2&"-"&D2となる。ここで&と文字列を挟む引用符(")が重要な役割を果たす。
 この式をvbaでA列に設定するコードは、以下の通り。なお、最大行はB列で求めている。

Dim i As Long
Dim maxRow As Long
  maxRow = Worksheets("data").Cells(Rows.Count, 2).End(xlUp).Row
  For i = 1 to maxRow 
    Range("A"&i).Formula = "=B" & i & "&""-""&C" & i & "&""-""&D" & i
  Next
 つまり、式のなかの引用符はダブルで記述する必要があるのだ。
そして、上記のようなやり方で、複数の列でユニークな値を生成し、VLOOKUPでピックアップできるようにするのである。

2023年6月21日水曜日

vbaでメールを操作するときはoutlookを事前に起動していないと例えば、GetInspector.WordEditorが実行時エラーになるよ

vbaでメールを操作するときは、outlookを事前に起動しておく。
当然のことですが、意外と忘れて、vbaコードが実行時エラーとなる。昨日は、動いたのに、なんでーと慌てる。
そんな時には、outlookを立ち上げましょう!そしたら、動くかもです。

2023年6月7日水曜日

タスクスケジューラで「ユーザーがログオンしているかどうかにかかわらず実行する」をチェックしたのに、バッチが起動されないのを解決するまでのストーリー

 ログインしたままだと、動いていた夜間バッチは、必ず、一旦、ログオフする運用に変わると、そのままでは起動されなくなってしまった。さて、どうする?
 タスクスケジューラのバッチ設定で、まずは、「ユーザーがログオンしているかどうかにかかわらず実行する」をチェックしてみた。でも、これだけでは、起動されなかった。
 次に、ぐぐると、開始オプションにそのバッチがあるフォルダを作業フォルダとして指定せよとあったので、そうしたのだが、それでも、なお、起動されなかった。
 そして、再びググり、「最上位の特権で実行する」もチェックしたが、駄目だった。
 そこで、試しに、コマンドプロンプトで、そのバッチを動かしてみた。そしたら、動かそうとした実行ファイルが、他のプロセスで使用中と怒られた。
 なので、タスクスケジューラで、該当のバッチの右クリックし、実行中のインスタンスを全て停止してみた。
 そしたら、バッチは、ログインしていなくても動作するようになった。
 いろいろ試行錯誤したせいで、インスタンスが宙に浮いてたんだね。
 ま Windowsは、色々とわかりにくいね。やれやれ。