文字列の入っている変数内で特定の文字列(今回はvbCrLf)が何個発生しているかを、高速に調べたいのですが、どのような方法があるでしょうか?

現在以下のことをやっています。
数千件のテキストファイルから特定文字列を検索しています。
検索を高速化するために、テキストファイルをバイナリーモードで1つの変数に読み込み、instr関数で検索しています。
見つかった場合、その位置から前にあるvbCrLfをInStrRev関数で、後ろにあるvbCrLfをinstr関数で位置を調べ、元の変数からmid関数で該当ラインを取り出しています。

検索はこれで可能ですが、特定文字列を調べたinstr関数の戻り値がテキストファイルの先頭からの位置(何桁目)なので、検索した文字列が何行目にあるか分かりません。
変数の検索文字が見つかった位置までの部分でvbCrLfが何個発生しているかが分かれば行数が判定できます。
vbCrLfを調べるinstr関数を何回も繰り返せば行数の判定は可能ですが、もっと高速に(一つの関数・命令で)調べることはできないでしょうか?
また他に行数を特定する良い方法があったら教えてください。
よろしくお願い申し上げます。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

行数をカウントするだけなら、FileSystemObjectのTextStreamを使用するのが最速だと思います。


改行コード以外の文字をカウントする場合は、RegExpクラスのmatchオブジェクトを使うのがよいと思います。

だいぶ以前に検証↓したことがありますので、ご参考まで。

http://fukkey.dyndns.org/pins/vb/021115/45028.html

参考URL:http://fukkey.dyndns.org/pins/vb/021115/45028.html
    • good
    • 1
この回答へのお礼

回答ありがとうございました。
RegExp、ヒントになりました。
> 改行コード以外の文字をカウントする場合は、
> RegExpクラスのmatchオブジェクトを使うのが
> よいと思います。
とのことですが、改行コードをカウントできました。
RegExpオブジェクトのPatternプロパティにvbCrLfを指定し
Executeメソッドを実行し、MatchesコレクションのCount
プロパティでvbCrLfの個数が分かりました。

FileSystemObjectのTextStreamはテキストファイルの全行数を調べる
ように思えますが、いかがでしょうか。
知りたいのは全行数ではなく、該当文字列のあった行です。
いずれにしても、先のMatchesコレクションで分かったvbCrLfの個数で
ラインが割り出せますので問題ありません。

お礼日時:2006/11/05 19:55

こんにちは。

Wendy02です。

>数千本のプログラムソースコード(即ちテキストファイル)があります。(既に存在しています)

私には、believe_meさんが、どういうご事情があるのか分かりませんが、失礼ですが、プロの方ではありませんか?私などアマチュアがあれこれ言える立場ではないかもしれませんが、わざわざ、アマチュアの使うOffice VBAなどは必要ないような気がします。

>全ソースコードを調べ、その項目名が使われるプログラム名(即ちファイル名)とその個所(何ライン目)の一覧表を作成する必要があります。

それは、Win では、Grep(GNUで、オープンソース付き)が一番なのです。しかし、それがダメなら、Grepの代わりに、擬似Grepの FindStr を使えばよいと思います。お仕事の立場上、手取り足取りのコードを書く必要はないと思いますから、すべてを書きませんが、以下のようなコードで取れます。後は、ファイル名:行数:内容 で、区切り文字が「:」ですから、それを、Split で区切れば、Excelのセルに取り出せます。

以前、私が作った検索プログラムを応用すれば、以下のようなコードになります。これは、テキスト出力までです。

ただし、以下は、Win2x系のみです。

Const QT As String = """"
Const OUTFNAME As String = "$SearchList.txt"
Const SEARCHWD As String = "RegExp" 'RegExpを探す
Cmd = "FindStr /rni " 'r =正規表現,n=行番号表示,i=大文字小文字無視
OutDir = ThisWorkbook.Path & "\"

'FILENAMEは、ワイルドカードが使えます。
"スペースがなければ、FILENAMEの前後のQT は、いらないです。
ret = Shell("CMD /C" & Cmd & " " & SEARCHWD & " " & QT & FILENAME & QT & " > " & QT & OutDir & OUTFNAME & QT)

それを、テキスト出力して、ファイル名と行数が出てきますから、それをExcelで拾いだせばよいと思います。ただし、Win9x 系は #6のvenzoさんのFind ですが、正規表現が機能には含まれません。また、Cmd は、Command.com に換わります。
    • good
    • 0
この回答へのお礼

>失礼ですが、プロの方ではありませんか?
メインフレームのプロ(SE)です。
PC、エクセル、VBAは独学で、これで食っていける技能はありません。
現在の職場には最近配属されたばかりで、非常にセキュリティに厳しいところです。
守秘義務があるので詳しいことは言えませんが、企業の置かれた社会的立場からやむを得ない措置だと思っています。
メインフレームが自由に使えるなら、パワーのあるマシンですべてやってしまいますが、メインフレームの使用もかなり制限されています。
PCの使用もかなり制限されていますが、幸いVBAだけは自由に使える環境です。
そこでこれを活用して、仕事を効率アップを考えたわけです。

実はこの質問に対する回答はNo.1の方で解決済みですが、他にも良い方法がないかと締め切りませんでした。
皆様から色々ご助言いただきありがとうございました。

お礼日時:2006/11/06 21:05

>使いたいのは山々ですが、職場はセキュリティが厳重で外部プログラム(grepなど)のインストールは一切できません。



忘れてましたが、widows標準で、findと言うコマンドがあります。
私は使ったこと無いのですが、これが使えるかもしれませんね。

以下findのヘルプ
>find /?
ファイル (複数可) 内のテキスト文字列を検索します。

FIND [/V] [/C] [/N] [/I] [/OFF[LINE]] "文字列" [[ドライブ:][パス]ファイル名[...]
]

/V 指定した文字列を含まない行をすべて表示します。
/C 指定した文字列を含む行の数だけを表示します。
/N 行番号を表示します。
/I 大文字と小文字の区別をしないで検索します。
/OFF[LINE] オフライン属性が設定されたファイルをスキップしません。
"文字列" 検索する文字列を指定します。
[ドライブ:][パス]ファイル名
検索するファイル (複数可) を指定します。

パスが指定されていないときは、プロンプトで入力されたテキストまた
は別のコマンドからパイプ処理で渡されたテキストを検索します。
    • good
    • 0

素人の考えですが、


splitとか使って配列に格納するのでは遅すぎますか?
    • good
    • 0

こんばんは。

#3のWendy02です。

>使いたいのは山々ですが、職場のセキュリティが厳重で所定のプログラム以外は一切インストール・実行できません。

私も、仕事でHDDの文書検索はしますが、VBAは、実際の仕事では使いません。失礼かもしれませんが、それは、質問者さん個人の問題ではなくて、会社の生産性の問題です。セキュリティがどうこうの問題じゃないのですけれどね・・・。もし企業だったら、この程度の問題に対応できないようなら、どうしようもないと思います。まあ、自分の置かれた立場の問題もありますから、場合によっては、最初から最後まで黙して語らずということもありますけれど。

ただ、もう一度、ご質問を最初から読みましたが、「行数の判定」ということでしょうか?「行数の判定」だけだったら、正規表現などいりませんよ。

単に、ファイルを開いて、ファイルをAppendモードで開いて、その最後の行を取ればよいです。FILENAME は、Dir のループで入れるなりしてください。

Set objFs = CreateObject("Scripting.FileSystemObject")
Set objText = objFs.OpenTextfile(FILENAME, 8) 'Append モード
 MsgBox objText.Line
 objText.Close
Set objFs =Nothing

それに、文字列検索だったら、Grepの代わりに、FindStr を使えばよいです。
ただ、Unix 系ツールの方がずっと楽なことは言うまでもないです。

#1のお礼の
>知りたいのは全行数ではなく、該当文字列のあった行です。

ご質問の趣旨が、良く分かりません。

この回答への補足

回答ありがとうございます。
提示していただいたVBAはテキストファイルの行数を表示するものですね。
私が知りたいのは、やはり次の通りです。
>知りたいのは全行数ではなく、該当文字列のあった行です。(先頭から何ライン目か)

>ご質問の趣旨が、良く分かりません。
質問が言葉足らずだったかも知れません。
具体的には、テキストファイルの中身はプログラムのソースコードです。
やりたいことは以下の通りです。
数千本のプログラムソースコード(即ちテキストファイル)があります。(既に存在しています)
システム開発は標準化されていて、すべてのプログラムで項目名は統一されています。
システムメンテがある項目に対して発生した場合、対応する可能性のあるプログラムと使用されている個所を特定せねばなりません。
全ソースコードを調べ、その項目名が使われるプログラム名(即ちファイル名)とその個所(何ライン目)の一覧表を作成する必要があります。
以上ですが、お分かりいただけましたでしょうか。

補足日時:2006/11/06 00:25
    • good
    • 0

こんにちは。



それは、Namazu とか、専門システムを使ったほうが早いです。
それに、その作業のことを、KeyWord In Context いわゆる KWIC といいます。専用ツールを使ったほうが良いです。例えば、コンコーダンスを作成する時や、大学などで文献検索に使うシステム・ツールです。Grep(GNUに限ります)も同じUnix系のツールですが、それをさらに文献検索用に発展させたものです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
使いたいのは山々ですが、職場のセキュリティが厳重で所定のプログラム以外は一切インストール・実行できません。
使えるのはOfficeくらいなものです。インターネットにもアクセスできません。

お礼日時:2006/11/05 20:06

速さにこだわるなら、外部プログラム(grepなど)で検索する方が良いかと思います。



Shell "cmd.exe /C ""grep.exe >search.log"""

検索結果をリダイレクトでファイルにして、それを解析する。
速さは、エクセルVBA(インタプリタ)とは比べものにならないと思いますよ。

コマンドライン用の検索プログラムは"grep"が有名です。
UNIX系のコマンドの移植なので、幾つかバージョンが有ったり、同名の類似品があったりします。

http://www.vector.co.jp/soft/winnt/util/se365621 …
http://www.vector.co.jp/soft/win95/util/se015011 …

grep以外でもフリーのものはあると思うので、使いやすそうなものを探してみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
使いたいのは山々ですが、職場はセキュリティが厳重で外部プログラム(grepなど)のインストールは一切できません。

お礼日時:2006/11/05 19:58

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルの関数 or VBAで

A1に入力されている任意の文字列の先頭から3番目の文字をB1にコピーする
関数 or VBAを知りたいのですが。
宜しくお願いします。

Aベストアンサー

B1に以下の式を入れれば大丈夫です。
=mid(a1,3,1)

意味としてはA1のセルの左から3番目の文字から
1文字を切り取る、です。
最後の1を例えば3とかにすると、
3番目から5番目までの文字を切り取ることになります。

Q文字列にある特定文字の数

こんにちは。

文字列「C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP」に"¥"がいくつ含まれているかを算出したく悩んでいます。どのような方法があるのか、是非アドバイスをください。よろしくお願いします。

** 環境 **
VB6.0(sp5)

Aベストアンサー

ご質問の「文字列」から察するにあるファイルのパス(ドライブ+パス+ファイル名)を
ドライブ+パスとファイル名に分解する、のような使い方をされるのでしょうか?
先の例ですとstrArrey(numArrey)を参照すると「ファイル名のみ」が取得できます。

あと、Splitの反対で「JOIN関数」があります。
なお、Split,JoinはExcel2000以降のVBAでも利用可能です。


'ここから

Dim strArrey() As String
Dim numArrey As Integer

Dim strPath As String

strPath = "C:\MYDOCU~1\THINKB~1\THINKB~1\TEMP"

strArrey() = Split(strPath, "\")

numArrey = UBound(strArrey())

MsgBox "これがファイル名:[" & strArrey(numArrey) & "]"

strArrey(numArrey) = ""

strPath = Join(strArrey(), "\")

MsgBox "これがパス名:[" & strPath & "]"

'ここまで

ご質問の「文字列」から察するにあるファイルのパス(ドライブ+パス+ファイル名)を
ドライブ+パスとファイル名に分解する、のような使い方をされるのでしょうか?
先の例ですとstrArrey(numArrey)を参照すると「ファイル名のみ」が取得できます。

あと、Splitの反対で「JOIN関数」があります。
なお、Split,JoinはExcel2000以降のVBAでも利用可能です。


'ここから

Dim strArrey() As String
Dim numArrey As Integer

Dim strPath As String

strPath = "C:\MYDOCU~1\THINKB~1\THINKB~1...続きを読む

QExcel関数 or VBA セルにある数字分、別シートにデータを作成する

・シート1のA1に任意の数字(例えば20)を入力
・シート2のB列(B1~B20)に○○1、○○2、○○3・・・・○○20というように、シート1A1の数字分のデータを作成
※シート1のA1の数字が変われば(例えば5)、シート2のB列(B1~B5)に○○1、○○2、○○3・・・・○○5となるコードを教えて頂けないでしょうか?

何度トライしてもうまくいきません。。。よろしくお願い致します。

Aベストアンサー

こんにちは!

関数での一例です。
Sheet2のB1セルの表示形式をユーザー定義から 000 としておき
=IF(Sheet1!A$1<ROW(),"",ROW())
という数式を入れフィルハンドルで下へコピーしてみてください。m(_ _)m

QVBAで一致するセルの個数を取得するには

シートの指定した範囲のセルから、たとえば「休日」という言葉が入っているセルを数えて、その個数を返す記述はどのようにすればよいのでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは。maruru01です。

ワークシート関数のCOUNTIFを、VBAで使用してはどうでしょうか。
ワークシート関数をVBAで使用するには、WorksheetFunctionオブジェクトを使用します。


WorksheetFunction.CountIf(Selection, "*休日*")


で、範囲(Selection)内の「休日」を含むセルの数をカウント出来ます。
なお「*」はワイルドカードで、付け方で、前方一致、後方一致、完全一致などに出来ます。

QVBAで、JPG写真の撮影日時を読み出す関数?

簡単に、指定Folderにある、*.JPGファイルの、
撮影日時を読みだす、VBA関数 or Excel関数をお教えて下さい。
(VBA初心者です)
下記の自作Codeは、見様見真似で書いたものです。
VBA関数:FileDateTime(パラメータ)で読みだした「日付時刻」は、
画像の「更新日時」でした。
**** お願 ***
Q1: 一行のCodoで、原画の「撮影日時」を読みす、関数・Codeを教えて下さい。
Q2: 関数が無ければ、それに代わる、Codeはどんなものが良いのでしょうか??
**** 自作Code ***
myFolder = "C:\Users\myName\ピクチャ\3000年JPG写真"
myJPG = Dir(myFolder & "\" & "*.jpg")
MsgBox ”読み出した日付時刻=” & FileDateTime(myFolder & "\" & myJPG)
以上 宜しくお願いいたします。

Aベストアンサー

JpegExifのクラスモジュールは問題ないです。
サイトの中でも動作確認してるでしょうし、自分のところでも動作しています。


> cdateTimeOriginal = " & cDateTimeOriginal ''機能せず???

その前のInitSetが失敗してるからです。
失敗の原因は、帰ってきた日付の値(1999年)からすると、指定したファイルが無いからです。


Dir関数使わずに、

MsgBox "MyDateTimeOriginal()=" & MyDateTimeOriginal("c:\_Temp\sample.jpg")

とか、分かりやすいフォルダやファイルを直接指定では。

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

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

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

Qエクセル関数 → VBAへの変換をどうやって行えばいいでしょうか? 特に、.Formula=にエクセル関数をいれたい場合

エクセル関数 → VBAへの変換
現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。
理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の
式を入れたいからです。

なので、エクセル関数を以下のようにVBAにいれていました
.Cells(7, 51).Formula = "C6&E6"
しかし、これを以下のようにすると、エラーになってしまいました。
.Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため

同様に、以下のものがすべてエラーになります。
.Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日""
.Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)"

どうすればよろしいでしょうか?

エクセル関数 → VBAへの変換
現在、エクセル関数で記述していた以下の命令をすべてVBAに置き換える必要があります。
理由は、VBAで初期化ボタンをつくってそのボタンを押したとき、対象セルにデフォルトでエクセル関数の
式を入れたいからです。

なので、エクセル関数を以下のようにVBAにいれていました
.Cells(7, 51).Formula = "C6&E6"
しかし、これを以下のようにすると、エラーになってしまいました。
.Cells(7, 51).Formula = "C6&" "&E6" '氏名の間に半角スペースを入れたいため

同様に、以下...続きを読む

Aベストアンサー

> .Cells(7, 51).Formula = "C6&E6"
.Cell(7, 51).Formula = "=C6&E6"

> .Cells(7, 51).Formula = "C6&" "&E6"
.Cells(7, 51).Formula = "=C6&"" ""&E6"

> .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日""
.Cells(8, 51).Formula = "=L9&M9&""年""&N9&""月""&O9&""日"""

> .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)"
.Cells(9, 51).Formula = "=IF(OR(ISNUMBER(SEARCH(""090-"",C9)),ISNUMBER(SEARCH(""070-"",C9)),ISNUMBER(SEARCH(""080-"",C9))),"""",C9)"

ポイントとして""で囲われた文字列中で「"」を使用したい場合、「'」に置き換えるか、"あ""い""う" など""を二つ重ねるようにします。
あとFormulaを使用する場合、先頭に=を入れてあげないと文字列として処理されますのでお気をつけて。

> .Cells(7, 51).Formula = "C6&E6"
.Cell(7, 51).Formula = "=C6&E6"

> .Cells(7, 51).Formula = "C6&" "&E6"
.Cells(7, 51).Formula = "=C6&"" ""&E6"

> .Cells(8, 51).Formula = "L9&M9&"年"&N9&"月"&O9&"日""
.Cells(8, 51).Formula = "=L9&M9&""年""&N9&""月""&O9&""日"""

> .Cells(9, 51).Formula = "IF(OR(ISNUMBER(SEARCH("090-",C9)),ISNUMBER(SEARCH("070-",C9)),ISNUMBER(SEARCH("080-",C9))),"",C9)"
.Cells(9, 51).Formula = "=IF(OR(ISNUMBER(SEARCH(""090-"",C9)),ISNUMBER(SEARCH(""...続きを読む

QExcel 指定の文字列を含むとカウントするようにしたい場合は?

ただいまエクセルと格闘中の初心者です。
関数等はオートSUMくらいしか使ったことがなく、必要時にいちいち調べているような状態です。
今回は文字列を含むとカウントするところで躓いております。

表の中から特定の文字列を含むとカウントするようにしたい時COUNTIFを使うと思うのですが、この場合正確にその言葉じゃなければカウントされませんよね?

例えば「ボールペン」「サインペン」「シャープペン」のようなペン類をまとめてカウントしたい時、ペンだけで認識してくれるようにすることは可能なのでしょうか?
COUNTIF関連で探してみているのですが、中々思うような検索ができていません(もしくはわからずに見逃しているのかも?)

エクセルにお詳しい方、アドバイスを頂ければと思います。
よろしくお願い致します。

Aベストアンサー

検索条件に「*ペン*」としてみてはいかがですか。

ちなみに上記は「ペン」がどこかにあるものを対象とする。
「*ペン」は文字列がペンで終わるものを対象にする。
「ペン*」は文字列がペンで始まるものを対象とする。

QEXCEL VBAの日付関数について

EXCEL VBAの日付関数のことでお聞きしたいことがあります。
エクセルの関数でワークデイ関数がありますが、例えば
C1セル:
=WORKDAY(A1,10,B1:B10)

これをVBAのコードで書くと、どういうコードになるのでしょうか。
VBAの関数については詳細に書かれたテキストを持っておらず、WorksheetFunctionを使ってチャレンジしてみましたが
どうも上手くいきませんでした。
初歩的な質問かも知れませんが、どうぞよろしくお願いいたします。

Aベストアンサー

過去に同じ質問がありました。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=1810554&rev=1

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報