プロが教えるわが家の防犯対策術!

エクセルVBAを自力で勉強中です。
Filename:=Left(ThisWork・・・ の意味が知りたいです。

具体的には、

作業中のファイルがあるフォルダに、アクティブシートを保存したいと思って、いろいろ調べた結果、

Worksheets.Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".")) & Format(Now(), "yyyy-mm-dd-hh-mm-ss")

と書くと、アクティブシートが、元ファイルのあるフォルダにPDFで保存できました。
このコードは、ネットで探したものをコピペでつなぎ合わせました。

このコードのなかで、

Worksheets.Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF,

の意味はなんとかわかりました。

Filename:=Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".")) & Format(Now(), "yyyy-mm-dd-hh-mm-ss")

の内、

& Format(Now(), "yyyy-mm-dd-hh-mm-ss")

の部分は、ファイル名をどうするのか、を書いているのだと理解しています。

調べても意味が理解できなくて困ってる部分は次のところです。つまり、

Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "."))

の部分です。この部分を、

ActiveWorkbook.Path

に変えると、アクティブシートが、元ファイルのあるフォルダにPDFで保存できなかったので、

Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "."))

のどこかの部分のおかげで、アクティブシートが、元ファイルのあるフォルダにPDFで保存できるのだと考えています。
この部分の意味がわかると、応用も利くと考えて、コードの意味するところをネットで調べるのですが、

Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "."))

の、どの部分の記述で、作業中のファイルがあるフォルダに、アクティブシートを保存することができたのか、自力で調べて理解することが難しいです。

Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "."))

の、どの部分の、どのような記述で、作業中のファイルがあるフォルダに、アクティブシートを保存することができたのか、教えてほしいです。

どうぞよろしくお願いいたします。

A 回答 (1件)

Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, "."))



Left(文字列,長さ)の構文で、文字列の左側から長さ分の文字列を取り出します。
文字列は、ThisWorkbook.FullNameなのでこのブックの絶対パスが格納されています。
このブック名がBook1.xlsmで、C:\sampleに格納されていれば
文字列は C:\sample\Book1.xlsm になります。
ここから、ドット(.)までの文字列を取り出す場合は、ドットの位置は左から16桁目なので
Left("C:\sample\Book1.xlsm",16)とすれば "C:\sample\Book1." が取り出せますが
問題はどうやって16の値を取得するかです。
そのために、
InStrRev(文字列, ".")を行います。
これは、ドットの位置を文字列の後ろから検索し、そのドットの位置を返す関数です。
従って、(ThisWorkbook.FullNameは"C:\sample\Book1.xlsm"になるので)
InStrRev("C:\sample\Book1.xlsm", ".") により、ドットを後ろから探して、16の値を取得します。

最終的に
Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".")) により
このブックの完全パス名から拡張子(xlsm)を除いた部分を取得します。

(ちなみにInStrRevは後ろから文字を検索しますが、前から検索しないのは、例えばブックの格納フォルダ名が
"C:\sapmple.01"のようにフォルダ名の中にドットが含まれても正しく処理できるようにするためです)
    • good
    • 1
この回答へのお礼

ありがとうございました。

お礼日時:2017/07/27 14:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています