VBAでテキストファイルの内容をセルに反映させる方法

このQ&Aのポイント
  • VBAを使用して作成した関数の返り値をセル内で改行する方法について教えてください。
  • 17行目にvblfを追加して改行を入れていますが、セルには正しく反映されません。
  • 関数を使用してテキストファイルの中身を読み込み、2行以上の場合に改行を入れたいです。対処法を教えてください。
回答を見る
  • ベストアンサー

VBAにより作成した関数の返り値をセル内で改行したいのですが、どうした

VBAにより作成した関数の返り値をセル内で改行したいのですが、どうしたら良いのでしょうか? Private Function txtdate(filepass As String) Dim fileNo As Integer Dim count As Integer Dim outline As String Dim buf fileNo = FreeFile Open filepass & ".txt" For Input As #fileNo ' Do Until EOF(fileNo) Line Input #fileNo, buf If count = 0 Then outline = outline & buf MsgBox outline Else outline = outline & vbLf & buf MsgBox outline End If count = count + 1 Loop Close #fileNo txtdate = outline End Function このような形でテキストファイルの中身を読み込んでセルに反映させるという事をおこないたいのですが、テキストの内容が2行以上の場合、帰ってくる値に改行を入れたいと思っております。 17行目にそれらしくvblfを追加したのですがセルに上手く反映されません。msgboxで確認したところmsgboxでは問題無く改行が反映されているようなのですが… エクセルセル内で「=txtdate("適当なテキストファイルのパス名")」という形で関数を呼び出しています。 どなたか対処法教えていただければ幸いです。よろしくお願い致します。

  • neg69
  • お礼率34% (17/49)

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

  • ベストアンサー
回答No.2

見かけは改行されていませんが、データとしては改行がされているはずです。 → msgbox(ActiveCell) これで改行されていないように見えるセルの内容を確認して見ましょう。 なぜ改行されないかは、セルが改行表示を、初期セルは行わないようになっているからです。 セルのプロパティで改行表示を設定しましょう。

neg69
質問者

お礼

解決できました! ありがとうございます。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Function abc(a As String) As String abc = "ABC" & vbCrLf & a End Function   vbCrLf なのでは?

neg69
質問者

お礼

回答ありがとうございます。 vbCrLf でも同様の結果になってしまいました。 ちなみにn-jun様記載の関数を「=abc("test")」という形で回してみてもセル内の表示結果は「ABCtest」となってしまいます。

関連するQ&A

  • VBA セル内改行禁止

    H列の全てのセルで、セル内改行(Alt+Enter)したら、 "セル内改行禁止"というメッセージボックスを表示させたいのですが、 どのような構文になりますか。 Dim inputdata As Integer On Error GoTo MSG inputdata = Worksheets("sheet1").Column("H:H") if inputdata ここまで書いてみたのですが、全然自信がありません。 ご存知の方、ご教授お願い致します。

  • VBAで改行削除

    A列でセル内改行(Alt+Enter)をするとメッセージボックスが出るようにしましたが、 且つ、改行以降を削除したいのですが どうすればよろしいでしょうか? <例> あ か ↓ あ  "か"と、改行を削除したい。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Value Like "*" & vbLf & "*" And Target.Column =1 Then MsgBox "改行禁止", vbOKOnly + vbCritical End If End Sub 宜しくお願い致します。

  • エクセルに二つのテキストファイルをインポートしたい

    エクセルのsheet1の1行目にタイトルがあります。 ボタンのクリックイベントで、テキストファイル2つをインポートしたいのですが。 ・テキストファイルの名前は、固定ではありません ・テキストファイルの保存先は、デスクトップで、ファイルの選択は自分でしたい ・テキストファイルの一行目は、タイトル行なので、二行目以降をインポートしたい 行数は固定ではありません ・タブ区切りです 複数選択はできなく、1ファイルでタイトル行も含めるのであれば下記コードできたのですが。 どなたか、ご教示いただけますでしょうか・・・・ よろしくお願いいたします。 ----------------------------------------------------- Sub ReadTextFile() 'タブ区切りファイルを全て文字列として読み込む Dim FileName As String Dim i As Long Dim Cnt As Long Dim Buf As Variant Dim FileNo As Integer Dim SplitString As Variant 'ファイルダイアログを表示 FileName = Application.GetOpenFilename("テキストファイル,*.txt") If FileName <> "False" Then '全セル選択して書式を文字列にセットする Cells.Select Selection.NumberFormatLocal = "@" Cells(1, 6).Select '空いているファイル番号を取得 FileNo = FreeFile() Buf = Space(FileLen(FileName)) 'ファイルを開いてbufに1行読み込み ' → タブで配列に分割 ' → セルに書き出し Open FileName For Input As #FileNo Do Until EOF(FileNo) Line Input #FileNo, Buf Cnt = Cnt + 1 SplitString = Split(Buf, vbTab) For i = 0 To UBound(SplitString) Cells(Cnt, i + 1) = SplitString(i) Next i Loop Close #FileNo Else End If End Sub -----------------------------------------------------

  • セルの値でなくセルの関数を参照したい

    次のコードでセルI13の値を入力できましたが、 '---------------------- 'Dim i As Integer 'For i = 2 To Worksheets.Count - 6 'With Worksheets(i) '.Range("I13") = Worksheets(1).Range("I13").Value 'End With 'Next セルの値でなく関数を入力しようとして次のコードに修正したらエラーになりました。どこがいけないのでしょうか。 Dim i As Integer For i = 2 To Worksheets.Count - 6 With Worksheets(i) .Range("I13").Formula = "=" & Worksheets(1).Name & "!I13" End With Next

  • 【VB.Net】バイト型配列に読み込んで改行区切り

    教えて下さい。 ファイルをバイト型配列に読み込んで、ある固定長に区切(改行)って出力したいです。 以下簡単にサンプルとして作っているのが以下です。 【読み込みファイル.txt】 ---------------------------------------------------------------------------------- AB ---------------------------------------------------------------------------------- このテキストファイルの内容(byte型では、"41 42")を1バイトづつに改行で区切りたいです。 【VB.Net】 ---------------------------------------------------------------------------------- Dim BUFSIZE As Integer = 1 ' 1バイトづつ処理 Dim buf(BUFSIZE) As Byte ' 読み込み用バッファ Dim readSize As Integer ' Readメソッドで読み込んだバイト数 Dim srcName As String = "C:\Temp\読み込みファイル.txt" ' 読み込みファイル名 Dim dstName As String = "C:\Temp\書き込みファイル.txt" ' 書き込みファイル名 Using src As New FileStream(srcName, FileMode.Open, FileAccess.Read) Using dest As New FileStream(dstName, FileMode.Create, FileAccess.Write) While True ' 1バイト読み込み readSize = src.Read(buf, 0, BUFSIZE) ' 読み込むものが無ければ終了 If readSize = 0 Then Exit While ' 改行いれたい部分(動かないけど、、、) buf = (0D,0A) ' 書き込み dest.Write(buf, 0, BUFSIZE) End While End Using End Using ---------------------------------------------------------------------------------- ↓ 理想の処理後 【書き込みファイル.txt】 ---------------------------------------------------------------------------------- A B ---------------------------------------------------------------------------------- 重要なのはバイト型で処理を行いたいです。(文字列ではない) すいませんがよろしくお願いします。

  • EXCELのVBAでファイル出力する際にダブルクオテーションを省きたい

    はじめまして。 EXCEL2003のVBAで、セルの内容をテキストファイルに出力するマクロを組んでいます。出力はできますが、出力された文字列がダブルクオテーションで囲まれてしまいます。 どのようにしたらダブルクオテーションを省けるか教えて下さい。 処理内容:AA列を6行目から値の入っていないセルまでファイルに出力します。 ------------------------------------------------------ Private Sub OutputFile_Click() Const sDataCol As String = "AA" 'データ列 Const iDataStartRow As Integer = 6 'データ開始行 Dim iFileNo As Integer Dim sRecord As String Dim iRecCnt As Integer Dim iCounter As Integer Dim sFileName As String sFileName = CurDir & "\" & "Sample.txt" iFileNo = FreeFile Open sFileName For Append As #iFileNo iCounter = iDataStartRow Do sRecord = Range(sDataCol & iCounter).Value Write #iFileNo, sRecord iRecCnt = iRecCnt + 1 iCounter = iCounter + 1 Loop Until Range(sDataCol & iCounter).Value = "" Close #fileNo MsgBox sFileName & vbCr & _ "レコード件数=" & iRecCnt & "件", vbInformation, "ファイル出力完了" End Sub ------------------------------------------------------ セルAA6(セル書式:標準)に、abcd と入っていると、 "abcd" と出力されてしまいます。 abcd のようにダブルクオテーションを省きたいのです。 よろしくお願いします。

  • VBA 特定の色がついたセルを数える…

    VBA初心者です。 特定の色がついているセルを数えるプログラムが組めなくて困っています。 たとえば Dim a as Integer a=Range(Cell(1,1),Cell(1,12))の間にあるセルが緑色の個数 このようにしたいのです。 できるだけFor文など一つ一つカウントしていくようなプログラムは避けたいです。 Countプロパティが鍵かなとは思ったのですが、思うように組めません。 なにかいい構文などはないでしょうか?

  • VBA)範囲指定した全セルに関数を入れたいのですが。。。

    当方、始めてのマクロ作成に奮闘中の身です。 ご教授いただきたく、質問させていただきます。 ◎質問 範囲指定した全セルに関数を入力したいのですが、アクティブセルのみにしか関数が入らず困っています。    Dim abc As Integer       abc = Sheets("シート名").Range("A1").CurrentRegion.Rows.Count    Range(Cells(2, 12), Cells(abc, 12)).Select    ActiveCell.FormulaR1C1 = "=COUNTIF(R1C1:RC[-11],RC[-11])" 一番下の部分の関数を入力したいのですが、アクティブセルのみの入力になってしまい、下から2番目の指定範囲には反映されません。 下から2番目の指定範囲セル全てに適用するにはどうしたら良いでしょうか。 よろしくお願いいたします。

  • マクロで塗りつぶしセルのカウント

    マクロ初心者です。アドバイスをお願いします。以下のマクロですとB列の100行目までの塗りつぶしのセルのカウントは出来るのですが、シート上の全てをカウントしたいのです。1TO 100の100の部分をどう変更したら良いのか教えてください。 Sub セルの色数1() Dim I As Integer Dim Count As Integer Count = 0 For I = 1 To 100 If Cells(I, 2).Interior.ColorIndex <> xlNone Then Count = Count + 1 Next I Range("C1").Value = Count End Sub

  • VBAでテキストファイルの改行を無視する方法

    VBAでテキストファイルにある文字列を配列の変数に格納したいのですが、改行が含まれているとそこから2バイトずつずれてしまいます。 1行毎に読もうとしても1行の文字列が6000バイトぐらいあるので変数に格納しきれません。 読み込むテキストファイルは _________0_________1_________2・・・・________10 _______100________51 のようになっており、10バイトずつ変数に格納していきたいです(スペースも格納する必要あり) 以下のように作ったのですが、改行のあるところからずれてしまいます。 Sub ファイル読み込み() Dim buf(30000000) As String Dim i As Long i = 0 With CreateObject("Scripting.FileSystemObject") With .OpenTextFile("C:\test.text", 1) Do While .AtEndOfStream <> True buf(i) = .read(10) Loop End With End With End Sub 「次の文字列が改行コードである」ということが分かれば.skipで飛ばせるのですが、その判定式が探しても見つかりません。 どなたかご教授よろしくお願いします。

専門家に質問してみよう