EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

A 回答 (4件)

こんばんは。


Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub
    • good
    • 11
この回答へのお礼

いたれりつくせりですね。
ありがとうございます。

今、自宅から書き込んでるのですが
CURDIRは使えますね。
会社では、うまく行かなかったのですが・・・

お礼日時:2005/08/09 07:13

こんにちは。



>CURDIRは使えますね。
>会社では、うまく行かなかったのですが・・・

私自身としては、

'アクティブブックのパス
b = ActiveWorkbook.Path

がよいと思っています。CurDir は、本来、ActiveWorkbook のフォルダとは無関係なのです。CurDir(CurrentDirectory =現在のフォルダ)というのは、Excelのアプリケーションで、「ファイル-開く」を行ったときに、開くフォルダーのことなのです。
    • good
    • 11

ブックを開いているのであれば



Application.ThisWorkbook.Path

でしょうけど、Excel97で動作するか、未検証。(2000はOK)
    • good
    • 1
この回答へのお礼

Excel97でも使えます。

お礼日時:2005/08/08 23:51

=info("directory")


では駄目ですか?

この回答への補足

VBAではエラーが出ますが

シートのセルに書くと使えますね。

補足日時:2005/08/08 23:42
    • good
    • 1

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

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

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

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

QC:\WINDOWS\TEMP\B2Temp\Attachとは・・・

添付ファイルをメーラーからパソコンに落とすときに、
現在の場所を表すのに
「C:\WINDOWS\TEMP\B2Temp\Attach」
と表示されます。場所を表しているのだと思うのですが、くわしくどういう意味なのか教えて下さい。

Aベストアンサー

Cドライブの中のwindowsフォルダの中のtempフォルダの中のB2Tempフォルダの中のAttachフォルダ、という意味だと思います。質問の意図を取り違えてましたらすみません。スタートメニューを右クリックしてエクスプローラーで階層を確認されたら分かりやすいかと思います。

QExcel 2013 の[カレントフォルダ名]は?

添付図は Excel 2002 における[ツール]→[オプション]→[全般]メニューを示しています。
最近 Excel 2013 をインストールしたけど、Excel 2002 にあった[カレントフォルダ名]を設定する場所を見つけ出せません。教えてください。

Aベストアンサー

このコンピューターではない場所とは、OneDrive(旧SkyDrive)などのクラウド、あるいはSharePointなどのサーバーのことです。
OneDriveを登録していないと画面が違うかもしれませんが、チェックを入れていると名前を付けて保存などで最初に選ばれているのが「コンピュータ」になっていると思います。

QINDEX(D:D,L3)の意味は?

EXCELの勉強をしています。
INDEX(配列,行番号,列番号)
のように3つあるのは参考書にあるのですが,
INDEX(D:D,L3)のように2つしかない例の意味がわかりません。
どなたか教えてください。
またD:DはD全部と理解していいのでしょうか。

Aベストアンサー

配列が1列の場合、列番号は省略できます。
INDEX(D:D,L3)は、「D列」のL3行目を取得します。

Qxls:CopyFromRecordset罫線描写

こんにちは。
お世話になります。

エクセルからアクセスを読み込みに行き、取得結果をエクセル内に表示しています。
※アクセスを開いてエクセルに出力するのではないです。

このとき、スタートセルを指定して
Range("B12").CopyFromRecordset adoRs
という感じで読み取ったデータを出力していますが、

この出力前に明細にしている部分を消しています。
Range("B12:AI1000").Clear '前のデータクリア
※ClearContentsではダメな理由があります。

このとき、CopyFromRecordset にて出力が行われたセルのみ、
セルのまわりを四角く罫線で囲むということをしたいです。
明細っぽくしたいので。

罫線はこのように引くと思うのですが
Range("A1:C3").Borders.LineStyle = xlContinuous
このA1:C3の部分を今回B12から始まり、列はAIまで、
行数は条件により変動するため固定ではない状態で、
どのようにすれば取得できるのかが知りたいです。

よろしくお願いいたします。

office2010、windows7です。

こんにちは。
お世話になります。

エクセルからアクセスを読み込みに行き、取得結果をエクセル内に表示しています。
※アクセスを開いてエクセルに出力するのではないです。

このとき、スタートセルを指定して
Range("B12").CopyFromRecordset adoRs
という感じで読み取ったデータを出力していますが、

この出力前に明細にしている部分を消しています。
Range("B12:AI1000").Clear '前のデータクリア
※ClearContentsではダメな理由があります。

このとき、CopyFromRecordset にて出力が行われたセルのみ、
セ...続きを読む

Aベストアンサー

#1-4、cjです。#4、お礼欄へのレスです。

余計なことかも知れませんが、、、。
> 数日以内にお返事頂けない場合はそのままベストアンサーとして締め切らせて頂きます。
「よりベターな解決」を導くことを目指しているつもりではありますが、
残念ながら今回は「ベスト」に値することは出来ていない、というのが自己評価で、
「ベストアンサーを決めずに質問を締め切る」ぐらいが、私見としては妥当な気もしています。
回答者としては、「どんな形であれ「解決した」と報せて頂けること」が何よりこの上ないご褒美と考えています。
解決の目途が立ったということでしたらば、それと解る様に質問をCloseするのはマナーとしても大切なことですし、
お礼という意味で評価を頂けるなら、なおさら有難いことです。
(そもそも回答者が判断することではありませんし、どんな結果であってもただ素直に受け止めるだけですが)
ただ、締切前に言及されると、なんとなく返事を書き難いですね。ちょっと躊躇ってしまいました。

> 実は......ちょっとダウンしていまして
その後お加減は如何ですか?お大事になさってください。
遅れる旨きちんと伝えようという誠実さは私としては好印象なのですが、
コンディションに関わることは、お互い様だったり(相手の方が大変だったり)する場合も多いので、
なるべく触れない方がベターと思います。(これは私の反省でもあります。)
エクスキューズしたい時は「今は余裕がないので後ほど」ぐらいで十分かも、です。
また、返事が遅れることを気にする必要もありません。
皆、(こちらも、)事情を抱えている中で、出来る時にしか出来ないです。
以上、老婆心ながら。


本題、

> With Range("B12")
> .Resize(.End(xlDown).Row - .Row + 1, .End(xlToRight).Column - .Column + 24).Borders.LineStyle = xlContinuous
> End With

お求めなのは、上記3行の解説、という理解でいますので、その部分だけについてお応えします。

まず確認しておきますが、これらの記述は、ADODBとは全く無関係、スタンドアローンなExcelのお話です。

とりあえず、解り易さの為(却って読み難いですが)、Withフレーズを外して、1行に書き直すと以下のようになります。
  Range("B12").Resize(Range("B12").End(xlDown).Row - Range("B12").Row + 1, Range("B12").End(xlToRight).Column - Range("B12").Column + 24).Borders.LineStyle = xlContinuous

内容としては、
● 採り込んだデータ範囲に罫線を引く。
●●1)Range("B12")を基準に、必要な行数、必要な列数でセル範囲を指定する。
●●● .Resizeプロパティ【書式:Range().Resize(RowSize, ColumnSize)】で、
    Range("B12")を(左上のセルとして)基準に、必要な行数、必要な列数でセル範囲の大きさを指定する。
    ※.Resizeプロパティ については、VBAのヘルプを引いて確認してください。
●●●●r)行サイズ指定
      Range("B12").End(xlDown).Row で「行方向に連続したデータの最下行」の絶対的な行位置を数値で採り、
      Range("B12").Row で、基準となるセルの行位置(この場合は12)を採り、必要な行数を計算する。
      例えば、レコード数が10である場合は、
       Range("B12").End(xlDown).Row は、21
       Range("B12").Row は、12
       Range("B12").End(xlDown).Row - Range("B12").Row は 21 - 12 = 9 となるので、
       + 1 を加えて、10にする。
      といった具合です。
       Range("B12").End(xlDown).Row - 11
      のように、"B12"を決め打ちにして書いても求まりますが、
       With Range("B12")
        .Resize(.End(xlDown).Row - .Row + 1, ......
       End With
      のようにWithフレーズを用いることで、基準となるRange("B12")を変更する必要が出てきても、
      1カ所("B12"を)書換えるだけで(必要な行数指定に)対応できるように書いています。
     ※.Endプロパティ については、VBAのヘルプを引いて確認してください。
      Range("B12").End(xlDown) のxlDownの意味についてですが、
      基準となるセル(Range("B12"))から下方向に、最初に見つかる空セルのひとつ上のセル、を
      レコードの終端として取得します。
      もしも、間に空セル(データベースでいう所のNull)があると、正しく機能しませんが、
      1列目(第1フィールド)にNull値、というのは普通はあり得ないでしょうから、この方法を採っています。
      一般的なExcelの手法としては、
       With Range("B12")
        .Resize(Cells(Rows.Count, .Column).End(xlUp).Row - .Row + 1, ......
       End With
      とか、
       With Range("B12")
        .Resize(Cells(10001, .Column).End(xlUp).Row - .Row + 1, ......
       End With
      などのように、下から上方向に探して、レコードの終端として取得する方法もあります。
●●●●c)列サイズ指定
      Range("B12").End(xlToRight).Column で「列方向に連続したフィールドの最右列」の絶対的な列位置を数値で採り、
      Range("B12").Column で、基準となる列位置(この場合は12)を採り、必要な列数を計算する。
      という意図で書かれたものでしたが、この方法では、Null値があると不正な結果になってしまいますね。
      フィールド数は固定?という話のようですから、この部分は、直値で指定してあげればいいです。(修正■)
●●2).Borders.LineStyle = xlContinuous で、罫線を引く。
    この部分は説明不要と思います。
解説としては以上のようになります。

列数は固定でいい?ようなので、それを踏まえると
  With Range("B12")
    .Resize(.End(xlDown).Row - .Row + 1, 24).Borders.LineStyle = xlContinuous
  End With
のように修正■されます。
後は、.Endプロパティ の使い方として、下から上方向に探す必要がある場合などは、
実用上のニーズに照らして応用してみてください。

拙い説明ですが、以上です。

#1-4、cjです。#4、お礼欄へのレスです。

余計なことかも知れませんが、、、。
> 数日以内にお返事頂けない場合はそのままベストアンサーとして締め切らせて頂きます。
「よりベターな解決」を導くことを目指しているつもりではありますが、
残念ながら今回は「ベスト」に値することは出来ていない、というのが自己評価で、
「ベストアンサーを決めずに質問を締め切る」ぐらいが、私見としては妥当な気もしています。
回答者としては、「どんな形であれ「解決した」と報せて頂けること」が何よりこの上な...続きを読む

Qエクセル フォルダ内の.xlsファイルの集計

エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。

作業としては
あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む
という形です。

その際に、各シートの特定セルの内容により出力するセルを変えたいと思っています。

実際には、
AAA.xlsというファイルの3枚目以降のシートで、L2セルに「B」と記述があれば別ブックのB3セルに、「C」と記載されていれば別ブックのC3セルに、それぞれD4セルの数値を集計する。
次にBBB.xlsというファイルに関しても同様に集計し、その結果はB4セルとC4セルに出力する
これを当該フォルダに入っているファイル全てについて行う
※L2セルには「B」「C」以外の文字は入りません。

こういった作業ができればと思っています。

お時間のある方がおられましたら、ご教授いただけますでしょうか。
参考になるサイトなどがありましたら、アドレスだけでも御教えいただけると幸いです。


質問の仕方が悪いようでしたら、ご指摘いただければ再度説明させていただきます。拙劣な説明ですがどうかよろしくお願いします。

エクセルで、複数の.xlsファイルの特定セルを集計するマクロを組みたいのですが、VBA勉強しはじめでうまくいかず、皆様の知識をお借りできればありがたいと思い質問させていただきます。

作業としては
あるフォルダに複数の.xlsファイル(それぞれのファイルは同一形式で、sheet1およびsheet2は作業用シート。sheet3以降がデータの入ったシートとする)を置いておき、それぞれのデータ入りシート(シート数はファイルにより異なる)の特定セルを集計したものを、新たなブックに書き込む
という形です。

その際に...続きを読む

Aベストアンサー

集計するんじゃなくて,単純に転記して並べていくだけですね。

つぎのようなごく基本的なマクロを組み合わせて,応用をしていくだけの作業です。
1.ブックを次々調べて巡回するdir関数の使い方
2.見つけたブックを開く方法
3.開いたブックから値を引き出す方法
4.転記先を適切に設定する方法
などの手段について,VBAのヘルプやヘルプに書いてある使用例などを見ながら理解してください。


手順:
集計ブックを用意し,AAA.xlsやBBB.xlsが入れてあるフォルダに一緒に放り込んでおく
集計ブックに次のマクロを用意して実行する


sub macro1()
 dim myPath as string
 dim myFile as string
 dim i as long
 dim w as workbook
 dim n as long
 dim s as variant
 
’準備
 thisworkbook.worksheets(1).range("B:C").clearcontents
 thisworkbook.worksheets(1).range("B2:C2") = array("B","C")
 mypath = thisworkbook.path & "\"
 n = 3

’そこにあるブックを調べる
 myfile = dir(mypath & "*.xls*")
 do until myfile = ""
  if myfile <> thisworkbook.name then

 ’開いて調査する
  set w = workbooks.open(filename:=mypath & myfile)
  for i = 3 to w.worksheets.count
   s = w.worksheets(i).range("L2")
   if s="B" or s="C" then
    thisworkbook.worksheets(1).cells(n, s) = w.worksheets(i).range("D4").value
    n = n + 1
   end if
  next i
  w.close savechanges:=false
  end if
  myfile = dir()
 loop
end sub

集計するんじゃなくて,単純に転記して並べていくだけですね。

つぎのようなごく基本的なマクロを組み合わせて,応用をしていくだけの作業です。
1.ブックを次々調べて巡回するdir関数の使い方
2.見つけたブックを開く方法
3.開いたブックから値を引き出す方法
4.転記先を適切に設定する方法
などの手段について,VBAのヘルプやヘルプに書いてある使用例などを見ながら理解してください。


手順:
集計ブックを用意し,AAA.xlsやBBB.xlsが入れてあるフォルダに一緒に放り込んでおく
集計ブックに次のマ...続きを読む


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

このカテゴリの人気Q&Aランキング

おすすめ情報