No.4ベストアンサー
- 回答日時:
こんばんは。
これは、その都度、ファイルは閉じてはいますが、メモリとか使っているような気がしますね。あまり、IE などを開いたままには、このVBAマクロはお勧めできません。
シェアウェアでは、どうしているのでしょうね。このレベルでは、お金を取れるような内容ではありません。直接、ファイルに書き込むようなことをしなければね。
それから、たぶん、Excel97 では、無理だと思います。いままで、同じようなものは、何度も作ってきて、使ってはいただいていますが、今回は、複数の文字列の置換ということが、初めてです。(そのようなリクエストはありませんでしたけれど)一対一交換のものは、成功したものが別にあります。
例:
交換条件 →交換済み
5757AAAA →5902BBB
コンマ(,)で区切って指定します。
フォルダの中は、全ての場合と、そうでない場合を想定しています。ファイル・オープンダイアログは、マルチセレクト(複数選択)が可能な状態です。
最初に、量を少なくして、バックアップを取ってから行ってください。
なお、私が解明できない不明なエラーがある時は、現在のこの版は、あっさりと見送り、以前のものを公開します。
'<標準モジュール>
Sub xlsReplace()
Dim objF As Object, Ret As Variant, Fnames() As Variant, Fname As Variant
Dim sWords$(), rWords$(), Words As Variant, i As Long, j As Long, OrgPath As String
'============================================================
'検索語
Const sWord = "交換条件,5757AAAA"
'置換語(上記と対にする)
Const rWord = "置換済み,5902BBB"
'ここは下位フォルダでも可能です。
Const myDrive As String = "C:\"
'
'============================================================
sWords = Split(sWord, ",")
rWords = Split(rWord, ",")
ReDim Words(1, UBound(sWords))
For i = LBound(sWords) To UBound(sWords)
Words(0, i) = sWords(i)
Words(1, i) = rWords(i)
Next i
OrgPath = CurDir
Set objF = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選んでください。", 0, myDrive)
If Not objF Is Nothing Then
Ret = MsgBox(objF.items.Item.Path & "のフォルダのファイルを全て実行しますか?", _
vbYesNoCancel)
If Ret = vbYes Then
ChDir objF.items.Item.Path
Fname = Dir(objF.items.Item.Path & "\" & "*.xls")
Do
ReDim Preserve Fnames(j)
Fnames(j) = Fname
j = j + 1
Fname = Dir
Loop Until Fname = ""
Application.ScreenUpdating = False
For Each Fname In Fnames
Call ReplaceValues(CStr(Fname), Words)
Next Fname
Application.ScreenUpdating = True
ElseIf Ret = vbNo Then
ChDir objF.items.Item.Path
Fnames = Application.GetOpenFilename("xls ファイル(*.xls),*.xls,全てのファイル(*.*),*.*", , , , True)
If VarType(Fnames) = vbBoolean Then Exit Sub
Application.ScreenUpdating = False
For Each Fname In Fnames
Call ReplaceValues(CStr(Fname), Words)
Next Fname
Application.ScreenUpdating = True
End If
End If
Set objF = Nothing
MsgBox "終了"
End Sub
'置換のサブルーチン
Private Sub ReplaceValues(Fname As String, ParamArray Words())
Dim wb As Worksheet, k As Long, arWords
arWords = Words
With Workbooks.Open(Fname)
For Each wb In .Worksheets
On Error Resume Next
For k = LBound(arWords(0), 2) To UBound(arWords(0), 2)
wb.Cells.Replace What:=arWords(0)(0, k), _
Replacement:=arWords(0)(1, k), _
LookAt:=xlWhole, _
SearchOrder:=xlByRows, _
MatchCase:=False
Next k
'Replace の仕様:xlWhole=全一致
On Error GoTo 0
Err.Clear
Next
.Save
.Close True
End With
End Sub
ありがとうございます。
エクセルのバージョンは2000です。
残念ながらVBAはわかりません。
せっかく書いてもらったのによく理解できなくてすみません。
No.8
- 回答日時:
こんにちは。
>他のドライブ(たとえばDドライブ、ネットワーク越しのサーバー内のフォルダ等)を指定したい場合どうしたらいいでしょうか?
Dドライブの時は、
D:\
でよいのですが、ネットワークの場合は、
"\\サーバー名\フォルダ"
ということになります。ただし、書き換えられる状態になっていないといけませんが。
この回答への補足
返答が遅れてすみません。
>Dドライブの時は、
> D:\
>でよいのですが、ネットワークの場合は、
>
> "\\サーバー名\フォルダ"
どこを書き換えればいいですか?
マクロを実行すると
”フォルダを選んでください”
となって、Cドライブ以下を選択するようになっています。
ネットワーク越しに関してはもちろん書き換え可能な権限があります。
No.7
- 回答日時:
こんにちは。
>セルの中の一文字のみを指定していたためのようです。
>試していませんが指定フォルダの下位フォルダの中のファイルも置換されるのでしょうか?
それについては、細かく触れていませんでしたが、
'置換のサブルーチン
という中の
×LookAt:=xlWhole, _
↓
LookAt:=xlPart, _
と書き換えれば、部分でも検索して置換してくれます。
今、試してみましたが、どうやら、そちらのほうがよかったですね。気が付かないですみません。
>試していませんが指定フォルダの下位フォルダの中のファイルも置換されるのでしょうか?
これも、間違いやすい表現でした。
現在のバージョンでは、
#'ここは下位フォルダでも可能です。
# Const myDrive As String = "C:\"
下位フォルダを書いてもよいです、という意味です。
もちろん、下位フォルダを調べることの出来るように作ることも出来ますが、もう少し、コードが長くなりそうです。でも、存在するExcelのブックを全て調べてしまうこともあるので、ちょっとどうなるか分りません。
何度もすみません。
このマクロだとCドライブのみの指定になりますが
他のドライブ(たとえばDドライブ、ネットワーク越しのサーバー内のフォルダ等)を指定したい場合どうしたらいいでしょうか?
No.6
- 回答日時:
こんにちは。
#4 のWendy02 です。
>フォルダがデスクトップに置いてあるのですがそれが問題でしょうか?
たぶん、それが一番、問題の核心に近いと思います。
デスクトップというのは、実際は、C:\Windowsフォルダにあるのですが、そのフォルダ自体は、ショートカットがほとんどで、デスクトップを指定しても、そこには何もないというわけです。もし、Excelファイルが、Windowsフォルダに存在するというなら、あまり、そこに置くのはお勧めできません。
デスクトップに置いてあるフォルダーを右クリックして、プロパティのリンク先を調べてみてくれますか?たぶん、別の場所にあるのではないかと思います。
できました。ありがとうございます。
デスクトップフォルダはXPなので
C:\Documents and Settings\****\デスクトップ
にあるのですが、原因はそれではなく、
セル全体の単語を指定しないで、セルの中の一文字のみを指定していたためのようです。
試していませんが指定フォルダの下位フォルダの中のファイルも置換されるのでしょうか?
No.5
- 回答日時:
#4 の Wendy02です。
最初に、ミスがありました。
xlsReplaceのコードの中の最後の部分
.Save '←は不要です。同じことを二度していました。
.Close True
End With
End Sub
baltoさんへ
>残念ながらVBAはわかりません。
一応、設定の仕方だけは書いておきます。
今回に関しては、Alt + F11 (Altを押しながらF11)を押すと、Visual Basic Editor 画面が出てきます。次に、メニューの[挿入]-[標準モジュール]と開けて、クリックすると、画面が現れますので、コードを貼り付けて、再び、Alt + F11 で、画面を閉じます。
実行は、Alt + F8 で、「xlsReplace」を選んで、実行。
または、ボタンをつけるというわけです。
記録マクロでもしていたら、ある程度お分りになるかと思います。なお、Versionに関しては十分です。
後は、#1で、g_nekoruさんがご紹介してくださった、外部ツール(Excelを起動させないで動く)のシェアウェアのほうがよろしいかもしれません。
試してみました。
でも置換されません。
マクロ登録し、置換したい文字、置換後の文字を指定して実行したのですが変化がありません。
フォルダがデスクトップに置いてあるのですがそれが問題でしょうか?
具体的な内容ですがあるファイルで文字の書き間違えがあり(替→換)また、このファイルが数百個あるためそれを書き換えするのが大変なのでこの質問をしているのです。
下のフリーウェアは使い方がいまいちよくわかりませんでした。
シェアウエアを使うほどでもないのですが・・・。
No.2
- 回答日時:
どうしてもExcelでやらないといけないんでしょうか?
フリーのリネームソフトを使用したほうが簡単だと思うのですが。
的はずれでしたらゴメンナサイ;
参考URL:http://www.vector.co.jp/soft/win95/util/se156290 …
No.1
- 回答日時:
マクロを作成すればできると思いますがVBAはわかりますか?
あとはフリーソフトなどであるかもしれません。
Excel対応のものはほとんどシェアウェアになるかもしれませんが。
http://download.goo.ne.jp/software/search.php?MT …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) EXCEL VBA 単語置き換え について質問です ブック名 ぶぶぶ シート名 ししし セル V3〜 3 2023/03/08 01:41
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) フォルダAから1つのファイルだけを、フォルダBへを移動するVBAについて 2 2022/07/25 11:45
- その他(Microsoft Office) エクセル置き換え 指定の出現回数以降の文字列 3 2022/07/29 19:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Thunderbird Windows10への移行...
-
エクセルのファイルを名前を変...
-
フリーソフトの保存先について...
-
DLLやOCXなどの格納先は必ず「C...
-
フォルダの上書きについて
-
DVDshrinkでバックアップしたVI...
-
Windows10で、フォルダにあるす...
-
ドラッグしてのファイル移動が...
-
C:\\WINDOWS\\TEMP\\B2Temp\\At...
-
Mozira Thunderbirdのデータ移行
-
共有フォルダ移動の禁止
-
ゲストOSがWindows98でホストと...
-
VBA バッチファイルでコピー出...
-
エクスプローラ上のドラッグで...
-
エクスプローラーとフォルダの違い
-
Excel2010 \\Office14\\XLSTAR...
-
OneDrive内にある「個人用 Vaul...
-
削除したフォルダが勝手に復活する
-
デスクトップにあるPDFを削除で...
-
Excelを開くとエラーが出る
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのファイルを名前を変...
-
フリーソフトの保存先について...
-
Thunderbird Windows10への移行...
-
複数フォルダの中身だけを一度...
-
フォルダの上書きについて
-
DLLやOCXなどの格納先は必ず「C...
-
誤ってBecky!が初期状態に。助...
-
Excel2010 \\Office14\\XLSTAR...
-
フォルダの容量制限はあるのか?
-
ゲストOSがWindows98でホストと...
-
「これらのファイルは、コンピ...
-
Windows10のロック画面でスライ...
-
エクスプローラーとフォルダの違い
-
Windows10で、フォルダにあるす...
-
フォルダを隠す
-
共有フォルダ移動の禁止
-
コピー元が固定パスでない場合...
-
Windows7 写真フォルダを解体...
-
DVDshrinkでバックアップしたVI...
-
ウインドウズメディアプレイヤ...
おすすめ情報