advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 1437 for フォルダ 選択 (0.009 sec.)
フォルダ (4447), 選択 (24694)
[[20110217161712]]
#score: 4655
@digest: 3a810563d12aae1bd4a07a62057f56d4
@id: 53367
@mdate: 2011-05-19T01:48:33Z
@size: 41867
@type: text/plain
#keywords: myfilenamea (529484), mydira (270779), mydirb (168830), myfilecounta (158313), myobja (128678), myfilelista (128678), myobjb (74383), xlexcel9795 (68814), 中) (29733), ファ (17219), ダパ (16506), ォル (15199), ルサ (15035), fileformat (14750), ァイ (13332), ルダ (13016), イル (11160), フォ (10783), csv (10568), 保存 (10306), ダ内 (9612), 強中 (9480), で保 (7242), saveas (6438), パス (6384), イブ (6280), イズ (5689), ル名 (4600), テキ (4498), ライ (4462), filename (4451), 変換 (4369)
『テキストドキュメントをエクセルで保存』(勉強中)
複数あるテキストドキュメントを、プログラムから開いて、エクセルで保存しています。 開きたいテキストを、すべて選択して、開く事も出来ず、 ひとつひとつ、処理しているので、複数テキストがある場合、結構、時間がかかってしまいます。 もっと簡単に、一括で複数のテキストを開いて、エクセルで保存する事は可能なのでしょうか?宜しくお願い致します。(Excel2002) ---- 複数のテキストファイルアイコンを選択した状態で エクセルのショートカットアイコンへドロップすると いっぺんに複数のテキストファイルをエクセルで (複数のブックとして)開くことは出来るようです。 (みやほりん)(-_∂)b ---- みやほりんさん 有難うございます。 エクセルのショートカットアイコンにドロップしてみたのですが、 エクセルのショートカットに移動してくれません。○に斜線のマークが出てきてしまいます。 試しにひとつだけ、テキストファイルを移動してみたのですが、同じマークが出てきてしまいます。 何か、手順が間違えているのでしょうか?(勉強中) ---- エクセルのショートカットではだめでしたね。 私の覚え違いで大変失礼しました。 エクセルを一旦立ち上げて、エクセルのウィンドウにドロップ、ではどうでしょう。 (みやほりん)(-_∂)b ---- あまり推奨される事ではない話。 テキストドキュメントがタブ区切りならば、ファイル名の拡張子を「.xls」にかえたら、そのままエクセルになったりします(苦笑) (1111) ---- みやほりんさん、1111さん 教えて下さり、有難うございました。 みやほりんさんの方法で、一括で全部開くことが出来ましたので、 そこから、保存させて頂く事にしました。 ひとつひとつ開くより、随分、手間が省けました。 お二人様、お世話になりました。(勉強中) ---- 以前教えて頂いたのですが、再度お願いできますでしょうか? 前回、テキストファイルを一括で開く方法を教えて頂き、 それで、一括で開かれたテキストファイルをF12で、ひとつずつエクセルで保存していたのですが、 テキストファイルが100近くある場合、一括で開くだけではなく、 エクセルで保存も一括で出来ればと思ったのですが、 そのような方法はあるのでしょうか?宜しくお願い致します。(勉強中) ---- 一括で、となるとマクロしか思いつきません。 テキストファイルがCSV拡張子でエクセルで開かれているということを 前提としたマクロサンプル。 Sub CSV2XLS() Rem 20110310 Dim fName As String Dim myBook As Workbook For Each myBook In Workbooks If myBook.Name Like "*csv" Then fName = Replace(myBook.Name, ".csv", ".xls") myBook.SaveAs Filename:="C:¥temp¥" & fName, FileFormat:=xlNormal myBook.Close savechanges:=True End If Next myBook End Sub 【関連ログ】 フォルダ指定して開くところからのサンプルがあります。 [[20091119112315]] 『同一フォルダー内にあるcsvファイルを別ファイルax(shinv230) (みやほりん)(-_∂)b ---- みやほりんさん ご丁寧に、有難うございます。マクロになるんですね。 みやほりんさんのマクロの、csvの部分をtxtに変更して実行してみました。 まだ、動かせていません。反応なしでした。 (csvではなく、テキストファイルで開いたから?) 関連ログも同様に、csvの部分をtxtでしてみました。 とりあえず、関連ログの方法でエクセルは作成できたのですが、 まだ、内容は全然理解できていないので、合っているか解らないので、 時間が出来たら、じっくり読ませて頂きます。 とりあえず、解るまで、手動で保存にしておきます。 また、不明な点がありましたら、質問させて頂くかもしれませんが、 宜しくお願い致します。(勉強中) ---- 前回教えて頂いたご回答を参考に、関連ログを使って、 思っていた通りに動いたのですが、 マクロの内容で、理解できない部分がありましたので、 今後の参考に、意味をご教授頂けないでしょうか? 自分で調べた内容に不備があるかもしれませんが、 もし検討違いなコメントを記入しておりましたら、あわせて、 ご指導お願いできますでしょうか?宜しくお願い致します。 前回から、だいぶ時間が経ってしまって、申し訳ありませんが、 宜しくお願い致します。 (勉強中) Sub txtファイルをxlsファイルに変換() Dim myObjA As Object 'myObjAを、オブジェクト変数として指定する 'すべてのオブジェクトを格納できる '任意のオブジェクトへの参照を格納することができる '値を入れる時は、Setを使う Dim myDirA As String '文字列:txtファイルのあるフォルダのパス Dim myFileNameA As String '文字列:変換目的のtxtファイル名 Dim myFileListA As String '文字列:? Dim myFileCountA As Long '長整数型:変換目的のtxtファイル数? Dim wb As Workbook 'wbを、ワークブックとして使用する、オブジェクト変数 '値を入れる時は、Setを使う Dim myObjB As Object Dim myDirB As String '新しくxlsファイルを保存するフォルダのパス '@フォルダ選択ダイアログの表示で、txtファイルのあるフォルダ選択する。 'Cドライブ以下のみに限定することができる Set myObjA = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換元のフォルダ選択して 「OK」 をクリックしてください", 0) If myObjA Is Nothing Then Exit Sub 'Is Nothing:オブジェクトが有効でない場合の判定に使う。無効な状態を検出判定するコード 'Exit:抜け出す の意味を持つコード。以後の処理を止めたい時に使う myDirA = myObjA.Items.Item.Path 'フォルダ名を取得 If Right(myDirA, 1) <> "¥" Then myDirA = myDirA & "¥" '? '([myDirA]という変数に、選択したtxtファイルのあるフォルダのパスができている) '変換元フォルダ内の、txtファイルの数を確認 myFileNameA = Dir(myDirA & "*.txt") Do While myFileNameA <> "" If myFileNameA <> ThisWorkbook.Name Then myFileListA = myFileListA & Chr(13) & myFileNameA 'Chr(13)改行 ファイル名を、改行して表示する myFileCountA = myFileCountA + 1 End If myFileNameA = Dir() Loop 'フォルダ内に、txtファイルがない場合(1つ目の処理) If myFileCountA = 0 Then MsgBox "ファイルは見つかりませんでした。変換を終了します。", 48 '注意メッセージ アイコンを表示 Exit Sub 'フォルダ内に、txtファイルがあった場合(2つ目の処理) '[はい] [いいえ] ボタン表示で、vbNo =[いいえ] ボタンを押した時 ElseIf vbNo = MsgBox(myFileCountA & " 個の .txt ファイルが見つかりました。変換を実行しますか?" _ & Chr(13) & myFileListA, 4, "ファイル確認") Then MsgBox "キャンセルしました。" Exit Sub End If 'Aフォルダ選択ダイアログの表示で、xls保存先フォルダ選択する。 Set myObjB = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換後の保存先フォルダ選択して 「OK」 をクリックしてください", 0) If myObjB Is Nothing Then Exit Sub myDirB = myObjB.Items.Item.Path If Right(myDirB, 1) <> "¥" Then myDirB = myDirB & "¥" '([myDirB]という変数に、選択したxls保存先フォルダのパスができている) 'Excelで保存処理 myFileNameA = Dir(myDirA & "*.txt") Do While myFileNameA <> "" Application.DisplayAlerts = False '警告メッセージを表示しない Application.ScreenUpdating = False '画面の更新を表示しない If myFileNameA <> ThisWorkbook.Name Then Set wb = Workbooks.Open(myDirA & myFileNameA) '[myFileNameA]に*.txtが入っていた場合、 'myDirA & myFileNameA→"txtファイルのあるフォルダのパス" & "*.txt名"で目的のファイルが開ける wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _ FileFormat:=xlExcel3 'Excel 3.0 ワークシートで保存する 'Left(myFileNameA, Len(myFileNameA) - 3)で、*:(ファイル名)が得られる wb.Close End If myFileNameA = Dir() Loop Application.DisplayAlerts = True '警告メッセージを表示する Application.ScreenUpdating = True '画面の更新を表示する MsgBox "完了しました。" End Sub 質問@ Right関数を何故使うのか、理解できませんでした。 If Right(myDirA, 1) <> "¥" Then myDirA = myDirA & "¥" '? 質問AmyFileListA、myFileCountAの変数使った、下記の内容が理解できませんでした。変数の中身もよく理解できませんでした。 '変換元フォルダ内の、txtファイルの数を確認 myFileNameA = Dir(myDirA & "*.txt") Do While myFileNameA <> "" If myFileNameA <> ThisWorkbook.Name Then myFileListA = myFileListA & Chr(13) & myFileNameA 'Chr(13)改行 ファイル名を、改行して表示する myFileCountA = myFileCountA + 1 End If myFileNameA = Dir() Loop 質問B wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _で、 ファイル名が得られるようなのですが、- 3は、何でしょうか?txt? txtを消して、xlsの拡張子で置き換えて保存という意味でしょうか? このマクロを実行する事により、ファイル内容は、何も変わらずに、 テキストファイルを、エクセルファイルで保存できると言う認識で、 合っていますでしょうか? 長文になりましたが、宜しくお願い致します。 ---- だいぶ、以前に質問させて頂いた件ですが、 再度、教えて頂けますでしょうか?何度も、長文ですみません。 今度は、csvをxlsで保存する事になったので、前に教えて頂いたマクロを使わせて頂きました。 手動でcsvをxlsで保存(Microsoft Excel 97 - 2002 および 5.0/95 ブック)した時と、 このマクロを使用してcsvをxlsで保存した時とでは、 ファイルの大きさが、1KB違い、 (マクロでcsvをxlsで保存した時の方が、1KB大きい、保存したxlsには、マクロを入れていません) 手動でcsvをxlsで保存時と、マクロを使用してcsvをxlsで保存時と、 内容にどこか違いがあるのかな?と思い、見比べてみたのですが、同じに見えます。 Excel2002を使用のため、FileFormat:=xlExcel9795にして、マクロを実行したのですが、 何故、ファイルのサイズが変わるのかと、疑問に思い、質問させて頂きました。 マクロを使用して、保存したファイルは、手動で保存した場合より、 ファイルのサイズが大きくなるものなのでしょうか? 大した違いじゃない?から問題ないのかもしれませんが、 もし、内容に違いがあったらと気になったので、 マクロの意味は、調べている最中ですので、 無知な質問で、恐縮ですが、宜しくお願い致します。 Sub CSV変換() Dim myObjA As Object Dim myDirA As String Dim myFileNameA As String Dim myFileListA As String Dim myFileCountA As Long Dim wb As Workbook Dim myObjB As Object Dim myDirB As String '変換元フォルダ選択ダイアログの表示 Set myObjA = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換元のフォルダ選択して 「OK」 をクリックしてください", 0) If myObjA Is Nothing Then Exit Sub myDirA = myObjA.Items.Item.Path If Right(myDirA, 1) <> "¥" Then myDirA = myDirA & "¥" 'フォルダ内のCSVファイルを確認 myFileNameA = Dir(myDirA & "*.csv") Do While myFileNameA <> "" If myFileNameA <> ThisWorkbook.Name Then myFileListA = myFileListA & Chr(13) & myFileNameA myFileCountA = myFileCountA + 1 End If myFileNameA = Dir() Loop If myFileCountA = 0 Then MsgBox "ファイルは見つかりませんでした。変換を終了します。", 48 Exit Sub ElseIf vbNo = MsgBox(myFileCountA & " 個の .csv ファイルが見つかりました。変換を実行しますか?" _ & Chr(13) & myFileListA, 4, "ファイル確認") Then MsgBox "キャンセルしました。" Exit Sub End If '保存先フォルダ選択ダイアログの表示 Set myObjB = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換後の保存先フォルダ選択して 「OK」 をクリックしてください", 0) If myObjB Is Nothing Then Exit Sub myDirB = myObjB.Items.Item.Path If Right(myDirB, 1) <> "¥" Then myDirB = myDirB & "¥" 'Excel処理 myFileNameA = Dir(myDirA & "*.csv") Do While myFileNameA <> "" Application.DisplayAlerts = False Application.ScreenUpdating = False If myFileNameA <> ThisWorkbook.Name Then Set wb = Workbooks.Open(myDirA & myFileNameA) wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _ FileFormat:=xlExcel9795 wb.Close End If myFileNameA = Dir() Loop Application.DisplayAlerts = True Application.ScreenUpdating = True MsgBox "完了しました。" End Sub (勉強中) ---- 物は試し と言う事で。。。 Set wb = Workbooks.Open(myDirA & myFileNameA) wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _ FileFormat:=xlExcel9795 wb.Close の所を With Workbooks.Open(myDirA & myFileNameA) .SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _ FileFormat:=xlExcel9795 .Close End With に変えてみるとどうでしょう? (HANA) ---- HANAさん ややこしい質問ばかりしているのに、ご回答下さり、有難うございます。 教えて頂いた通り、変更してみたのですが、結果は、前回同様、 1KB増えて、保存されていました。内容も手動で保存分と比べてみたのですが、 手動保存も、マクロ保存も、内容に違いがないように見えてます。 ずっと、マクロの意味を調べたりしているのですが、 なかなか理解が進まず、ファイルサイズも違うので、不安になって、また相談させて頂きました。 ちょっと、初心者が使いこなすには、難しすぎるのかもしれませんが、 いつも手作業で、かなり時間を使ってしまうので、 これを使いこなせたら便利だなぁと思ったのですが (;_:) (勉強中) ---- 私の方では、「1KB増えて」なんて成らないんですよね。 SaveAs中に[F8]でちょっかい出すと、サイズが大きく成りましたが。 マクロの記録でコードを作って そのコードを実行して保存してみた時はどうでしょう? また、該当の部分だけ取り出して 変数に処理できるファイル・フォルダ名を直接入れて やってみるとどうでしょう? (HANA) ---- HANAさん 私の方では、「1KB増えて」なんて成らないんですよね。 >そうなんですね(>_<) せっかく教えて頂いたのですが、考えてみましたが、 ちょっとやり方がよく解らなくてすみません。 1つ目は、マクロの記録で作成したファイルと、 そのマクロを実行して作成したファイルは、 中身は同じですが、ファイルサイズは違いました。 マクロを実行したファイルと、手で入力したファイルのサイズも違いました。 (こんな事を言っているのか、違うのかもしれませんが。) 2つ目は、ちょっと、力不足で理解ができませんでした。 すみませんm(__)m (勉強中) ---- 共通. Cドライブの下に temp フォルダを作製し、test.CSV ファイルを置く 1. 新しいブックで ●マクロの記録開始 ファイル→開く から test.CSVファイルを開く 名前を付けて xls で保存 ファイルを閉じる ■マクロの記録終了 で出来たマクロを再度動かし、ファイルサイズを確認 2. ↓の様なコードを作り単独で動かしてみる。 '------ Sub 該当部分だけ取り出して() Dim myDirA As String Dim myFileNameA As String Dim myDirB As String Dim wb As Workbook myDirA = "C:¥temp¥" myFileNameA = "test.CSV" myDirB = myDirA Set wb = Workbooks.Open(myDirA & myFileNameA) wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _ FileFormat:=xlExcel9795 wb.Close End Sub '------ <注>このコードは動かして無いので、エラーが出るかもしれません。 修正して試して下さい。 (HANA) ---- 全体を見ていないですが、 xls と csv のファイルサイズが変わるというお話でしょうか? これは逆に変わらないほうがおかしいと思います。 CSV はデータしかないテキストファイルです。Notepad でも開けます。 XLS はシートやブック情報を持ったEXCELファイルです。もちろんテキストエディタでは 開けません。 csv が EXCEL で開けるからといって混同しない方がよいと思います。 (Mook) ---- Mookさん >>手動でcsvをxlsで保存(Microsoft Excel 97 - 2002 および 5.0/95 ブック)した時と、 >>このマクロを使用してcsvをxlsで保存した時とでは、 >>ファイルの大きさが、1KB違い、 と書いてあります。 (HANA) ---- あぁ、勘違いでしたね。 手動とマクロでの違いということですね。 失礼しました。 (Mook) ---- HANAさん ご丁寧に有難うございます。 共通:test.CSV=1KB 1:マクロの記録で作成したtest.xls=13KB 2:Sub 該当部分だけ取り出して()マクロ実行で作成したtest.xls=16KB このような結果となりました。 今度は、1KBの差ではありませんでした。 Mookさん ご回答有難うございます。長文で、質問が解りにくく、すみませんでした。 (勉強中) ---- >1:マクロの記録で作成したtest.xls=13KB これは、マクロの記録で出来たマクロを実行させた結果ですよね? (マクロの記録中に出来たファイルではなく。) 3. 「共通:test.CSV=1KB」を手作業で保存した場合は 記録で出来たマクロを実行した結果の 13KB と等しいでしょうか? 4. 作って居られる「Sub CSV変換()」のマクロがありますね。 それを使って「共通:test.CSV=1KB」のファイルを処理した場合 ファイルサイズはどうなりますか? 5. 「Sub 該当部分だけ取り出して()」のマクロの 最後の >wb.SaveAs の上に「Stop」と書いておくと、一旦マクロが止まります。 止まっている所の行が黄色くハイライトされます。 その後[F8]キーで一行ずつコードが実行出来ます。 ・ハイライトが下の行に下がった事を確認して [F8]を押す を繰り返して 終了した場合 ファイルサイズに変化はありますか? 6. 「Sub 該当部分だけ取り出して()」のマクロの 最後の >wb.Close を削除して、開いたままで終わる様にした時(その後手作業で閉じて下さい。) ファイルサイズは変わらず 16KB でしょうか? (5番でやった Stopは削除しておいて下さい。) 7. 記録で出来たコードを載せてもらえますか? >今度は、1KBの差ではありませんでした。 って事は、又違った現象が起きているのかもしれないですね。。。 (HANA) ---- 1 :マクロの記録で作成したtest.xls=13KB これは、マクロの記録で出来たマクロを実行させた結果ですよね? (マクロの記録中に出来たファイル→(これは、21KBでした)ではなく。) >はい。そうです。 3. 「共通:test.CSV=1KB」を手作業で保存した場合は 記録で出来たマクロを実行した結果の 13KB と等しいでしょうか? >14KBでした。 保存する時、 Microsoft Excel 97 - 2002 および 5.0/95 ブックは選択に出てこなくて、 Microsoft Excelブックで保存しています。 4. 作って居られる「Sub CSV変換()」のマクロがありますね。 それを使って「共通:test.CSV=1KB」のファイルを処理した場合 ファイルサイズはどうなりますか? >16KBでした。 5. 「Sub 該当部分だけ取り出して()」のマクロの 最後の >wb.SaveAs の上に「Stop」と書いておくと、一旦マクロが止まります。 止まっている所の行が黄色くハイライトされます。 その後[F8]キーで一行ずつコードが実行出来ます。 ・ハイライトが下の行に下がった事を確認して [F8]を押す を繰り返して 終了した場合 ファイルサイズに変化はありますか? >18KBでした。 6. 「Sub 該当部分だけ取り出して()」のマクロの 最後の >wb.Close を削除して、開いたままで終わる様にした時(その後手作業で閉じて下さい。) ファイルサイズは変わらず 16KB でしょうか? (5番でやった Stopは削除しておいて下さい。) >16KBでした。 Microsoft Excel 97 - 2002 および 5.0/95 ブックで保存しました。 7. 記録で出来たコードを載せてもらえますか? Sub Macro1() Workbooks.OpenText Filename:="C:¥temp¥test.csv", Origin:=932, StartRow:=1 _ , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(1, 1), _ TrailingMinusNumbers:=True ActiveWorkbook.SaveAs Filename:="C:¥temp¥test.xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False ActiveWindow.Close End Sub HANAさん 大変、手間な事を頼んでしまって、恐縮ですが、よろしくお願いします。 (勉強中) ---- えっと。。。当初のご質問時は >手動でcsvをxlsで保存(Microsoft Excel 97 - 2002 および 5.0/95 ブック)した時と、 >このマクロを使用してcsvをxlsで保存した時とでは、 と言う事でしたが、今は >3. >Microsoft Excel 97 - 2002 および 5.0/95 ブックは選択に出てこなくて、 >Microsoft Excelブックで保存しています。 と成っているのは、テスト環境(使っているPC?)が違う って事ですか? それから >共通:test.CSV=1KB >1:マクロの記録で作成したtest.xls=13KB >>3.「共通:test.CSV=1KB」を手作業で保存した場合は >14KBでした。 の結果から、手作業で保存した方が 1KB大きいですね? 本来は >>マクロでcsvをxlsで保存した時の方が、1KB大きい と言う話でしたよね。。。 そして、マクロの記録は 記録時にやった事を繰り返しやってくれるだけなので ソースが同じなら、結果も同じに成ると思うのですが。。。 そのあたりの認識違いは無いですか? 現時点迄で調べて貰ったファイルサイズをまとめてみました。 =================================================================== C:¥temp¥ 内 test.CSV=1KB を xls で保存する場合 手作業で保存 14KB ・・・・FileFormat:=xlNormal 記録したマクロで保存 13KB ・・・・FileFormat:=xlNormal Sub CSV変換()で保存 16KB ・・・・FileFormat:=xlExcel9795 該当部分だけ〜 そのまま実行 16KB ・・・・FileFormat:=xlExcel9795 最後に閉じない 16KB ・・・・FileFormat:=xlExcel9795 F8で実行 18KB ・・・・FileFormat:=xlExcel9795 =================================================================== なお、拡張子が同じ「.xls」でも保存形式が違った場合 ファイルサイズも変わりますので、 xlNormal で保存した場合と xlExcel9795 で保存した場合に、後者の方が少しファイルサイズが大きいのは (差が妥当かどうかは分かりませんが)まぁ、普通だと思います。 同じフォーマット内での違いが何故出ているのかよく分かりません。 こんなコードで、もう少し詳細にサイズを取得してみると どうでしょう? '------ Sub ファイルスタンプ取得() Dim aFile As Object Dim i As Long With Application.FileDialog(msoFileDialogFolderPicker) .Show aPath = .SelectedItems(1) End With If aPath = "" Then Exit Sub If ActiveCell.Column = 1 And ActiveCell.Row <> 1 Then i = ActiveCell.Row - 1 Else Range("A:D").ClearContents End If Range("A" & i + 1).Value = aPath With CreateObject("Scripting.FileSystemObject") For Each aFile In .GetFolder(aPath).Files i = i + 1 Range("B" & i + 1).Value = aFile.Name Range("C" & i + 1).Value = .GetFile(aFile).DateLastModified Range("D" & i + 1).Value = .GetFile(aFile).Size Next End With End Sub '------ A1セルをアクティブにして実行。 2回目は A列の続きのセルをアクティブにして実行して貰うと 結果を続きに書き出します。 A列以外のセル(又はA1セル)をアクティブにして実行した場合 A:D列のデータは一旦全て削除され 結果をA1セルから書き出します。 (HANA) ---- HANAさん 返事が遅くなってすみません。 >3. >Microsoft Excel 97 - 2002 および 5.0/95 ブックは選択に出てこなくて、 >Microsoft Excelブックで保存しています。 と成っているのは、テスト環境(使っているPC?)が違う って事ですか? >同じパソコンを使っています。 test.csvを手動保存する時、 ファイル名に、自動的に、"test.csv" テキストの種類に、テキスト(タブ区切り)と出るので、 ファイル名をtestにして、Microsoft Excelブックで保存しました。 この時、Microsoft Excel 97 - 2002 および 5.0/95 ブックは選択に出てきません。 無関係かもしれませんが、新規のブックを名前をつけて保存する時も、 Microsoft Excel 97 - 2002 および 5.0/95 ブックは選択に出てこず、 Microsoft Excelブックしか表示されていません。 なお、拡張子が同じ「.xls」でも保存形式が違った場合 ファイルサイズも変わりますので、 xlNormal で保存した場合と xlExcel9795 で保存した場合に、後者の方が少しファイルサイズが大きいのは (差が妥当かどうかは分かりませんが)まぁ、普通だと思います。 > 最初に質問した、ファイルは、同じ保存形式だったけど、 Microsoft Excel 97 - 2002 および 5.0/95 ブックや、Microsoft Excelブックの選択が、 保存時に変わるのが、よく解らなくなってきましたが、ファイルサイズが違うのは、 保存形式が違うと、普通なんですね。 ありがとうございました! Sub ファイルスタンプ取得()を実行してみました。 これは、testファイルに実行すれば良いのでしょうか? それとも、最初に質問した元のファイルにでしょうか? 参照→フォルダ名に名前を入れてOKとしたら、 フォルダ名にアクセスできません、使用できない場所にあるか、パスワードで保護されているか、 /¥が含まれていますと出ました。 自分が思っていたより、ずっとややこしい質問だったみたいで、 HANAさん、本当、恐縮です。まだ、マクロの内容も理解できていない段階で、 こんなに質問から脱線してしまって、お手数をかけて、申し訳ないです。 (勉強中) ---- 最初に訂正させて下さい。 保存形式 → ファイルの種類 と言うのが適当でした。 >Sub ファイルスタンプ取得()を実行してみました。 >これは、testファイルに実行すれば良いのでしょうか? フォルダ選択するウィンドウが出ますので C:¥temp¥ のフォルダを選んで貰えれば良いです。 そのフォルダに入っているファイルの 名前・最終更新日・ファイルサイズ が結果としてシートに表示されます。 1KBの差は大きい様ですが、もしかしたら 四捨五入の微妙な位置にサイズが有るのかもしれません。 。。。が、これ又どの程度が誤差の範囲内なのか とか そもそも変動があり得るのかどうかの判断出来る情報は 申し訳有りませんが、持ち合わせておりません。 だんだん問題点がよく分からなくなってきましたが 載せて居られるコードで、特におかしいと思う所は無いと思います。 (HANA) ---- HANAさん たくさん、ご親切に、ありがとうございました!! こんなに、ややこしい質問にも、丁寧に答えてくださり、感謝しています。 以前も、HANAさんが、とても丁寧に教えてくださり、助かりました。 マクロを実行したら、ファイルサイズも違いましたが、 コードにおかしな所が無いようですので、このまま使ってみます。 今、コードの意味を調べている最中ですが、 難しくて、なかなか理解がすすみません^^; また、質問させていただくかもしれませんが、 よろしくお願いします。 有難うございました。(勉強中) ---- 話が全く進展せず、すみません。 ちなみにその前の >質問@ Right関数を何故使うのか〜 等の質問群に レスがついて居なかった様ですが それは解決しましたか? まだ調べている所ですか? (HANA) ---- HANAさん >話が全く進展せず、すみません。 とんでもありません。記述内容に間違いがない事が解っただけでも、 安心しました。 >質問@ Right関数を何故使うのか〜 その後、色々と調べたのですが。。。 以前、質問した、この部分しか、まだ、理解??できていないのですが、 If Right(myDirA, 1) <> "¥" Then myDirA = myDirA & "¥" 'csvファイルのあるフォルダのパスの文字列の最後に「¥」がなかったら付加する って事なのかなぁ、と思ったのですが、これも調べても、ちょっと、意味がよく解らなくて。。。 その先は、まだ手付かずで、もし、よろしければ、ご教授をお願いできますでしょうか? 今は、csvをエクセルで保存しているのですが、質問2と質問3も、まだ理解できないままです。 長文になりすぎたのと、コメントが多すぎて、とても読みにくいかと思いますが、 よろしくお願いします。(勉強中) ---- >>質問@ Right関数を何故使うのか〜 >'csvファイルのあるフォルダのパスの文字列の最後に「¥」がなかったら付加する これで合っています。 「csvファイルのあるフォルダ」ではなく、「Set myObjA = 〜 で選んだフォルダ」ですが。。。 ですから、問題は「何がよくわからないと思っておられるのか」と言う点です。 それがわからない内は何を説明して良いのかよくわかりません。 たとえば、今までサンプルとして利用して来たファイルは C:¥temp¥ の中の test.CSV でしたね? Sub 該当部分だけ取り出して() のマクロを少し変更してみましょうか。 '------ Sub 該当部分だけ取り出して2() Dim myDirA As String Dim myFileNameA As String Dim myDirB As String Dim wb As Workbook '★↓この一行を、もう少し実際のコードに近付けて。。。 '★myDirA = "C:¥temp¥" '★↓下の二行に変更 myDirA = "C:¥temp" If Right(myDirA, 1) <> "¥" Then myDirA = myDirA & "¥" '★右の一文字が「¥」以外なので、myDirA = "C:¥temp" & "¥" = "C:¥temp¥" にします。 myFileNameA = "test.CSV" myDirB = myDirA Set wb = Workbooks.Open(myDirA & myFileNameA) wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _ FileFormat:=xlExcel9795 wb.Close End Sub '------ 「myDirA & myFileNameA」の所で「C:¥temptest.CSV」と成っては Cドライブの下の temptest と言う CSVファイル を意味してしまいます。 本当は、Cドライブの下のtempフォルダの中の testと言うCSVファイル なので 「C:¥temp¥test.CSV」 ‾ここに¥マークが必要になってきますね。 >>質問AmyFileListA、myFileCountAの変数使った〜 これは、いくつかの階段が有ると思います。 一つは、Do While 〜 Loop のループ処理について。 もうひとつは、Dir関数について。 です。 ループ処理は、最初と最後だけ抜き出すと Do While myFileNameA <> "" '〜〜〜〜〜〜 'ここにコード '〜〜〜〜〜〜 Loop と成っているので、『myFileNameAの中身が「""」になるまで繰り返す』です。 myFileNameA には ループ処理の始まる前にある myFileNameA = Dir(myDirA & "*.csv") この行で「C:¥temp¥*.CSV」=Cドライブのtempフォルダ内の(ファイル名は何でも良いので)CSVファイル の名前が入れられています。 それから、End If 下(Loop の前)にある myFileNameA = Dir() ここで、次のファイルの名前に書きかえられています。 これに関しては「そういうもの」です。 疑問:=SUM(A1:A5)と書いたら、A1:A5の合計が出るのはなぜだろう? 答え:そういう関数だから ですよね? 質問Aの中では「変数の中身もよく理解できませんでした。」と書いてありますが 書きだすと、どの変数の事でしたか? myFileNameA 以外にもありましたか? >>質問B wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls" >> 〜 - 3は、何でしょうか?txt? >>txtを消して、xlsの拡張子で置き換えて保存という意味でしょうか? やっている事は、そういう事です。 「Left(myFileNameA, Len(myFileNameA) - 3)」の部分をまず考えてみると myFileNameA = "test.CSV" だった場合、 Len("test.CSV") は、8文字ですので -3 すると「5文字」です。 LEFT("test.CSV",5) は、左から5文字分なので「"test."」 前に、フォルダのパスと、後ろに"xls"を付けると 「myDirBのフォルダ¥test.xls」になるので wb.SaveAs Filename:="myDirBのフォルダ¥test.xls" wbを、myDirBのフォルダに、test と言う名前を付けて xls で保存 になります。 ファイルを名前を付けて保存する時、普通は 保存したいフォルダまで移動してから ファイル名(N)の所に名前だけを入れて保存しますが ファイルの種類でエクセルが選んである時 ファイル名の所に「C:¥temp¥test.xls」と入れると、どのフォルダが表示されている状態でも そのフォルダに、その名前で ファイルを保存することができます。 だらだらとたくさん書いてしまいましたが 明日はおそらく、一日中外に出ているので レスが出来ないと思います。 じっくり読んで、確認してみて下さい。 (HANA) ---- HANAさん お仕事、お忙しいようなのに、ご丁寧に有難うございました。 遅くなりましたが、おかげさまで、だいぶ理解できてきました。 まだ、理解できない部分を、また、教えて頂けますか? @あと、まだ、はっきり理解できていない変数ですが、下記です。 変数myFileListA :Set myObjA = 〜 で選んだフォルダ内のcsvファイルを改行して表示? 変数myFileCountA:Set myObjA = 〜 で選んだフォルダ内のcsvファイルの数? If myFileNameA <> ThisWorkbook.Name Then myFileListA = myFileListA & Chr(13) & myFileNameA myFileCountA = myFileCountA + 1 End If AmyFileNameA = Dir() ここで、次のファイルの名前に書きかえられています。 これに関しては「そういうもの」です。 ここで言う、次のファイルの名前とは、何の事なんでしょうか? そういうものと言う事なので、気にしなくても良いのかもしれませんが、 csvからxlsに変更されたファイルの事でしょうか? 'フォルダ内のCSVファイルを確認 'Excel処理 の2箇所で、myFileNameA = Dir()が出てきているのですが、同じものを指しているのでしょうか? 稚拙な質問ばかりで、申し訳ないのですが、また教えて頂けないでしょうか? お手数をかけてばかりですみませんが、もう少しで解りそう??なので、 教えて頂けたら、助かりますm(__)m (勉強中) ---- 変数、変数myFileListA 変数myFileCountA について。。。 myFileListA = myFileListA & Chr(13) & myFileNameA myFileCountA = myFileCountA + 1 の処理が、何の為に行われているか分かりますか? 現在のコードでは MsgBox(myFileCountA & " 個の .csv ファイルが見つかりました。変換を実行しますか?" _ & Chr(13) & myFileListA, 4, "ファイル確認") ここでメッセージを表示する為だけ (myFileCountA = 0 の時に 処理を終了する為もありますが) に使われている変数です。 これからエクセルが、どのファイルを処理するのか 確認させるため ファイル名が、ずらずらと横に並ぶと 読みにくいですね? なので、Set myObjA = 〜 で選んだフォルダ内のcsvファイル名を 改行を挟みながら 蓄積していきます。 また、エクセルが、何個のファイルを処理しようとしているのか 確認させるため Set myObjA = 〜 で選んだフォルダ内のcsvファイルの数を カウントしていっています。 ファイル数が思っていたものと違ったり、ファイル名が違ったりすると 間違ったフォルダ選択したと気付けますね。 >myFileNameA = Dir() >ここで言う、次のファイルの名前とは、何の事なんでしょうか? ループ処理の前に 「myFileNameA = Dir(myDirA & "*.csv")」をしています。 これは先にも書きましたが 「C:¥temp¥*.CSV」=Cドライブのtempフォルダ内の(ファイル名は何でも良いので)CSVファイル の最初の一つのファイルの名前が、myFileNameA に入ります。 次のファイルってのは 「C:¥temp¥*.CSV」=Cドライブのtempフォルダ内の(ファイル名は何でも良いので、先ほどとは違う)CSVファイル です。 たとえば、具体的に考えてみると test.CSV test.xls test1.CSV test2.CSV と4つファイルが有った場合 ループ処理の前の「myFileNameA = Dir(myDirA & "*.csv")」で myFileNameA に「test.CSV」が入ります。 myFileNameA <> "" なので、次の行に進みます。 If 〜 End If が済んだら Loop の前の「myFileNameA = Dir()」で次の CSVファイル ・・・・test.xls は CSVファイルではないので、その次の・・・ 「text1.CSV」が入ります。 Loop があるので、Do の行まで戻ります。 myFileNameA <> "" なので、次の行に進みます。 If 〜 End If が済んだら Loop の前の「myFileNameA = Dir()」で次の CSVファイル ・・・・test1.CSVの次の・・・ 「text2.CSV」が入ります。 Loop があるので、Do の行まで戻ります。 myFileNameA <> "" なので、次の行に進みます。 If 〜 End If が済んだら Loop の前の「myFileNameA = Dir()」で次の CSVファイル ・・・・・・・はもう無いので 「""」が入ります。 Loop があるので、Do の行まで戻ります。 myFileNameA <> "" ではない(myFileNameA は "" になっている)ので ループ処理が終了 です。 >csvからxlsに変更されたファイルの事でしょうか? いいえ、まだ処理して居ない CSVファイルです。 >2箇所で、myFileNameA = Dir()が出てきているのですが、同じものを指しているのでしょうか? やっている事は同じです。 「最初のファイル」「次のファイル」「その次のファイル」がどの順番でヒットして行くかは 。。。。たぶん、エクセル任せです。 [F8]キーでコードを実行させてみられてますか? VBEのメニューの 表示(V) で、ローカルウィンドウを表示させてください。 コード内のどこかにカーソルを置いて [F8] を押すと、 [F8]キーを押すたびに、コードを一行ずつ実行させる事が出来ます。 ローカルウィンドウに、使われている変数名と 入っている物が表示されますので 一行ずつ実行しながら、変数の中身がどのように変わるのか。 また、コードがどの順番で何処が実行されているのか。 確認してみて下さい。 (HANA) ---- HANAさん 最後まで、数日にわたり、長々とお付き合い下さいまして、大変感謝しています。 とても解りやすい説明で理解する事ができました。 >VBEのメニューの 表示(V) で、ローカルウィンドウを表示させてください。 こんな方法もあるんですね!勉強になりました! 途中でちょっと脱線していましたが、手動保存時と、マクロ保存時のファイルの大きさが違ったため、 このマクロをそのまま実行しても問題ないのか、ちょっと心配になったりしたのですが、 マクロの意味を理解できたので、安心しました。本当、こんなマクロを作成できる方たちは、 どれくらい勉強をしているのか、と尊敬するばかりです。 これから、このマクロを使用させていただきます。作業が楽になり、感激です。 本当に、有難うございました!! Sub CSVを変換() Dim myObjA As Object Dim myDirA As String 'Set myObjA = 〜 で選んだ、フォルダパス(csvがあるフォルダパス) Dim myFileNameA As String 'Set myObjA = 〜 で選んだ、フォルダパス(csvがあるフォルダパス)内のcsv名 Dim myFileListA As String 'Set myObjA = 〜 で選んだ、フォルダ内のcsvファイル名を、改行を挟みながら蓄積 Dim myFileCountA As Long 'Set myObjA = 〜 で選んだ、フォルダ内のcsvファイルの数をカウント '(何個のcsvファイルを処理しようとしているのか 確認させるため) Dim wb As Workbook 'Set myObjA = 〜 で選んだ、フォルダパス(csvがあるフォルダパス)内のcsvファイル Dim myObjB As Object Dim myDirB As String 'Set myObjB = 〜 で選んだ、フォルダパス(xlsを保存するフォルダパス) '☆変換元フォルダ選択ダイアログの表示☆ Set myObjA = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換元のフォルダ選択して 「OK」 をクリックしてください", 0) If myObjA Is Nothing Then Exit Sub myDirA = myObjA.Items.Item.Path 'csvがあるフォルダパス If Right(myDirA, 1) <> "¥" Then myDirA = myDirA & "¥" '★「*ドライブ:¥*フォルダ¥*.csv」csvファイル名(*)の前に¥マークが必要になるので、 '‾ '★Set myObjA = 〜 で選んだ、フォルダパスの文字列の最後に、「¥」がなかったら付加する '★Set myObjA = 〜 で選んだ、フォルダパスの文字列の、右の一文字が「¥」以外なので、 'myDirA = myDirA & "¥" = myDirA ¥ にする '☆フォルダ内のCSVファイルを確認☆ '★★ myFileNameA = Dir(myDirA & "*.csv") '★myFileNameA =「*ドライブ:¥*フォルダ¥*.csv」 '★=*ドライブの*フォルダ内の(ファイル名は何でも良いので)myFileNameAに、csvファイルの名前が入れられている Do While myFileNameA <> "" '★『myFileNameAの中身が「""」になるまで繰り返す』 If myFileNameA <> ThisWorkbook.Name Then myFileListA = myFileListA & Chr(13) & myFileNameA myFileCountA = myFileCountA + 1 End If '★★ myFileNameA = Dir(myDirA & "*.csv")で、myFileNameA に入れられているcsvファイルを順番に選択していく myFileNameA = Dir() '★ここで、次のファイルの名前に書きかえられている '★『myFileNameAの中身が「""」になるまで繰り返す』 Loop '☆フォルダ内に、CSVファイルがない場合☆ If myFileCountA = 0 Then MsgBox "ファイルは見つかりませんでした。変換を終了します。", 48 Exit Sub '☆フォルダ内に、CSVファイルがあった場合☆ ElseIf vbNo = MsgBox(myFileCountA & " 個の .csv ファイルが見つかりました。変換を実行しますか?" _ & Chr(13) & myFileListA, 4, "ファイル確認") Then '☆[はい] [いいえ] ボタン表示で、vbNo =[いいえ] ボタンを押した時☆ MsgBox "キャンセルしました。" Exit Sub End If '☆保存先フォルダ選択ダイアログの表示☆ 'フォルダ内に、CSVファイルがあった場合 '[はい] [いいえ] ボタン表示で、vbNo =[はい] ボタンを押した時 Set myObjB = CreateObject("Shell.Application"). _ BrowseForFolder(0, "変換後の保存先フォルダ選択して 「OK」 をクリックしてください", 0) If myObjB Is Nothing Then Exit Sub myDirB = myObjB.Items.Item.Path 'xlsがあるフォルダパス If Right(myDirB, 1) <> "¥" Then myDirB = myDirB & "¥" '★「*ドライブ:¥*フォルダ¥*.'xls」'xlsファイル名の前に¥マークが必要になるので、 '‾ '★Set myObjB = 〜 で選んだ、フォルダパスの文字列の最後に、「¥」がなかったら付加する '★Set myObjB = 〜 で選んだ、フォルダパスの文字列の、右の一文字が「¥」以外なので、 'myDirB = myDirB & "¥" = myDirB ¥ にする '☆Excel処理☆ '★★ myFileNameA = Dir(myDirA & "*.csv") '★myFileNameA =「*ドライブ:¥*フォルダ¥*.csv」 '★=*ドライブの*フォルダ内の(ファイル名は何でも良いので)myFileNameAに、csvファイルの名前が入れられている Do While myFileNameA <> "" '★『myFileNameAの中身が「""」になるまで繰り返す』 Application.DisplayAlerts = False '警告メッセージを表示しない Application.ScreenUpdating = False '画面の更新を表示しない If myFileNameA <> ThisWorkbook.Name Then Set wb = Workbooks.Open(myDirA & myFileNameA) wb.SaveAs Filename:=myDirB & Left(myFileNameA, Len(myFileNameA) - 3) & "xls", _ FileFormat:=xlExcel9795 'Excel97-2002および5.0/95ブックで保存する wb.Close End If '★★ myFileNameA = Dir(myDirA & "*.csv")で、myFileNameA に入れられているcsvファイルを順番に選択していく myFileNameA = Dir() '★ここで、次のファイルの名前に書きかえられている '★『myFileNameAの中身が「""」になるまで繰り返す』 Loop 'LEN関数:「文字列」の文字数を返す=***.csvファイル名の文字数を数える 'Left(myFileNameA, Len(myFileNameA) - 3)で、拡張子をはずしたファイル名が得られる -3=csv '前に、Set myObjB = 〜 で選んだ、フォルダパス(xlsを保存するフォルダパス)、後ろに"xls"を付けると、 '「myDirBのフォルダ¥***.xls」になるので 'wb.SaveAs Filename:="myDirBのフォルダ¥***.xls" 'wbを、myDirBのフォルダに、*** と言う名前を付けて xls で保存 Application.DisplayAlerts = True '警告メッセージを表示する Application.ScreenUpdating = True '画面の更新を表示する MsgBox "完了しました。" End Sub (勉強中) ---- [F8](ステップインで実行)は、まだやって居られませんでしたか。 でしたら、せっかくなので >'★Set myObjA = 〜 で選んだ、フォルダパスの文字列の最後に、「¥」がなかったら付加する の関連として、F8で実行しながら Cドライブを直接選んでみて下さい。 今までは、Cドライブの下のフォルダを選んで居たと思いますが。 それで >myDirA = myObjA.Items.Item.Path 'csvがあるフォルダパス が終わった時の myDirA の変数の中に入っている文字を確認してみて下さい。 フォルダを選んだ時は 「*ドライブ:¥*フォルダ」と、最後に「¥」が無いですが Cドライブを選んだ時は「*ドライブ:¥」と、最後に「¥」がついて居ます。 この違いの為に >If Right(myDirA, 1) <> "¥" Then myDirA = myDirA & "¥" の処理が入れてあります。 myDirAの中身が確認できたら、それ以降は処理する必要は無いので メニューの■(リセット)で 中止して下さい。 (HANA) ---- HANAさん 実行してみました。おっしゃる通りでした。 ひとつのコードでも本当に奥が深いですね。 HANAさんのご説明は、とても勉強になります。 有難うございました!また、何かありましたら、宜しくお願い致します。 (勉強中) ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201102/20110217161712.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97054 documents and 608268 words.

訪問者:カウンタValid HTML 4.01 Transitional