Excel 2003からVBAのReplaceメソッドで文字を置換する方法

このQ&Aのポイント
  • Excel 2003からVBAのreplaceメソッドを使用して文字を置換する方法について教えてください。
  • エクセルファイルシートをセミコロン区切りのテキストファイルに変換して出力したいです。
  • エクセル2002ではVBAのマクロが動作し、TABをセミコロンに置換できますが、エクセル2003では置換ができず、TABがそのまま出力されます。解決方法を教えてください。
回答を見る
  • ベストアンサー

excel 2003から VBAのreplaceマソッドで文字を置換する方法を教えてください

エクセルファイルシートをセミコロン区切りのテキストファイルに変換して出力したいです。 エクセル2002では以下のVBAで書いたマクロがちゃんと動いてTABをセミコロンに置換できますが、エクセル2003では置換ができなくてデータとデータの間にTABまま出力されます。 Public Sub ExportWorksheetWithCustomDelimiter( _ ByVal SourceWorksheet As Variant, _ ByVal FilePath As String, _ ByVal Delimiter As String) ' Exports the source worksheet as a text file with a custom field delimiter. ' ExportWorksheetWithCustomDelimiter(SourceWorksheet, FilePath, Delimiter) ' SourceWorksheet - The name of or a reference to a worksheet. ' FilePath - The full path to the export file. ' Delimiter - One or more characters to use as the field delimiter. Dim DisplayAlerts As Boolean Dim FileNumber As Long Dim FileData As String If VarType(SourceWorksheet) = vbString Then SourceWorksheet = ActiveWorkbook.Sheets(SourceWorksheet).Name ' Create copy of source worksheet in new workbook Sheet1.Copy ' Save copy as tab delimited text file and close DisplayAlerts = Application.DisplayAlerts Application.DisplayAlerts = False ActiveWorkbook.SaveAs FileName:=FilePath, FileFormat:=xlText ActiveWorkbook.Close SaveChanges:=False Application.DisplayAlerts = DisplayAlerts ' Read file into string variable and delete file FileNumber = FreeFile 'Open FilePath For Binary Access Read Write As FileNumber Open FilePath & ".txt" For Binary Access Read Write As FileNumber FileData = StrConv(InputB(LOF(FileNumber), FileNumber), vbUnicode) Close FileNumber Kill FilePath & ".txt" ' Replace all tabs with special character FileData = Replace(FileData, Chr(9), Delimiter) ' Right modified text back out to same file Open FilePath For Binary Access Read Write As FileNumber Put FileNumber, , FileData Close FileNumber End Sub 上のマクロの実行後の結果は次と同じです。 エクセル2002からマクロの実行結果:AAA;BBB;CCC;DDD;EEE;FFF エクセル2003からマクロの実行結果:AAA BBB CCC DDD EEE FFF 解決方法を教えてください。 ぜひよろしくお願いします。 ありがとうございます。

質問者が選んだベストアンサー

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

以下のように変更してみてください。 Sub Main()   Call ExportWorksheetWithCustomDelimiter("TEST", "C:\TEST", ";")   '←起動方法 End Sub Function ExportWorksheetWithCustomDelimiter( _   ByVal SourceWorksheet As Variant, _   ByVal FilePath As String, _   ByVal Delimiter As String)   ' Exports the source worksheet as a text file with a custom field delimiter.   ' ExportWorksheetWithCustomDelimiter(SourceWorksheet, FilePath, Delimiter)   ' SourceWorksheet - The name of or a reference to a worksheet.   ' FilePath - The full path to the export file.   ' Delimiter - One or more characters to use as the field delimiter.      Dim DisplayAlerts As Boolean   Dim FileNumber As Long   Dim FileData As String      If VarType(SourceWorksheet) = vbString Then SourceWorksheet = ActiveWorkbook.Sheets(SourceWorksheet).Name   ' Create copy of source worksheet in new workbook   Sheet1.Copy      ' Save copy as tab delimited text file and close   DisplayAlerts = Application.DisplayAlerts   Application.DisplayAlerts = False   ActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlText   ActiveWorkbook.Close SaveChanges:=False   Application.DisplayAlerts = DisplayAlerts      ' Read file into string variable and delete file   FileNumber = FreeFile   'Open FilePath For Binary Access Read Write As FileNumber   Open FilePath & ".txt" For Binary Access Read Write As FileNumber   FileData = StrConv(InputB(LOF(FileNumber), FileNumber), vbUnicode)   Close FileNumber   Kill FilePath & ".txt"      ' Replace all tabs with special character   FileData = Replace(FileData, Chr(9), Delimiter)      ' Right modified text back out to same file   'Open FilePath For Binary Access Read Write As FileNumber   Open FilePath & ".txt" For Binary Access Read Write As FileNumber  '←変更   Put FileNumber, , FileData   Close FileNumber End Function

zyh_uk
質問者

補足

pkh4989さん、回答ありがとうございました。 私の質問が悪かったです。 実は"エクセルファイルシートをセミコロン区切りのテキストファイルに変換して出力したいです。" だけじゃなくて、*.ABCDのようにお客さんからの要望に合わせてファイルの拡張子も変更して出力する仕様です。でもその拡張子の変更はすでに解決したので今回は説明しませんでした。 Kill FilePath & ".txt" このコードから最終的にテキストファイルを削除する処理を行いますので、もう一度下で以下の処理をするなら再度テキストファイルが作成されますので作りたい仕様とは違います。 Open FilePath & ".txt" For Binary Access Read Write As FileNumber  '←変更 たぶん FileData = Replace(FileData, Chr(9), Delimiter) このコードが問題があるんじゃないかなと思いますが、まだ良く分からなくって困っています。 また、よろしくお願いします。

その他の回答 (4)

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

質問者さんご提示のコードで2003でも FileData = Replace(FileData, Chr(9), Delimiter) この箇所で置換されますから、Replaceメソッドの問題ではないです。 ...という事を皆さんおっしゃってるのだと思います。 2002で実際に動いているというコードで再確認される事をおすすめします。 もし、実際のコードも提示コードのままなら、関係ない箇所ですけど >If VarType(SourceWorksheet) = vbString Then SourceWorksheet = ActiveWorkbook.Sheets(SourceWorksheet).Name >' Create copy of source worksheet in new workbook >Sheet1.Copy SourceWorksheetは意味がなく、シートオブジェクトSheet1を常にコピーしてますから それでいいのか仕様を確認しておかれたほうが良いでしょう。 また、セルテキスト内の『,』や『"』の扱いによっては、直接テキストデータを作る方法も検討してもいいかもしれません。 あと、データ量が多ければ"VBScript.RegExp"のReplaceメソッドも検討したほうが良いかも。以下参考です。 Sub try()   Const outfile = "c:\test.abcd"   Const CLSID_DataObject = "1C3B4210-F441-11CE-B9EA-00AA006B1A69"   Const DLM = vbTab   Const REP = ";"   Dim tmp As String   Dim n As Long   Sheets(1).UsedRange.Copy   'DataObjectを使ってClipboardから文字列を取得します。   'MicrosoftForms2.0 ObjectLiblaryに事前バインディングする方法でも可   With GetObject("new:" & CLSID_DataObject)     .GetFromClipboard     tmp = .GetText   End With   Application.CutCopyMode = False   'RegExp.Replaceメソッドで置換   With CreateObject("VBScript.RegExp")     .Global = True     .Pattern = DLM     tmp = .Replace(tmp, REP)   End With   n = FreeFile   Open outfile For Output As #n   Print #n, tmp   Close #n End Sub

zyh_uk
質問者

お礼

ご丁寧な回答ありがとうございました。 でも、はじめにこのサイトに質問したのでまだ使い方などがよく知らなくてポイント制度とか、良回答20ポイント、10ポイント制度もあんまりつける方法がよく分からなかったので次回にちゃんとポイントを送ります。それではまたよろしくお願いします。

zyh_uk
質問者

補足

end-uさん、早速の回答ありがとうございます。参考にさせていただきます。

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.4

お早うございます。 No1 です。 No2 さんが良い回答をしたので、必要ないと思いますが、   zyh_uk さんのソースをそのまま生かして修正すると、以下の2箇所です。( & ".txt" を削除) Sub Main()   Call ExportWorksheetWithCustomDelimiter("TEST", "C:\TEST.ABCD", ";")   '←起動方法 End Sub Function ExportWorksheetWithCustomDelimiter( _   ByVal SourceWorksheet As Variant, _   ByVal FilePath As String, _   ByVal Delimiter As String)   ' Exports the source worksheet as a text file with a custom field delimiter.   ' ExportWorksheetWithCustomDelimiter(SourceWorksheet, FilePath, Delimiter)   ' SourceWorksheet - The name of or a reference to a worksheet.   ' FilePath - The full path to the export file.   ' Delimiter - One or more characters to use as the field delimiter.      Dim DisplayAlerts As Boolean   Dim FileNumber As Long   Dim FileData As String      If VarType(SourceWorksheet) = vbString Then SourceWorksheet = ActiveWorkbook.Sheets(SourceWorksheet).Name   ' Create copy of source worksheet in new workbook   Sheet1.Copy      ' Save copy as tab delimited text file and close   DisplayAlerts = Application.DisplayAlerts   Application.DisplayAlerts = False   ActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlText   ActiveWorkbook.Close SaveChanges:=False   Application.DisplayAlerts = DisplayAlerts      ' Read file into string variable and delete file   FileNumber = FreeFile   'Open FilePath For Binary Access Read Write As FileNumber   Open FilePath For Binary Access Read Write As FileNumber      '←変更   FileData = StrConv(InputB(LOF(FileNumber), FileNumber), vbUnicode)   Close FileNumber   Kill FilePath    '←変更      ' Replace all tabs with special character   FileData = Replace(FileData, Chr(9), Delimiter)      ' Right modified text back out to same file   Open FilePath For Binary Access Read Write As FileNumber   Put FileNumber, , FileData   Close FileNumber End Function

zyh_uk
質問者

お礼

ご丁寧な回答ありがとうございました。 でも、はじめにこのサイトに質問したのでまだ使い方などがよく知らなくてポイント制度とか、良回答20ポイント、10ポイント制度もあんまりつける方法がよく分からなかったので次回にちゃんとポイントを送ります。それではまたよろしくお願いします。

zyh_uk
質問者

補足

参考になりました、ご丁寧に教えていただきまして本当にありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

FileData = StrConv(InputB(LOF(FileNumber), FileNumber), vbUnicode) を FileData = Input(LOF(FileNumber), FileNumber) テキストファイルならわざわざBinayで読む必要も無いように思うのですが … Input関数なら S-JIS -> Unicode は自動的に変換しますよ つまりStrConvは必要ありません 当方の WinXPSP3 + Exce2003SP3では Tab->;は Replaceで動作しますよ 動作検サンプル Sub M1() Dim ss(5) As String, n As Integer Dim sa As String Dim bb() As Byte Dim sb As String   ' テスト文字列組み立て   For n = 0 To 5     ss(n) = String(5, Chr(Asc("A") + n))   Next   sa = Join(ss, vbTab)   ' サンプルファイル出力   Open "sample.txt" For Output As #1   Print #1, sa   Close #1   ' バイナリオープン   Open "sample.txt" For Binary Access Read As #1   ' Byte配列に読み込み   bb = Input(LOF(1), 1)   Close #1   ' UnicodeのByte配列ならそのままString型へ代入   sb = bb   sb = Replace(sb, Chr(9), ";")  ' vbTabでも同様にOK  ' sb = Replace(sb, vbTab, ";")   Open "sampleT.txt" For Binary Access Write As #1   Put #1,,sb   Close #1 End Sub

zyh_uk
質問者

お礼

ご丁寧な回答ありがとうございました。 でも、はじめにこのサイトに質問したのでまだ使い方などがよく知らなくてポイント制度とか、良回答20ポイント、10ポイント制度もあんまりつける方法がよく分からなかったので次回にちゃんとポイントを送ります。それではまたよろしくお願いします。

zyh_uk
質問者

補足

返事が遅れましてごめんなさい。 丁寧に回答していただきありがとうございます。

  • argument
  • ベストアンサー率63% (21/33)
回答No.2

はじめまして zyh_uk さん せっかくの休日が終わってもうこんな時間です。あぁ一体私は何に時間を使ったと言うのか。 まぁそれは良いでしょう。大切なのは回答する事でしたね。 「日本語でおk」 知り合いに便利なスクリプトができたので送ったときに言われた一言です(きっと中身を見たのでしょう…)。 確かにサンプルソースがあるのでほかの方々(通称丸投げ組み)とは違いソースは書いてあるのはわかりやすいですね。 ですが、読みづらいです。 あなたの会社がどのようなコーディングスタイルかは知りませんがコメントが英語なだけでくらりと来ます。 まぁそれは良いでしょう。見た瞬間すべてコメントは削除したので。 それよりも引数の説明はするべきでしょう。我々回答者は貴方がどのような値を渡したいのか知りません。 引数名がそれっぽい英語であっても回答者のほとんどは日本人なので直感的にわからない。 まぁまぁそれも良しとしましょう。回答者が減る程度の問題です。 さてでは下記を回答とします。 Sub test() ExportWorksheetWithCustomDelimiter "Sheet1", CreateObject("WScript.Shell").SpecialFolders("desktop") & "\test.ABCD", ";" End Sub Public Sub ExportWorksheetWithCustomDelimiter( _ ByVal SourceWorksheet As Variant, _ ByVal FilePath As String, _ ByVal Delimiter As String) ' Exports the source worksheet as a text file with a custom field delimiter. ' ExportWorksheetWithCustomDelimiter(SourceWorksheet, FilePath, Delimiter) ' SourceWorksheet - The name of or a reference to a worksheet. ' FilePath - The full path to the export file. ' Delimiter - One or more characters to use as the field delimiter. Dim DisplayAlerts As Boolean Dim FileNumber As Long Dim FileData As String If VarType(SourceWorksheet) = vbString Then SourceWorksheet = ActiveWorkbook.Sheets(SourceWorksheet).Name ' Create copy of source worksheet in new workbook Sheet1.Copy ' Save copy as tab delimited text file and close DisplayAlerts = Application.DisplayAlerts Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=FilePath, FileFormat:=xlText ActiveWorkbook.Close SaveChanges:=False Application.DisplayAlerts = DisplayAlerts 'きっとあなたの望むであろう至れり尽くせり処理 Set myfso = CreateObject("Scripting.FileSystemObject"): myfso.CreateTextFile(FilePath).write Replace(myfso.OpenTextFile(FilePath).readall, vbTab, Delimiter): Set myfso = Nothing End Sub どうでしょうか?実行してみましたか?貴方の望む;(セミコロン)区切りのデータが引数で渡した拡張子で出力されました。 はい。問題解決ですね。 ん、何ですか?聞きたいことがある?あぁ、私のヴァージョンは2003なので安心してください。 なので2003で動きます。2002でも動くことでしょう。 ん?違う?あぁマソッドではなくメソッドではないかって事ですか?あぁそうですねそうかもしれません。 え?違うのですか?私の読み込み処理、ファイル削除、置換処理はどこいったかって? いや、言われたとおりの処理を書いただけですよ。長いので消して私好みに書き換えましたが…。 どうやらタブ区切りテキストはすでに作成しているのでそれを読み込みつつ置換しつつ書き込んだだけですよ。 追加処理・処理違い・補足等あればいってください。

zyh_uk
質問者

お礼

ご丁寧な回答ありがとうございました。 でも、はじめにこのサイトに質問したのでまだ使い方などがよく知らなくてポイント制度とか、良回答20ポイント、10ポイント制度もあんまりつける方法がよく分からなかったので次回にちゃんとポイントを送ります。それではまたよろしくお願いします。

zyh_uk
質問者

補足

返事が遅くなりましたが回答いただきありがとうございました。 なんとかうまくいきましたので助かりました!

関連するQ&A

  • EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテ

    EXCEL2007のVBAを使って、テキストファイルを読み込んで別のテキストファイルを作って書き込むというコードを書きましたが、新しく出来たテキストファイルの末尾に、もともとのファイルには無かったスペースが追加されてしまいます。 原因と対策を教えて頂きたいです。 ------------------------------------------------------- Dim FileName1 As String Dim FileName2 As String Dim FileNumber1 As Integer Dim FileNumber2 As Integer Dim Data As String FileName1 = Application.GetOpenFilename("Text Files (*.txt), *.txt") FileName2 = Application.GetSaveAsFilename(, "Text Files (*.txt), *.txt") Data = Space(FileLen(FileName1)) FileNumber1 = FreeFile Open FileName1 For Binary As #FileNumber1 Get #FileNumber1, , Data Close #FileNumber1 'この間に"Data"内容を処理するコードを入れる予定 FileNumber2 = FreeFile Open FileName2 For Binary As #FileNumber2 Put #FileNumber2, , Data Close #FileNumber2 ------------------------------------------------------- このコードで1284バイトのテキストを読み込ませると末尾にスペースが追加されて1918バイトになってしまいました。 "Data"の内容を表示させてもスペースはなく、Len関数で大きさを調べても1284バイトです。

  • エクセルVBAでのエラー

    おはようございます。 昨日ここでいろいろ教えていただき、300のエクセルファイルから特定の範囲のデータ抽出方法を書いてみたのですが、セルが多すぎて実行できません、というエラーがでてしまいます。 これはどのように解消すればよろしいのでしょうか? Sub Test() Dim FPath1 As String, FPath2 As String Dim FName As String, myBook As String Const startROW As Long = 14, lastROW As Long = 20 Const startCOL As Long = 8, lastCOL As Long = 10 Const shtNAME As String = "sheet1" Application.ScreenUpdating = False FPath1 = "D:\MR5567\" FPath2 = "D:\New Microsoft Excel Worksheet\" Workbooks.Add myBook = ActiveWorkbook.Name FName = Dir$(FPath1 & "*.xls") Do While FName <> "" Workbooks.Open Filename:=FPath1 & FName ActiveWorkbook.Sheets.Select Sheets(1).Activate Sheets.Copy After:=Workbooks(myBook).Sheets(Sheets.Count) Workbooks(FName).Activate Application.DisplayAlerts = False ActiveWorkbook.Close FName = Dir$ Loop ActiveWorkbook.SaveAs Filename:=FPath2 & "Renketsu.xls", FileFormat:=xlNormal ActiveWorkbook.Close Application.ScreenUpdating = True End Sub

  • VBAでフォルダにあるエクセルファイルを開く

    こんにちは このコードがうまく動かないのですが、 どこがいけないのかわからなく助けてください。 なおフォルダの中には******データ.xlsと言うファイルがあり、アスタリスク部分は日付が不規則に変化して上書きされるのです。 このファイルを開くマクロを作りたいのですが。 うまく行きません。 よろしくおねがいします。 Sub excelopen() ' ' Dim エクセル As String 'エクセル = Dir(ActiveWorkbook.Path & "\*データ.XLS") If エクセル = "" Then Exit Sub エクセル = ActiveWorkbook.Path & "\" & エクセル Workbooks.Open Filename:=エクセル End Sub

  • エクセルVBA【ワークシートのコピー】について

    以下のVBA記述で、とあるエクセルファイルのシートをCSV化しようとしております。記述の場合、すべてのワークシートが対象となっていますが、10個くらいあるWorkSheetの【sheets(8)】のみを対象としたいのですが、どのようにしたら良いのでしょうか? お手数ですがご教授下さい。 Sub test() Dim sh As Worksheet Dim fname As String Application.ScreenUpdating = False For Each sh In ActiveWorkbook.Worksheets fname = "C:\temp\" & sh.Name & ".csv" sh.Copy With ActiveWorkbook .SaveAs Filename:=fname, FileFormat:=xlCSV .Close savechanges:=False End With Next sh Application.ScreenUpdating = True End Sub

  • EXCEL、VBAについて

    ' GLOBAL変数の定義 Dim CurrentDir As String '現在のディレクトリ Dim ThisBook As String '現在のブック名 Dim WorkSheetName1 As String Dim WorkSheetName2 As String Dim ConfigSheetName As String Dim ListSheetName1 As String Dim ListSheetName2 As String Dim ListSheetName3 As String Dim ListSheetName4 As String Dim ListSheetName5 As String Dim ListSheetName6 As String Dim ListSheetName7 As String Dim ErrorFlag As Integer 'エラーフラグ 0:正常 1:エラー Sub 初期設定() CurrentDir = ActiveWorkbook.Path '現在のディレクトリ ThisBook = ActiveWorkbook.Name '現在のブック名 WorkSheetName1 = "work1" WorkSheetName2 = "work2" ConfigSheetName = "設定" ListSheetName1 = "****" ListSheetName2 = "****" ListSheetName3 = "****" ListSheetName4 = "****" ListSheetName5 = "****" ListSheetName6 = "****" ListSheetName7 = "****" Application.DisplayAlerts = False 'EXCELの警告を無視する End Sub Sub CSV取り込み() Dim LoadBook As String '読み込みブック名 Dim DataMaxCol As Integer '読み込みデータ有効最大カラム数 Dim WorkStartRow As Integer 'workシート開始行 Dim WorkEndRow As Integer 'workシート終了行 Dim ListMaxCol As Integer '一覧シート有効最大カラム数 Dim ListStartRow As Integer '一覧シート開始行 '初期設定コール Call 初期設定 'workシートをクリア DataMaxCol = Sheets(ConfigSheetName).Range("F2").Value WorkStartRow = Sheets(ConfigSheetName).Range("F3").Value WorkEndRow = Sheets(ConfigSheetName).Range("F4").Value Sheets(WorkSheetName1).Select Range(Cells(WorkStartRow, 1), Cells(WorkEndRow, DataMaxCol)).ClearContents '受注データファイルを選択しオープン SelectedPath = Application.GetOpenFilename("CSVファイル (*.csv), *.csv") If SelectedPath <> "False" Then Workbooks.Open Filename:=(SelectedPath) Else 'キャンセル時は終了 Exit Sub End If LoadBook = ActiveWorkbook.Name '現在のブック名 '受注データの開始行をチェック I = WorkStartRow '受注データの最終行をチェック Do Until ActiveCell.Value = "" I = I + 1 Cells(I, 1).Select Loop WorkEndRow = I - 1 '受注データをコピー Range(Cells(WorkStartRow, 1), Cells(WorkEndRow, DataMaxCol)).Select Selection.Copy 'workシートへペースト Windows(ThisBook).Activate Sheets(WorkSheetName1).Select Range("A1").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False '受注データファイルをクローズ Windows(LoadBook).Close End Sub このマクロを実行するとインデックスが有効範囲にありませんとなりエラーとなってしまいます。 あと最後のデータファイルをクローズできればOKなのですが・・。 どこがいけないんでしょうか?

  • 【マクロ】エクセル 複数のsheet ファイル分け

    いつもお世話になります。 エクセル2003で、下記記述のマクロにて、 一つのファイルにまとまった3つのsheetを個別の ファイルにするよう、使用してました。 エクセル2013でもこのマクロは利用できるのですが、 xlsでなく、xlsxで作成されてしまうため、 どのようにこのマクロを書き変えると、xlsで実行される ようになりますでしょうか。 この記述以外でも問題ございません。 どうか、どなたかお知恵を拝借できると幸いです。 マクロ----------------------- sub macro1() dim s as worksheet for each s in worksheets s.copy activeworkbook.saveas s.name activeworkbook.close false next end sub --------------------------

  • エクセル マクロの記述(フォルダーの移動、削除)

    現在開いているエクセルのファイルにマクロを記述し、 1 「処理済」というフォルダーに、開いているエクセルファイルを移動して、同じ名前でエクセルを保存する。 2 「CSV」というフォルダーに、開いているエクセルファイルをCSVファイルに変換して名前を「処理.csv」とし保存する。 3 現在開いているエクセルファイルは削除する。 以上の三つの処理をさせようと、以下のようにしましたが、1,2の処理は出来ましたが、3の開いているエクセルファイルが残ってしまいます。 以上三つの処理が一度に出来るマクロの記述を教えて下さい。 よろしくお願いします Sub マクロ() ActiveWorkbook.SaveAs Filename:="C:\処理済\" & ActiveWorkbook.Name ChDir"C:\CSV" ActiveWorkbook.SaveAs Filename:= "C:\CSV\処理.csv" _ , FileFormat:=xlCSV, CreateBackup:=False Application.DisplayAlerts = False If Workbooks.Count = 1 Then Application.Quit Else ActiveWorkbook.Close End If Application.DisplayAlerts = False End Sub

  • エクセルのVBAで指定フォルダにアクセスしてくれません。

    下記のような流れでVBAを作成したところ、xls形式でダイアログを指定する際に指定のフォルダにアクセスしてくれません。記述がおかしいのでしょうか。教えてください。 '**************************************** 'ダイアログ表示(csv形式) Dim MyFileA As String MyFileA = "c:\test\bonaplus" & Format(Date, "yyyymmdd") Sheets("test").Copy Application.DisplayAlerts = False 'arg2:=6(csvファイル形式) Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=6 ActiveWindow.Close Application.DisplayAlerts = True 'ダイアログ表示(xls形式) Sheets("data").Select Range("A1").Select Dim MyFileB As String MyFileB = "c:\test\bonaplus" & Format(Date, "yyyymmdd") Application.DisplayAlerts = False 'arg2:=1(xlsファイル形式) Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileB, arg2:=1 'ActiveWindow.Close Sheets("data").Select Range("A1").Select MsgBox "c:\testにファイルが作成されました。" ThisWorkbook.Close Application.DisplayAlerts = True '**************************************** *************マクロの説明始***************** 指定フォルダにcsv形式でダイアログを表示させる 指定フォルダにxls形式でダイアログを表示させる エクセルを閉じる *************マクロの説明終*****************

  • エクセルVBAで配列ができなかった時の処理

    エクセルでコマンドラインでデータを配列に 落としていますがデータがなかった時 配列もできていないようなのですがその時の書式がわかりません。 Dim cmd As String Dim filedata() As String Dim i As Integer cmd = dosのコマンド Set Result = WSH.exec("%ComSpec% /c " & cmd) Do While Result.Status = 0 DoEvents Loop filedata = Split(Result.StdOut.ReadAll, vbLf) '配列データができなかった時の処理 例えば  IF filedata(0)=""  IF filedata=""  IF filedate IS Nothing など いづれもエラーになります。 なにか書式ありますでしょうか

  • エクセルから外部テキストの置換をしたいです

    お時間があるかた、どうぞご教授下さい>< ================================ Dim FT As String Open "C:\1.txt" For Input As #1 Open "C:\2.txt" For Output As #2 Do While Not EOF(1) Line Input #1, FT FT = Replace(FT, ">", "\n") Print #2, FT Loop Close #1 Close #2 ================================ というマクロをエクセルで書いたのですが、テキスト上では>が\nに変換されているだけです。 テキストのほうで、ある文字(今回は>)を『改行』するにはどうしたらいいのでしょうか? エクセルのマクロから出来るようにしたいのです。 よろしくお願い致します。

専門家に質問してみよう