キャロルには、YR1905-LIC12345-Smith、Harry-Brown、Maryなどの名前の約1,000個のファイルがあるディレクトリがあります。彼女は、これらすべてのファイル名(ファイル自体ではない)をワークシートに入れ、名前をダッシュ​​で区切りたいと考えています。したがって、サンプルファイル名は実際には1行の4つのセルを占有します。キャロルは、これを実現するにはマクロが必要だと考えていますが、そのマクロのファイル名にアクセスする方法がわかりません。

もちろん、これを行うためにマクロを使用することはできますが、マクロを使用する必要はありません。代わりに、古いDOS時代のトリックを使用して、必要なものを取得できます。

コマンドプロンプト(Windowsからアクセス可能:[スタート]、[すべてのプログラム]、[アクセサリ]、[コマンドプロンプト])で、ファイルが含まれているディレクトリに移動するまで移動します。次に、次のように入力します。

dir /b /a-d > filelist.txt

これにより、現在のディレクトリ内のすべてのファイルのリストを含むテキストファイル(filelist.txt)が作成されます。これで、Excel内で次の手順を実行できます。

。 Excel内で、ツールバーの[開く]ツールをクリックします。 Excelに[開く]ダイアログボックスが表示されます。

。ダイアログボックスの下部にある[ファイルの種類]ドロップダウンリストを使用して、テキストファイル(.prn; .txt; * .csv)を開くことを示します。

。コマンドプロンプトで作成したfilelist.txtファイルに移動して選択します。

。 [開く]をクリックします。 Excelはテキストインポートウィザードを開始し、[ステップ1/3]ダイアログボックスを表示します。 (図1を参照)

。 [区切り]を選択していることを確認してから、[次へ]をクリックします。 Excelは、[ステップ2/3]ダイアログボックスを表示します。

。区切り文字としてダッシュを指定してください。 ([その他]をクリックしてから、区切り文字としてダッシュを入力する必要があります。)

。 [完了]をクリックします。必要に応じて、ファイルがインポートされ、ダッシュで分割されます。

上記の手順は、特にファイルリストをExcelにたまに取得するだけでよい場合は、かなり簡単に実行できます。より日常的に行う必要がある場合は、おそらくマクロを使用してそれを行う方法を探す必要があります。次のマクロは非常に高速に機能します:

Sub GetFileNames()

Dim sPath As String     Dim sFile As String     Dim iRow As Integer     Dim iCol As Integer     Dim splitFile As Variant

'specify directory to use - must end in "\"

sPath = "C:\"



iRow = 0     sFile = Dir(sPath)

Do While sFile <> ""

iRow = iRow + 1         splitFile = Split(sFile, "-")

For iCol = 0 To UBound(splitFile)

Sheet1.Cells(iRow, iCol + 1) = splitFile(iCol)

Next iCol         sFile = Dir     ' Get next filename     Loop End Sub

マクロを実行するときは、現在のワークシートに何もないことを確認してください。 (そこにあるものはすべて上書きされます。)また、マクロの先頭近くでsPath変数に割り当てられているディレクトリパスを変更する必要があります。

マクロの実行時にエラーが発生した場合は、Excel 97を使用している可能性があります。分割関数(ファイル名をダッシュ​​で区切るために使用)は、Excel2000までVBAに追加されませんでした。Excel97を使用している場合、次に、次のルーチンを使用して、Split関数の機能をエミュレートできます。

Function Split(Raw As String, Delim As String) As Variant     Dim vAry() As String     Dim sTemp As String     Dim J As Integer     Dim Indx As Integer

Indx = 0     sTemp = Raw     J = InStr(sTemp, Delim)

While J > 0         Indx = Indx + 1         ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(Left(sTemp, J))

sTemp = Trim(Mid(sTemp, J, Len(sTemp)))

J = InStr(sTemp, Delim)

Wend     Indx = Indx + 1     ReDim Preserve vAry(1 To Indx)

vAry(Indx) = Trim(sTemp)

Split = vAry()

End Function

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(11143)は、Microsoft Excel 97、2000、2002、および2003に適用されます。

Excel(Excel 2007以降)のリボンインターフェイスに関するこのヒントのバージョンは、次の場所にあります: