• ベストアンサー

複数csvファイルをexcelの各シートに書き込む

複数のCSVファイルを各々一つのexcelファイルの各ワークシトに書き込む方法のコードを下記のようにQueryTableを使った形にしてみました。 $csvFile1 = "D:\test_data\test_data1.csv" $csvFile2 = "D:\test_data\test_data2.csv" $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Add() $Book.Worksheets.Add() $sheet1 = $excel.Worksheets.Item(2) $sheet2 = $excel.Worksheets.Item(1) $startRange = "C2" $outputColumn = $sheet1.Range($startRange).Column $outputRow = $sheet1.Range($startRange).Row $QueryTable = $sheet1.QueryTables.Add("TEXT;$csvFile1",$sheet1.cells($outputRow,$outputColumn)) $QueryTable.TextFileCommaDelimiter = $True $QueryTable.TextFilePlatform = 65001 $QueryTable.TextFileStartRow = 1 $QueryTable.Refresh($false) $QueryTable.Name = "仮テーブル" $QueryTable.Delete() $startRange = "C2" $outputColumn = $sheet2.Range($startRange).Column $outputRow = $sheet2.Range($startRange).Row $QueryTable = $sheet2.QueryTables.Add("TEXT;$csvFile2",$sheet2.cells($outputRow,$outputColumn)) $QueryTable.TextFileCommaDelimiter = $True $QueryTable.TextFilePlatform = 65001 $QueryTable.TextFileStartRow = 1 $QueryTable.Refresh($false) $QueryTable.Name = "仮テーブル" $QueryTable.Delete() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null [gc]::Collect() これは2個のcsvファイルだから何とかなっていますがファイルが増えた場合これではとても面倒なことになります。私の能力ではコンパクトにコードを纏めることが出来ません。コンパクトな方法をお教えください。別にExport-Excel等使う方法でもかまいません。

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

  • ベストアンサー
  • luka3
  • ベストアンサー率74% (327/438)
回答No.2

こんな感じになるかと思います。 $csvFiles = @("D:\test_data\test_data1.csv", "D:\test_data\test_data2.csv") $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Add() foreach ($index in 0..($csvFiles.Length - 1)) { # シートを追加(最初のシートは既に存在するので、2番目以降は追加する) if ($index -eq 0) { $sheet = $book.Sheets.Item(1) } else { $sheet = $book.Sheets.Add() } $sheet.Name = "Sheet" + ($index + 1) $startRange = "C2" $QueryTable = $sheet.QueryTables.Add("TEXT;"+$csvFiles[$index], $sheet.Range($startRange)) $QueryTable.TextFileCommaDelimiter = $True $QueryTable.TextFilePlatform = 65001 $QueryTable.TextFileStartRow = 1 $QueryTable.Refresh($false) $QueryTable.Name = "仮テーブル" $QueryTable.Delete() } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($book) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null Remove-Variable sheet, book, excel [gc]::Collect() [GC]::WaitForPendingFinalizers()

turu575
質問者

お礼

コンパクトなコードにしていただき有り難うございました。 170万行のデータを2つのCSVファイルに分けて吐き出させ(私が取った方法では一つのファイルからの分割に処理時間を要するため)、一つのexcelファイルに納めるために、最初は、Export-Excelで試したのですが、Import-Csvで一度読み込ませるためどうしても私の環境で80秒弱掛かっていました。そこでコード数は増えるもののQueryTableを使ってみたところ40秒強で出来た迄は良かったが、あのようなコードしか書けないが情けなく思っていたところです。本当に助かりました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

folderPath = "ここにフォルダのパスを入力" ↓で一応は意図した通りに動いてそうでした。↑はCSVファイルを置いてるパスに書き換えてください。桁落ちなどもあるかは分かりません。 ちなみに、chatGptに 「複数のCSVをEXCELの各シートに取り込むVBAを書いて」 と命令し、出力されたコードなので、私は書いてません。上手く活用すれば楽になります。 Sub ImportCSVFilesToSheets() Dim folderPath As String Dim fileName As String Dim ws As Worksheet Dim wb As Workbook Dim fPath As String 'フォルダのパスを取得 folderPath = "ここにフォルダのパスを入力" 'Excelファイルを作成 Set wb = ThisWorkbook '指定したフォルダ内のすべてのファイルについてループ処理 fileName = Dir(folderPath & "\*.csv") Do While fileName <> "" 'ファイルを開く Set ws = wb.Sheets.Add(After:=wb.Sheets(wb.Sheets.Count)) fPath = folderPath & "\" & fileName With ws.QueryTables.Add(Connection:="TEXT;" & fPath, Destination:=ws.Range("A1")) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True 'CSVファイルの区切り文字を設定 .Refresh End With ws.Name = Left(fileName, InStr(fileName, ".") - 1) 'シート名をファイル名に設定 fileName = Dir '次のファイルに移動 Loop End Sub

turu575
質問者

お礼

外部からコマンドラインで実行させるためとマクロファイルを作りたくないためVBAを使うことはためらっていました。VBSで実行させるときは参考にさせていただきます。

Powered by GRATICA
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 複数csvファイルをexcelの各シートに書込む2

    前回powershellを使い複数のcsvをそれぞれのシートに分けて新規Excelファイルとして書き込む方法についてお教え頂きましたが、既存ファイルの場合下記の下記のコードのようにすると既存シートがある場合既存のシートにシート名を変え書き加えられることになります。既存シートをそのままにして新規シートとして追加するような方法をお教えください。 $csvFiles = @("D:\test_data\test_data1.csv", "D:\test_data\test_data2.csv") # Excelファイルのパス $excelPath = (Get-ChildItem "D:\test_data\AAA.xlsx").FullName $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Open($excelPath) foreach ($index in 0..($csvFiles.Length - 1)) { if ($index -eq 0) { $sheet = $book.Sheets.Item(1) } else { $sheet = $book.Sheets.Add() } $sheet.Name = "data" + ($index + 1) $startRange = "C2" $QueryTable = $sheet.QueryTables.Add("TEXT;"+$csvFiles[$index], $sheet.Range($startRange)) $QueryTable.TextFileCommaDelimiter = $True $QueryTable.TextFilePlatform = 65001 $QueryTable.TextFileStartRow = 1 $QueryTable.Refresh($false) $QueryTable.Name = "仮テーブル" $QueryTable.Delete() } [System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($book) > $null [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) > $null Remove-Variable sheet, book, excel [gc]::Collect() [GC]::WaitForPendingFinalizers() なお、csvファイルの指定方法は違います(ファイル名で指定する方が分からないのでコピペのコードそのままに近い)がExport-Excelを使った下記コード場合同じシート名がある場合は、そのシートに書き込まれますがそれ以外は新規シート名(csvファイル名)として付け加えられます。 $csvs = Get-ChildItem .\* -Include *.csv $csvCount = $csvs.Count Write-Host "Detected the following CSV files: ($csvCount)" foreach ($csv in $csvs) { Write-Host " -"$csv.Name } $excelFileName = "D:\test_data\AAD.xlsx." Write-Host "Creating: $excelFileName" foreach ($csv in $csvs) { $csvPath = ".\" + $csv.Name $worksheetName = $csv.Name.Replace(".csv","") Write-Host " - Adding $worksheetName to $excelFileName" Import-Csv -Path $csvPath | Export-Excel -Path $excelFileName -WorkSheetname $worksheetName -StartRow 2 -StartColumn 3 } しかしならこの方法では大きなデータの場合処理時間を要することになります。処理時間で言うなら下記コードの方が一番速いですがやはり新規シートに置き換えられる問題があります。 $sourceFiles = @("D:\test_data\test_data1.csv", "D:\test_data\test_data2.csv") $outputFile = "D:\test_data\AAE.xlsx" $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false $outputWorkbook = $excel.Workbooks.Add() $index=1; foreach ($sourceFile in $sourceFiles) { $workbook = $excel.Workbooks.Open($sourceFile) foreach ($sheet in $workbook.Sheets) { $sheet.Copy([ref]$outputWorkbook.Sheets.Item($outputWorkbook.Sheets.Count)) } $index=$outputWorkbook.Sheets.Count $workbook.Close($false); } $outputWorkbook.Sheets.Item($index).Delete() $outputWorkbook.SaveAs($outputFile); $excel.Quit(); [System.Runtime.InteropServices.Marshal]::ReleaseComObject($outputWorkbook) | Out-Null; [System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) | Out-Null; Write-Output "Sheets have been combined into $outputFile"; 私のコピペ能力ではここまでです。シート名が同じの場合は上書きされそれ以外は新規シートとして追加される方法になれば幸いです。よろしくお願いいたします。

  • CSVデータをEXCELシートに展開したい

    CSVデータをEXCELシートに展開しようとしています。 シート1にボタンを用意して、クリックするとシート2に展開されるというようなことをしたいのです。 以下のコード(マクロを組んで作られるコードです)だと、シート2に取り込まれないです。 どのようにすればシート2に展開されるでしょうか? Private Sub CommandButton2_Click() Dim SH As Worksheet ' Set SH = Worksheets("Sheet2") With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:\temp\test1.", _ Destination:=Range("A1")) .Name = "test1 .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = xlWindows .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .Refresh BackgroundQuery:=False End With よろしくお願いします。

  • Powershellのexcel操作でCom終了?

    PowershellでCSVファイルをExcelに書き出すコードを正解かどうか分かりませんが他のサイト等を参考に継ぎ接ぎで下記のようにしましたが、COMオブジェクトの終了の方法がこれで正しいのかお伺いいたします。 #QueryTableオブジェクトを使ってCSVを取り込む方法 # Excelを操作する為の宣言 $excel = New-Object -ComObject Excel.Application # 起動直後は非表示(最小化ではない)になっているので表示する $excel.Visible = $true #新規ブックを作成する $book = $excel.Workbooks.Add() # シートを取得する $sheet = $excel.Worksheets.Item(1) # CSVファイル $csvFile = "D:\test\pp002.csv" # 書き出し開始セル $startRange = "B2" # 出力列(書き出し開始セルの列) $outputColumn = $sheet.Range($startRange).Column # 出力行(書き出し開始セルの行) $outputRow = $sheet.Range($startRange).Row # 読み込むファイルの形式を【2:文字列】と指定するための配列を作成 $arrDataType = @() for ($i=0; $i -lt 255; $i++){ $arrDataType += 2 } # QueryTableオブジェクトを作成 $QueryTable = $sheet.QueryTables.Add("TEXT;$csvFile",$sheet.cells($outputRow,$outputColumn)) # 区切り文字に「カンマ区切り」を指定 $QueryTable.TextFileCommaDelimiter = $True # 文字コードに「Shift_JIS」を指定 #$QueryTable.TextFilePlatform = 932 # 文字コードに「UTF-8」を指定 $QueryTable.TextFilePlatform = 65001 # 読み込み開始行を指定 $QueryTable.TextFileStartRow = 1 # 読み込むファイルの形式を指定 $QueryTable.TextFileColumnDataTypes = $arrDataType[0..255] # 読み込み実行 $QueryTable.Refresh($false) # 名前を指定(後続処理で削除できるようにするため) $QueryTable.Name = "仮テーブル" # 作成された「QueryTableオブジェクト(=クエリと接続)」を削除 $QueryTable.Delete() # 上記で作成されてしまう名前定義(仮テーブル)を削除 foreach($n in $book.Names){ If ($n.Name -Like $loadSheetName + "!" + "仮テーブル*") { $n.Delete() } } #COMオブジェクトの破棄とメモリの解放 [System.Runtime.InteropServices.Marshal]::FinalReleaseComObject($excel) | Out-Null [GC]::Collect() 全体のコードの是非も問いたいところですが特に最後の2行で行う処理についてです。 いままで、コードが不十分だったためかどうか分かりませんが読み取り専用になったりプロセスが残ったままになったりメモリの問題等で再三PCの再起動を余儀なくされる事に陥っているため宜しくお願いいたします。 ちなみにいままでは $excel = $null [GC]::Collect() で処理していました。

  • PowershellでCSVをexcelに書き込む

    Powershellを使いCSVファイルをexcelの任意のセル位置から書き込むためにQueryTablesを使わない方法として下記コードをとあるサイトを見て継ぎ接ぎで作りましたがデータ量が多くなると処理時間を要します。 「QueryTablesよりStreamReaderのほうが 大容量(100MB以上)のテキストファイルを処理する場合、Get-ContentやImport-Csvなどのコマンドレットではなく、StreamReaderを使用することが推奨されています。なぜなら、PowerShellのパイプ処理は遅く、大量のメモリを消費するため、効率的な処理ができないからです。 StreamReaderは.NET Frameworkのオブジェクトを生成して使用するため、コードの記述量が増えるかもしれませんが、大容量ファイルの読み込みには最適な手法です。」 とありより良い方法と思いましたが私のコードのの書き方かどうか分かりませんが期待外れでした。因みに2列、1,000,001行でもQueryTablesなら15秒ぐらいですがこれだと10,001行で50秒位掛かりる状況でした。 # 通常のCSVファイルをExcelにインポートするスクリプト $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Add() $sheet = $excel.Worksheets.Item(1) $csvPath = "D:\test\pp004.csv" # CSV ファイルのエンコーディングを指定する $enc = [System.Text.Encoding]::UTF8 # CSV ファイルをオープンする $streamReader = New-Object -TypeName System.IO.StreamReader $csvPath, $enc # 変数を初期化する・・書き出し位置の指定 $i = 2 $j = 3 # 1行ずつ最終レコードまで読み込む While (($line = $streamReader.ReadLine()) -ne $null) { # カンマで文字列を分割し配列に格納する $fields = $line.Split(",") # 配列を順番に処理する foreach ($field in $fields) { # セルの書式を「文字列」にする #$sheet.Cells.Item($i, $j).NumberFormat = "@" # セルに値を設定する $sheet.Cells.Item($i, $j).Value = $field # 列を1つ進める $j++ } # 行を1つ進める $i++ # 変数初期化 $j = 3 } # CSV ファイルを閉じる $streamReader.Close() # COM 参照を解放する [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($sheet) [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($book) [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) [GC]::Collect() もしこのコードに問題があればお教えください。 よろしくお願いします。

  • 先頭にゼロを含む数字列のcsvをExcelに取込む

    UTF-8のCSVファイルがあり、含まれるデータに先頭がゼロで始まる数字列があります(例えば00123や0123で桁数は不定)。 これをVBAを使ってExcelに取り込み、ゼロ付きのまま扱いたいのですが、取り込んだデータは先頭のゼロが欠けてしまいます。 VBAコードは以下のとおりです。 どこを見直したらよろしいでしょうか。 strConnPhrase = "TEXT;" & strFilePath Set qt = ws.QueryTables.Add(Connection:=strConnPhrase, Destination:=ws.Range("A1")) With qt .TextFilePlatform = 65001 .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .PreserveFormatting = True .RefreshStyle = xlOverwriteCells .Refresh .Delete End With

  • VBAで同じフォルダのCSVを同じシートに読み込みたいです。

    VBAで同じフォルダのCSVを同じシートに読み込みたいです。 VBAで同じシートに開くのは以下でできます。 Sub UCsvGet2() cnstr = _ "text;C:\Documents and Settings\kazu\My Documents\test2.txt" With ActiveSheet.QueryTables.Add(Connection:=cnstr, _ Destination:=Range("A1")) .TextFileCommaDelimiter = True .TextFilePlatform = 932 .Refresh End With End Sub VBAでファイルを選択してOPENすることは以下でできます。  Sub GetPathName() ffname = ActiveWorkbook.FullName ' ブックのフル名称を得る pos = InStrRev(ffname, "\") ' うしろから \ を探す curpath = Mid(ffname, 1, pos) ' 先頭から \ の位置までを取り出す MsgBox pos & " " & curpath Workbooks.OpenText Filename:= curpath & "test2.txt" , _ DataType:=xlDelimited, Comma:=True End Sub これを同時に行いたいのですが、どうすればよいでしょうか? お知恵をお貸しください。

  • CSVが文字コードUTF-8かどうかの判定

    かなりデータ量が多い(10万レコード超)CSVファイルが、100件近くあります。これをエクセルに取り込んで順次同じような作業をしようと思っています。とりあえずCSVを以下のコードで開いています。 Sub CSV入力4() 'クエリーテーブルを使ったCSV読み込みVBAコード Dim myFile As Variant myFile = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", Title:="CSVファイルの選択") If myFile = False Then Exit Sub End If ActiveSheet.Cells.Clear With ActiveSheet.QueryTables.Add(Connection:="text;" & myFile, Destination:=Range("A1")) ' .TextFilePlatform = 932 'Shift_Jis .TextFilePlatform = 65001 'UTF8 .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False .Delete End With MsgBox "読込完了" End Sub 問題は、CSVに拡張子で区別できないUTF-8のCSVファイルがあることです。事前にわかっていれば .TextFilePlatform = 932 'Shift_Jis .TextFilePlatform = 65001 'UTF8 の使い分けで対応できるのですが、開いてみて文字化けがあるかどうか調べないとわかりません。自動的に判定する方法はないでしょうか?

  • 今日と昨日の日付.CSVファイルを選択し読み込む

    日付.csvのファイルが下記のように同じフォルダーに自動書き出しされています。 20171101.csv 20171102.csv 20171103.csv このファイル群から、今日と昨日のファイルだけを選択して、一枚のxlsシートに 書き出すマクロはどうすればいいでしょうか? 現在は、下記11行目を日々書き直して処理しています。 よろしくご教示をお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Keyboard Shortcut: Ctrl+a ' Range("B4:E10000").Select Selection.ClearContents Range("B4").Select With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;Z:\bme280-data\20171130.csv", Destination:=Range( _ "$B$4")) .Name = "No1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False Call Macro2 End With End Sub

  • PwshでCSVをExcelに書き込む方法

    前に何回かPowershellを使いCSVファイルをexcelの任意のセル位置から書き込む方法を質問しましたが、その過程で下記のコードをで試したところすこぶる処理時間が掛かる悪手となりました。最近まで私的に失敗作としていましたが何か間違った方法を取ったからではないかと思いたちました。しかしながらコピペでコードを書いて満足している素人では、間違いがあっても皆目見当もつきません。問題点ともし改善の余地があるならお教えください。 # CSVファイルをExcelにインポートするスクリプト $excel = New-Object -ComObject Excel.Application $excel.Visible = $true $book = $excel.Workbooks.Add() $sheet = $excel.Worksheets.Item(1) $fileName = "D:\test\pp001.csv" # CSV ファイルをオープンする $reader = New-Object System.IO.StreamReader($fileName, [System.Text.Encoding]::GetEncoding("utf-8")) $array_total = @() $array_total = New-Object System.Collections.ArrayList while ($reader.Peek() -ge 0) { $line = $reader.ReadLine() # 行ごとの処理を行う $array_total.add("$line") } <# セルへ配列で書き込み#> $c=($array_total[0] -split ",").Count $r=$array_total.Count $arw=New-Object "object[,]" $r,$c <# 書き込み用配列定義 $r行$c列 #> $a=@() foreach($inc in 0..($r-1)){ $cnt=0 $array_total[$inc] -split "," | % { $a +="`$arw[$inc,$cnt]=`"$($_)`"" $cnt++ } } $a | iex <# 範囲を指定してセット#> $sheet.Range("B2").Resize($r, $c) = $arw $reader.Close() # COM 参照を解放する [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($sheet) [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($book) [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel) [GC]::Collect() 処理速度に関して他の方法では、私の環境で2列1,000,001行のデータで オブジェクトとして各行のデータをArrayListに追加とExport-Excelを使う方法で11から13分、QueryTableだと13~20秒、Import-Csvと配列で51~53秒、Import-CsvとExport-Excelでは47~51秒、本末転倒のArrayListで動的配列を作りExport-ExcelでExcelに一度データを書き込んでからそのファイルを開きtexttocolumnsで区切り位置指定の分割を実行させても30~50秒です。 因みに今回のコードの実行速度は、少ないデータでもAIの回答で不十分な結果となった質問(https://okwave.jp/qa/q10209583.html)の方法よりかなり遅くなって、最悪の結果でした。

  • エクセルVBAでCSV読み込みについて質問します。

    エクセルVBAでCSV読み込みについて質問します。 外部データの取り込みマクロを自動記録で作成しましたが、 csvファイル名が決まってしまうで、他のCSVファイルに展開できません。 できれば、マクロ実行(ファイル選択)ボタンを押すとウィンドウが出てきて、 任意の場所にあるCSVファイルを選択できるようにできないでしょうか? マクロは、書き込むエクセルブックが開いている状態からスタートし、シート名は共通です。 自動記録で完成したマクロは以下の通りです。 With ActiveSheet.QueryTables.Add(Connection:= _ "TEXT;C:¥Documents and Settings¥USER¥My Documents¥VBA¥マクロ¥取り込み¥TEST1.csv" _ ’”¥”が誤変換されるので、直接入力しました。      , Destination:=Range("M6")) , Destination:=Range("M6")) _ , Destination:=Range("M6")) .Name = "290TEST1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = False .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, _ 2) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With ActiveWindow.ScrollColumn = 2 ActiveWindow.ScrollColumn = 3 ActiveWindow.ScrollColumn = 4 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 7 ActiveWindow.ScrollColumn = 6 ActiveWindow.ScrollColumn = 5 ActiveWindow.ScrollColumn = 4 '以下、続くので省略しました。 End Sub どなたか、お助けお願いします。

このQ&Aのポイント
  • 「筆まめ」の最新バージョンであるVer.32で、宛名を印刷する際に差出人の情報がすべて印刷される問題が発生しています。
  • Ver.31までは宛名印刷の際に印刷する項目を選択することができましたが、Ver.32ではその機能がなくなったようです。
  • 問題の解決策としては、印刷されたくない項目に保存している情報を削除してから印刷するしかありません。設定の場所が変わった可能性もありますので、確認してみてください。
回答を見る