VBAで2変数の差分を取る方法 その2

このQ&Aのポイント
  • VBAで2変数の差分をシートに入れる方法がわからない
  • fumufumuさんの変数bufをシートに一行ずつ入れる方法を教えてください
  • Splitを使って試したが上手くいかなかった
回答を見る
  • ベストアンサー

VBAで2変数の差分を取る方法  その2

前回はありがとうございました。 まだ最終までは行ってないのですが、Wendyさんfumufumuさんに教えていただいたマクロともうまく動きます。 fumufumuさんの変数bufなんですが、この中身をシートに一行ずつ入れるにはどうするのでしょう。 Msgboxでは行ごとに綺麗に表示されす。 OpenAsTextStreamで開きReadAllで読み込んだbufの中身は配列になっているのでしょうか。 Splitで色々やってみたんですが、旨くいかいなです。 ---------------------------------------------------- Set fso = CreateObject("Scripting.FileSystemObject") With fso.GetFile(TXT).OpenAsTextStream .Skip size buf = .ReadAll .Close End With Set fso = Nothing MsgBox buf ------------------------------------------------------ fumufumuさんのDim fso As New FileSystemObjectでは動かなかったので Set fsoにするなど一部変えてあります。

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

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

>OpenAsTextStreamで開きReadAllで読み込んだbufの中身は配列になっているのでしょうか。 bufは文字列です。(Dim buf As String で宣言してます) >Splitで色々やってみたんですが、旨くいかいなです。 Split(buf, vbCrLf)または、Split(buf, Chr(13) & Chr(10)) で文字列配列にできます。 Windowsのテキスト文章は、CR+LFで改行されます。 MacやLinux(UNIX)では違ったりします。 >この中身をシートに一行ずつ入れるにはどうするのでしょう。 Dim d() As String Dim i As Integer d = Split(buf, vbCrLf) 'bufを改行を区切り文字にして、配列へ For i = 0 To UBound(d) Sheet1.Cells(i + 1, 1) = d(i) '配列は0からで、セルは1から Next '列方向限定ですが、以下の方法もあります Sheet1.Range(Sheet1.Cells(1, 1), Sheet1.Cells(1, UBound(d) + 1)) = d >Dim fso As New FileSystemObjectでは動かなかったので VBAの画面で、[ツール]→[参照設定]で Microsoft Scripting Runtime の参照にチェックを入れて下さい。 CreateObject("Scripting.FileSystemObject")でもいいのですが、後が楽になります。 ちなみに、VBEの入力支援機能は知ってますか? dim i as inと入力した後に、[Ctrl]+[スペース]で候補が出るとか、cellsの後に.(ドット)を押すと候補が出る機能です。 Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") では、入力画面ではどんなオブジェクトか分からず、入力支援機能は働きません。 Dim fso As New FileSystemObject と宣言した後の行で、fsoの後に.(ドット)を押すと、入力支援機能が働きます。 特に覚えていない候補が出ると楽です。

stentemp
質問者

お礼

fumufumuさん、たびたびすみません。 改行コードvbCrLfですね。有り難うございます。 Scripting Runtimeにしてなかったです。 >と宣言した後の行で、fsoの後に.(ドット)を押すと、入力支援機能が働きます。 >特に覚えていない候補が出ると楽です。 そういう違いが出るんですか。 いつも一覧が出たり出なかったりするんですよね。 ありがとうございました。

関連するQ&A

  • ExcelVBAマクロについて確認させてください。

    ExcelVBAマクロについて確認させてください。 テキストファイル内の全ての文字を読み込むプログラムですが、テキストファイルがUTF-8形式の場合は文字化けしてしまいます。 UTF-8形式の場合でも読み込める方法はありますでしょうか。 お手数おかけしますが、よろしくお願いします。 Sub test() Dim FSO As Object, buf As String Set FSO = CreateObject("Scripting.FileSystemObject") ''C:\Work\Sample.txtの全ての文字を読み込んで表示します With FSO.GetFile("C:\Work\Sample.txt").OpenAsTextStream buf = .ReadAll MsgBox buf .Close End With Set FSO = Nothing End Sub

  • テキストファイルに一行文字を追加したい

    バッチ処理でテキストファイルの最後に文字列を追加する作業をやりたいのです。 普通の文字列ですと、1)のようにして上手くいきます。 ところが「"」の入った文字列を一行加えようと2)のようにすると、エラーになってしまいます。どうしたら前に進めるでしょうか? --------- 1)上手くいくケース ----------- Set fso = CreateObject("Scripting.FileSystemObject") Set tmpFile = fso.GetFile("C:\test\hoge.txt") Set f = tmpFile.OpenAsTextStream(8, -2) f.Write("一行追加しました") f.close Set f = Nothing Set tmpFile = Nothing Set fso = Nothing --------- 2)上手くいかないケース ----------- Set fso = CreateObject("Scripting.FileSystemObject") Set tmpFile = fso.GetFile("C:\test\hoge.txt") Set f = tmpFile.OpenAsTextStream(8, -2) f.Write("一行"追加"しました") f.close Set f = Nothing Set tmpFile = Nothing Set fso = Nothing

  • ファイルシステムオブジェクトのメソッドについて

    こんにちは、皆さん。 以下のプログラムでコピーしようとしたら、 オブジェクトがメソッド、プロパティをサポートしてないという メッセージが表示されてしまいました。 Set fso = CreateObject("Scripting.FileSystemObject") fso.CopyFile "c:\aaa.txt", "c:\temp\" Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.GetFile("c:\aaa.txt") fso.Copy "c:\temp\" こういった場合、どんなメソッドがあるか確認するには どうしたらよいでしょうか? また、ファイルをコピーするにはどうしたらよいでしょうか? よろしくお願いします。

  • ExcelVBAマクロでワードファイル読み込み方法

    ExcelVBAマクロについて確認させてください。 下記のように読み込みたいファイルをフォームで指定して それを変数aに読み込ませています。 ですが、この方法ではテキスト文書しか読み込みが出来ないようです。 ワードファイルも読み込むように設定したいのですが可能でしょうか? 可能でしたらその方法をご教授いただけますでしょうか。 ---------------------------------- Sub sample() Dim buf As String Dim a As String buf = Application.GetOpenFilename(FileFilter:="テキスト文書,*.txt", Title:="サンプル") 'フルパスも含めたファイル名をbufに代入 With CreateObject("Scripting.FileSystemObject").GetFile(buf).OpenAsTextStream '指定したファイルを開く a = .ReadAll 'テキスト文書の内容を文字列aに代入 .Close '指定したファイルを閉じる End With End Sub

  • エクセルVBA 文字化けします。

    初心者ですみません、ネットで調べたコードなのですが、 読み込みたいHTMLファイルがUTF-8です。 文字化けしてしますのですが、どうしたらよいでしょうか? Option Explicit Sub sample2() Dim f As Variant Dim lines() As String Dim c As Integer Cells.Clear c = 1 f = Dir("C:\実験\*.html") Do While f <> "" With CreateObject("Scripting.FileSystemObject").GetFile("C:\実験\" & f).OpenAsTextStream lines = Split(.ReadAll, vbCrLf) .Close End With Cells(1, c).Resize(UBound(lines) + 1, 1).Value = WorksheetFunction.Transpose(lines) f = Dir c = c + 1 Loop End Sub どこかに With CreateObject("ADODB.Stream") End With を入れたらいいのでしょうか?

  • エクセルVBAがエラーが出て作動しません。

    以下のVBAコードを作成してみました。ところが、"Sub Sample1()"の部分が黄色く塗りつぶされ、"get folder"が選択された状態で”Subまたはfunctionが定義されていません”というエラーがでます。こちらですがどこを直せばうまくいくかご教示いただけないでしょうか?因みにファイルを探すコードを試している過程でたまたまネットでコードを見つけたので試ている段階です。 ーーーーーーーーーーーーーーーーーーーー Sub Sample1() Dim f As Variant, buf As String, cnt As Long, FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") With Application.FileSearch .NewSearch buf = InputBox("ZGBL_DLV_SOM_RP0442_SLS_ORD (39).xlsx") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf buf = GetFolder("C:\Users\ytsuruok\Desktop\test") If buf = "" Then Exit Sub .LookIn = buf .SearchSubFolders = True ''サブフォルダも検索する If .Execute() > 0 Then For Each f In .FoundFiles cnt = cnt + 1 Cells(cnt, 1) = f ''パス+ファイル名 Cells(cnt, 2) = FSO.GetFile(f).Name ''ファイル名 Cells(cnt, 3) = FSO.GetFile(f).ParentFolder ''パス Next f Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing End Sub ーーーーーーーーーーーーーーーー

  • VBAでtxtを読み込みxlsで保存したい

    C:\Documents and Settings\All Users\デスクトップ\sample.txt は次のようなデータになっています。 A B C 1,234 567,890 23,333 1,234 567,890 23,333 このデータをVBAを使ってExcelに読み込み、C:\Documents and Settings\All Users\デスクトップ\sample.xls として保存にしたいのですが、どのようなコードを書けばよいものでしょうか? sub test() Dim fso, f, ts Dim sline As String Set fso = CreateObject("scripting.filesystemobject") Set f = fso.getfile("C:\Documents and Settings\All Users\デスクトップ\sample.txt") Set ts = f.openastextstream(1) Do While ts.atendofstream <> True sline = sline & ts.readline & vbCrLf Loop ts.Close ' MsgBox sline End Sub ここまでいったのですが、slineをexcelにだすことができません。 教えていただけると助かります・。

  • FileSystemObjectについて

    御観覧有難うございます。 基礎FSOなんですが、スパテクという本を買って、一から順に excelを学んでいるのですが、本の通りにやっても、 記述ミスになってしまうので、お聞きしたいんですけども、 記入して、ミスになるのは、 Dim fso, f Set fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFile(ThisWorkbook.Path & "\" & ThisWorkbook.Name) MsgBox "最終更新日時=" & f.DateLastModified という文法の、Set f = fso.GetFile(ThisWorkbook.Path & "\" & ThisWorkbook.Name)の部分で¥マークの部分があやしい感じですが、 文法自体が記述ミスだそうで… excel2007なんですが、対応していて、本の通りにやって、 出来ない場合ってあるんでしょうか… ご回答よろしくお願いします。

  • ファイル結合について

    .vbsを使用して複数のテキストファイルを1つのテキストファイルに結合したいと思っております。 条件として対象ファイルが0KB及びない場合には追記しない。 結合部分に関しては下記で追記することができたのですが 条件部分に関してはFilelen?を使用するとファイルサイズを取得できるみたいなのですが 実際の記述がわかりませんでした。 ご教授頂けると助かります。 ■追記部分 Set logFile = fso.GetFile(logFile) Set f = logFile.OpenAsTextStream(8, -2) Set objFS = CreateObject("Scripting.FileSystemObject") Set objText = objFS.OpenTextFile(srcFile) myText = objText.ReadAll 'ExecDateTime = Now f.Write(myText & vbNewLine) f.close '解放 Set f = Nothing Set logFile = Nothing Set fso = Nothing

  • macのofficeのVBAでファイルを検索する

    現在iMac 1.9GHz(isight内蔵) PowerPC G5 でoffice 2004 for macを使用しています。 以下のような複数のフォルダを含む任意のフォルダ(AA)内から任意のファイル名(aa or dd)のファイルが存在するかどうかを検索し、 ファイルが存在すればファイル名を、無ければ無いことを返すプログラムを作成しようと考えています。 AA---BB---aa.xls | --CC---bb.xls | | | --cc.xls ---------dd.xls そのために以下のプログラムを用意しました。(他のサイトのマル写しですが) ーーーーー Sub Sample() Dim f, buf As String, cnt As Long, FSO Set FSO = CreateObject("Scripting.FileSystemObject") With Application.FileSearch .NewSearch buf = InputBox("検索するファイル名を指定してください") If buf = "" Or buf = "False" Then Exit Sub .Filename = buf buf = GetFolder("検索を開始するフォルダを指定してください") If buf = "" Then Exit Sub .LookIn = buf .SearchSubFolders = True ''サブフォルダも検索する If .Execute() > 0 Then For Each f In .FoundFiles cnt = cnt + 1 Cells(cnt, 1) = f ''パス+ファイル名 Cells(cnt, 2) = FSO.GetFile(f).Name ''ファイル名 Cells(cnt, 3) = FSO.GetFile(f).ParentFolder ''パス Next f Else MsgBox "見つかりませんでした" End If End With Set FSO = Nothing End Sub Function GetFolder(msg As String) Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, msg, &H1 + &H10) If Not myPath Is Nothing Then GetFolder = myPath.Items.Item.Path Else GetFolder = "" End If Set Shell = Nothing Set myPath = Nothing End Function ーーーーー このプログラムをexcel2004上のマクロとして実行すると、 実行時エラー’429’: ActiveX コンポーネントはオブジェクトを作成できません。 とエラーが表示されます。 そこで、デバッグとして一行ずつステップインさせると、二行目の Set FSO = CreateObject("Scripting.FileSystemObject") の部分でエラーとなり、動作が停止します。 何故この様なエラーが発生するのか判りません。 このエラーが発生する理由と解決策をお教えいただきたいと思います。 宜しくお願いいたします。

    • ベストアンサー
    • Mac

専門家に質問してみよう