Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


399 / 886 ←次へ | 前へ→

【500】Re:CSV(?)より取り込んだデータを下に文書...
回答  H. C. Shinopy  - 06/10/4(水) 0:04 -

引用なし
パスワード
   過去に作った2つのマクロをつないで作りました。
CSVファイルの保存先(myFolder)・ファイル名(myFile)と、
項目数(myColMax)・検索文字列(myFindText)は、
そちらの状況に合わせて、変更する必要があります。

やり方については、コメント行に書き込んだ通りです。
「ワードの特定の部分に当てはめていく」件ですが、
どうやってカーソルをそこに移動させるのか判らないので、
一般的な手段として、文字列「@住所」「@あて先」「@日付」を検索して、
全部置換すると考えました。
まずは、回答まで。

CSVデータは下のようなものと想定しています。
保存先:「マイドキュメント」の「Zzz」フォルダ
ファイル名:「zzz.csv」
項目数:3
1件目が、見出し行のデータ

住所,あて先,日付
aaa,bbb,ccc
kkk,lll,mmm
xxx,yyy,zzz

Sub MyCsvToArr()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 注記...
 Rem  [元の文書]を開いた状態で実行する。
 Rem  [元の文書]の「@住所」「@あて先」「@日付」を検索して置換する。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem CSV=>表処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Dim myShell As Variant ' IWshShell3
 Dim myFso As Variant
 Dim myFile As Variant
 '
 Dim myFolder As String
 Dim myFullName As String
 Dim myText As String
 Dim myLine As Variant
 '
 Dim i As Long
 Dim c As Long
 Dim myLineMax As Long
 Dim myColMax As Long
 '
 Dim myTitle As String
 Dim myStatusBar As String
 Dim myMsg As String
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 myTitle = "myCsvToArr"
 myColMax = 3 ' 項目数 "@住所,@あて先,@日付"
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Set myShell = CreateObject("WScript.Shell")
 Set myFso = CreateObject("Scripting.FileSystemObject")
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Rem CSVファイルの保存先フォルダ・ファイル(指定要)。
 myFolder = myShell.Specialfolders("MyDocuments") ' マイドキュメント
 myFolder = myFolder & "\Zzz"
 myFile = "\zzz.csv"
 myFullName = myFolder & "\" & myFile
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 With myFso.OpenTextFile(myFullName, 8)
  myLineMax = .Line
  .Close
 End With
 '
 ReDim MyArray(myLineMax - 1, myColMax - 1)
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Set myFile = myFso.OpenTextFile(myFullName, 1)
 '
 c = 0
 Do Until myFile.AtEndOfStream
  myText = myFile.ReadLine
  myLine = Split(myText, ",")
  If (UBound(myLine) + 1) <> myColMax Then
   MsgBox "項目数異常:" & c + 1 & "件目"
   Exit Sub
  End If
  '
  For i = 0 To UBound(myLine)
   MyArray(c, i) = myLine(i) ' 置換文字列を配列に保存。
  Next ' i
  c = c + 1
  '
  myStatusBar = myTitle & ":処理中" & " " & Format(c, "###0") & "/" & myLineMax & "件"
  Application.StatusBar = myStatusBar
 Loop
 '
 myFile.Close
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 beep
 myStatusBar = myTitle & ":CSVデータの読み込み完了! "
 Application.StatusBar = myStatusBar & "総数:" & c & "件"
 '
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Set myShell = Nothing
 Set myFso = Nothing
 Set myFile = Nothing
 ' Set MyArray = Nothing
' End Sub ' MyCsvToArr *----*----*  *----*----*  *----*----*  *----*----*
' ここから上は、あすか様の上司が作ったマクロ?私の想像。
'
' Sub MyNewDocuments()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 検索置換・新規文書作成処理
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 '
 Dim myDocOne As String
 Dim myDocNew As String
 Dim myFindText As String
 Dim myFind As Variant
 '
 ' 検索する文字列を指定。
 myFindText = "@住所,@あて先,@日付"
 myFind = Split(myFindText, ",")
 ' 元の文書の保存先・ファイル名を取得。
 myDocOne = ActiveDocument.FullName
 ' 元の文書を閉じる。
 ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
 '
 ' [元の文書]のファイル名から「.doc」を削って新規文書ファイル名を準備。
 myDocNew = Replace(myDocOne, ".doc", "")
 '
 ' 作成する文書の数だけ繰り返し。(1件目は見出し行と見なす)
 For c = 1 To UBound(MyArray)
  ' 文書の新規作成。
  Documents.Add
  ' 新規文書に[元の文書]を挿入。
  Selection.InsertFile FileName:=myDocOne, Range:="", _
  ConfirmConversions:=False, Link:=False, Attachment:=False
  ' 新規文書の先頭にカーソルを戻す。
  Selection.HomeKey Unit:=wdStory, Extend:=wdMove
  '
  For i = 0 To myColMax - 1 ' 項目数だけ繰り返し。
   ' 一括検索置換。
   With Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = myFind(i)
    .Replacement.Text = MyArray(c, i)
    .Forward = True
    .Wrap = wdFindContinue
    .Format = False
    .MatchCase = False
    .MatchWholeWord = False
    .MatchByte = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = False
    .MatchFuzzy = True
    .Execute Replace:=wdReplaceAll
   End With
   ' 新規文書の先頭にカーソルを戻す。
   Selection.HomeKey Unit:=wdStory, Extend:=wdMove
  Next ' i
  ' 新規文書ファイル名に「4桁連番c.doc」を指定して保存。
  ActiveDocument.SaveAs FileName:=myDocNew & Format(c, "0000") & ".doc"
  ' 文書を閉じる。
  ActiveDocument.Close
 Next ' c
 '
 beep
End Sub
2,766 hits

【499】CSV(?)より取り込んだデータを下に文書を一括作成ってできますか? あすか 06/10/2(月) 17:13 質問[未読]
【500】Re:CSV(?)より取り込んだデータを下に文書... H. C. Shinopy 06/10/4(水) 0:04 回答[未読]
【501】Re:CSV(?)より取り込んだデータを下に文書... あすか 06/10/11(水) 13:03 お礼[未読]

399 / 886 ←次へ | 前へ→
ページ:  ┃  記事番号:
207137
(SS)C-BOARD v3.8 is Free