Excel VBA質問箱 IV

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

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


1383 / 13644 ツリー ←次へ | 前へ→

【74760】文字列の置換について じゃっかる 13/9/11(水) 15:12 質問[未読]
【74763】Re:文字列の置換について γ 13/9/11(水) 20:59 発言[未読]
【74786】Re:文字列の置換について γ 13/9/15(日) 15:54 発言[未読]

【74760】文字列の置換について
質問  じゃっかる  - 13/9/11(水) 15:12 -

引用なし
パスワード
   VBA初心使者です。お手数をおかけしますがご教示願います。

あるフォルダ内(サブフォルダ含む)の各ブックのsheet1の特定セルの「H25」という文字列を「H26」に置換したいのです。

職務上、処理ブック数が膨大で大変困っています。
お手数ですが、コードをご教示いただけると大変助かります。
よろしくお願いします。

【74763】Re:文字列の置換について
発言  γ  - 13/9/11(水) 20:59 -

引用なし
パスワード
   フォルダのなかにあるExcelファイルに繰り返し処理をする例が
ht tp://www.moug.net/tech/exvba/0100048.html
にあります。
これを参考にして、
・ファイルを開いて、
・シートの特定のセルの値を書き換えて
・保存し、
・閉じる
という繰り返し処理をすれば良いでしょう。

それぞれは、マクロ記録でも得られますし、
テキストに載っている基本的な処理ですから、
ご自分でトライされることをお勧めします。

【74786】Re:文字列の置換について
発言  γ  - 13/9/15(日) 15:54 -

引用なし
パスワード
   サブフォルダ内も対象というところを読み飛ばしてました。
その参照ページは参考になりませんね、失礼しました。

というよりも、あなた自身が最近同じ質問をされていたようですね。
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=74572;id=excel

データを取ってくるんじゃなくて、
特定シートの特定セルを書き換えて保存する点が違うだけのようですから、
ご自分でも対応出来そうに思います。

上記のものとは少しちがって、時間は少しかかるかもしれませんが、
以下のような書き方もあると思います。

フォルダの中のファイルを処理して、
次に、そのサブフォルダを対象に同じ処理を実行させます。
こういうのを再帰処理といいます。

なお、Excelファイルに対する処理は、
taskプロシージャとして外に出していますから、
その部分だけ変更すれば良いはずです。
(対象となるフォルダ名は変更してください。)

----------------
'' 「Microsoft Scripting Runtime」の参照設定が必要

Dim fso As FileSystemObject
Sub test()
  Dim myFolderName As String

  Application.ScreenUpdating = False

  '対象となるフォルダ
  myFolderName = "D:\test"  '' ここは修正

  Set fso = New FileSystemObject
  Call walk_folder(fso.GetFolder(myFolderName))
  Set fso = Nothing

  Application.ScreenUpdating = True
  MsgBox "処理終了"
End Sub

Function walk_folder(ByVal objPATH As Folder)
  Dim myPath2 As Folder
  Dim myFile As File

  For Each myFile In objPATH.Files
    If fso.GetExtensionName(myFile.Name) = "xls" Then
      Call task(myFile.Path)
    End If
  Next

  For Each myPath2 In objPATH.SubFolders
    Call walk_folder(myPath2)
  Next

  Set objPATH = Nothing
End Function

Function task(fname As String)
  Dim wb As Workbook

  Set wb = Workbooks.Open(fname)
  wb.Sheets(1).Range("A1").Value = 1
  wb.Save
  wb.Close False
End Function

1383 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free