• ベストアンサー

Excel VBAでテキストを開く際の表示形式

恐れ入りますが、ご存知の方、ご教授願います。 Excel VBAにてテキストファイルを開く際に、表示形式を"標準"ではなく"文字列"で取り込もうと思います。 "文字列"にするにはVBAで下記のように記述します。 ------------------------------------------------------------------ Workbooks.OpenText Filename:= _ sFileName _ , Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _ Comma:=False, Space:=False, Other:=False, FieldInfo:=Array( Array(1, 2), Array(2, 2), Array(3, 2)) , TrailingMinusNumbers:=True ------------------------------------------------------------------ FieldInfo:=部分に列数だけArray(x, 2)を指定しますが、一括で"文字列"指定することは可能でしょうか。 恐れ入ります。ご教授願います。

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

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

>一括で"文字列"指定 Loop回すので『一括』とはちょっと違うかもしれませんが : Dim arg(1 To 256) Dim i As Long For i = 1 To 256   arg(i) = Array(i, 2) Next Workbooks.OpenText Filename:=sFileName, _           StartRow:=1, _           DataType:=xlDelimited, _           TextQualifier:=xlDoubleQuote, _           Tab:=True, _           FieldInfo:=arg : こんな感じで可能です。 後は参考ですが、OpenTextメソッドでtextファイルを開くのではなく、 xlsシートにtextデータを取り込む場合は Sub try()   Dim arg(1 To 256)   Dim i As Long   For i = 1 To 256     arg(i) = 2   Next   With Workbooks.Add(xlWBATWorksheet)     With .ActiveSheet.QueryTables.Add(Connection:="TEXT;" & sFileName, _                      Destination:=Range("A1"))       .AdjustColumnWidth = False       .TextFilePlatform = xlWindows       .TextFileTabDelimiter = True       .TextFileColumnDataTypes = arg       .Refresh BackgroundQuery:=False       .Parent.Names(.Name).Delete       .Delete     End With   End With End Sub こんな感じで。

ultgoo
質問者

お礼

end-u 様 アドバイス有難うございます。 ご教授いただいた前半の方法でとりあえず行いました。 後半の方法も色々改造して使用させて頂こうと思います。 しばらく多忙で、なかなかアドバイスを実行することが出来ず、お礼が遅くなり申し訳ございませんでした。 大変ありがとうございました。

その他の回答 (1)

  • pulsa
  • ベストアンサー率57% (34/59)
回答No.2

すでに、すばらしい回答がでているので、別アプローチを しかも方法のみですが、ファイルを一括して変数に取り込み シート全体の書式を文字に設定 書式を設定したシートに一気に書き出す と言うやり方もあります http://officetanaka.net/excel/vba/file/file08.htm 一番下

ultgoo
質問者

お礼

pulsa 様 アドバイス有難うございます。 ご教授いただきましたサイトを参考にさせて頂きます。 業務が多忙でしばらくお礼を申し上げることができずに遅くなりました。 今後ともよろしくお願いします。

関連するQ&A

  • エクセル VBA

    エクセルで指定したフォルダから シート1のA1セルに記入された名前のテキストファイルを 開くマクロを作りました 変数filepassがセルA1に記入されたファイルのパスのとして Workbooks.OpenText filename:=filepass, StartRow:=1 _ , DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _ , Space:=False, Other:=False, FieldInfo:=Array(1, 1) しかし このままだと指定したフォルダ(filepass)にファイルがなかったとき エラーになります もしファイルがなかったときに 何かメッセージを表示させたいのですが どのようにすればよいのでしょうか どなたか 教えてください VBAは素人です よろしくお願いします

  • 【Excel2013】特定のセルを指定したくない

    下記マクロはD8:D80までのセルに入力されている文字を「文字列」にするマクロです。 Range("D8:D80").Select Selection.TextToColumns Destination:=Range("D8"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 2), TrailingMinusNumbers:=True Range("D8").Select End Sub 同じ作業を他のセルでも実行することが多々あるため、文字列にしたいセルを選択した状態でマクロを実行したいのです。 どのように設定すればよろしいのでしょうか?

  • オブジェクト変数の取得について

    以下のようにOpenTextでファイルを開いてそれをオブジェクト変数に取得したいのですが 「Functionまたは変数が必要です」というエラーになります。 どなたかご教示ねがえませんでしょうか? よろしくお願いいたします。 Set WorkBookObject =Workbooks.OpenText FileName:=strPath & strTxt, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, FieldInfo:=aryCell

  • エクセルで選択してるセルに決まった動作をマクロに

    いつもお世話になっております。 手動で選択したセルに対して決まった動作をさせたいのですが、マクロの記録では最初に選択したセル番地で動くことになるので困っています。 やりたいことは、例えばA列の5~6行目を選択して、そのセルの内容を文字区切りで横に展開したいのです。 これをマクロの記録では Sub Macro1() Range("A5:A7").Select Selection.TextToColumns Destination:=Range("A5"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _ :="\", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, _ 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1)), TrailingMinusNumbers:=True End Sub となるのですが、この最初の行のRange("A5:A7”)Selectをその時に選んだセルで下のコードが実行されるようにしたいのですが。

  • エクセル マクロ 教えてください

    お世話になります エクセルのマクロ記録を使った結果が下記のようになりました。 そこで、ファイルは自分で選択して開きたいと思い 色々調べた結果 Application.GetOpenFilenameを使用すればよい事がわかりましたが、どの部分を変更すればよいのかわかりません やりたいことは、txtファイルの中身の不要な部分を削除して必要な部分だけを取り出したいのです。 どうぞ、よろしくお願いします。 Sub Macro1() ' ChDir "C:\Documents and Settings\My Documents\next\aaa" Workbooks.OpenText Filename:= _ "C:\Documents and Settings\My Documents\next\aaa\aaa.txt" _ , Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _ xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _ Comma:=False, Space:=True, Other:=True, OtherChar:="(", FieldInfo:= _ Array(Array(1, 9), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 9), Array(7 _ , 9)), TrailingMinusNumbers:=True Cells.Select Cells.EntireColumn.AutoFit End Sub

  • テキストファイルを開く際のFor文の使い方

    質問です。あるフォルダに入っているテキスト形式のデータ10個をエクセルで開いていくVBAのプログロムを書いているのですが、エラー文で「i.txtがありません」と表示されます。私の書いたプログラムは下記です。 Sub テスト() テスト Macro Dim i As Integer For i = 0 To 5 ChDir "C:\Documents and Settings\データ" Workbooks.OpenText Filename:= _ "C:\Documents and Settings\データ\i.txt" _ , 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 Next i End Sub このプログラムの目的は、テキストデータの入っているフォルダを他の名前に変更したときも、その中に入っているテキストデータ10個をエクセルで展開するためです。おそらく"C:\Documents and Settings\データ\i.txt"のiの部分が間違えていると思うのですが、どうすればいいでしょうか?よろしくお願いします。

  • テキストファイルを開く際のFor文の使い方

    質問です。あるフォルダに入っているテキスト形式のデータ10個をエクセルで開いていくVBAのプログロムを書いているのですが、エラー文で「データ_i.txtがありません」と表示されます。私の書いたプログラムは下記です。 Sub テスト() テスト Macro Dim i As Integer For i = 0 To 5 ChDir "C:\Documents and Settings\データ" Workbooks.OpenText Filename:= _ "C:\Documents and Settings\データ\_i.txt" _ , 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 Next i End Sub このプログラムの目的は、テキストデータの入っているフォルダを他の名前に変更したときも、その中に入っているテキストデータ10個をエクセルで展開するためです。おそらく"C:\Documents and Settings\データ\_i.txt"のiの部分が間違えていると思うのですが、どうすればいいでしょうか?よろしくお願いします。

  • Excel2010 VBAでテキストファイル読込

     初めて質問させていただきます。  Excel2010のVBAで下記のようなマクロを組み、テキストファイルを読込したところ、データの一部が誤変換されてしまいます。  誤変換内容  11/12/29 →2029/11/12  マクロを使用せず、Excelから直接テキストファイルウィサードを使って読み込んだ場合には、正しく「2011/12/29」となります。  (お恥ずかしい話ですが、Excelシートのセルに直接「11/12/29」と打ち込むと自動的に「2011/12/29」に変換されることを今回初めて知りました。)  同一項目には「11/12/29」形式と「20111229」形式が混在しており、「11/12/29は2011/12/29」、「20111229はそのまま」セルに格納するよう依頼されています。  従って、Array(1, 2)で文字列やArray(1, 5)でYMD形式の日付へ同一項目のデータを固定することはできなくなっております。  テキストデータは「カンマ区切り」の35項目です。  データはネットワーク内の他のPCドライブに保存されています。  因みに「 Workbooks.OpenText Filename:=」以下は、Excelのマクロ記録で取得したものです。  お忙しいところ恐縮ですが、よろしくお願いいたします。 【作成したマクロ】 Sub 読込() With CreateObject("WScript.Shell") .currentdirectory = "\\コンピューター名\c\フォルダ名\" End With Const cnsTITLE = "テキストファイル読み込み処理" Const cnsFILTER = "全てのファイル (*.*),*.*" Set xlAPP = Application xlAPP.StatusBar = "読み込むファイル名を指定して下さい。" strFILENAME = xlAPP.GetOpenFilename(FileFilter:=cnsFILTER, _ Title:=cnsTITLE) If StrConv(strFILENAME, vbUpperCase) = "FALSE" Then Exit Sub Workbooks.OpenText Filename:=strFILENAME, Origin:=932, _ StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, Comma:=True _ , Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _ Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _ Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1), Array( _ 16, 1), Array(17, 1), Array(18, 1), Array(19, 1), Array(20, 1), Array(21, 1), Array(22, 1), _ Array(23, 1), Array(24, 1), Array(25, 1), Array(26, 1), Array(27, 1), Array(28, 1), Array( _ 29, 1), Array(30, 1), Array(31, 1), Array(32, 1), Array(33, 1), Array(34, 1), Array(35, 1)) _ , TrailingMinusNumbers:=True End Sub

  • ExcelのOpenTextで作ったシートのコピー

    Excel2010のVBAでテキストファイルを読み込むと新しいブックに読み込まれるので、新しいブックのシートをVBAのコードがあるブックにコピーしたいのですが CSVファイル読み込み時に使う Workbooks.Open の場合には  Dim wb As Workbook  Set wb = Workbooks.Open(Filename:="C:\test\test1.csv")  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False のような感じでコピーすることができたのですが テキストファイル読み込み時に使う Workbooks.OpenText の場合には  Dim wb As Workbook  Set wb = Workbooks.OpenText Filename:= _    "C:\test\test1.txt", _    Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _    xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False _    , Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 2), _    Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2), Array(6, 2), Array(7, 2), Array(8, 2), _    Array(9, 2)), TrailingMinusNumbers:=True  wb.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Sheet1").Range("A1")  wb.Close False とすると、OpenTextの箇所で「Workbooks.OpenText Functionまたは変数が必要です」というコンパイルエラーが発生します。Set wb = Workbooks.OpenText (Filename:=・・・・True)のように括弧でくくっても同様のエラーがでてしまいます。 Microsoft Office 14.0 Object Libratyの参照設定はチェックされています。 Workbooks.OpenText Filename:= _・・・=Trueの部分はマクロの記録の機能で生成したコードです。 このような場合、どのように記述すればよいのでしょうか。 よろしくお願いします。

  • VBA 文字を指定文字で区切り、セルを分けたい。

    WINは7、Excelは2013を使用しています。 「A、B」や「A・B」を、「、」や「・」のところで区切り、セルを分けたいと思っています。 下記、マクロの記録で作ったものを、アレンジしているのですが、 OtherChar:="、" のところで、「・」を追加できなくて、つまづいてしまっています。 修正点をご教示頂けます様お願い致します。 ------------- Sub 区切り() Dim i As Integer Dim j As Integer Dim maxrow As Integer j = InputBox("「行」を数字で入力 " & vbCr & vbCr & "【例】A列=1、B列=2...Z列=26", _ "「行」を半角数字で入力して下さい。") maxrow = Cells(Rows.Count, j).End(xlUp).Row For i = 2 To maxrow Cells(i, j).Select If Cells(i, j) <> "" Then Application.CutCopyMode = False Selection.TextToColumns Destination:=ActiveCell, _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=True, _ Tab:=True, _ Semicolon:=True, _ Comma:=True, _ Space:=True, _ Other:=True, _ OtherChar:="、", _ FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _ TrailingMinusNumbers:=True end if Next i End Sub