Sub 点検()
Dim buf As String
Dim Path As String
Dim day As Variant
Dim man1 As String
Dim man2 As String
'-----------------------------------------------------------------------------
'ファイル選択
'-----------------------------------------------------------------------------
'このファイルがあるフォルダのパスを取得
Path = ThisWorkbook.Path
'該当するファイル名だけを取って来る (エクセルファイルだけ)
buf = Dir(Path & "\" & "点検.xlsx")
'指定したファイルを開く
Workbooks.Open Path & "\" & buf
'-----------------------------------------------------------------------------
'検索値の表示
'-----------------------------------------------------------------------------
MsgBox "置換前のシートは" & vbLf & "「" & Worksheets("年度ー月指定").Range("B4").Value & "年度" & Worksheets("年度ー月指定").Range("B5").Value & "月」のデータです"
'-----------------------------------------------------------------------------
'置換後の値を入力し、該当のセルに読み込ませる
'-----------------------------------------------------------------------------
label:
day = Application.InputBox(prompt:="置換後の「年度」を入力してください。記入例:2021/04/01 半角(キャンセル不可)", _
Title:="日付入力", _
Default:="2021/04/01")
If Not IsDate(day) Then
MsgBox "日付入力が誤っています。正しく入力してください(入力されるまで繰り返します)"
GoTo label:
End If
MsgBox day & "で置換します"
'入力値をセルに入れる
Worksheets("年度ー月指定").Range("B8").Value = day
'入力値を年度/月に分ける
Worksheets("年度ー月指定").Range("B9").Value = (Year(day))
Worksheets("年度ー月指定").Range("B10").Value = (Month(day))
'-----------------------------------------------------------------------------
'置換する範囲の選択 (日付~全員分) 【点検】
'-----------------------------------------------------------------------------
Range("D1:AH109").Select
'-----------------------------------------------------------------------------
'置換作業
'-----------------------------------------------------------------------------
'年度
Selection.Replace What:=Worksheets("年度ー月指定").Range("B4").Value, Replacement:=Worksheets("年度ー月指定").Range("B9").Value, LookAt:=xlPart
'月
Selection.Replace What:=Worksheets("年度ー月指定").Range("B5").Value, Replacement:=Worksheets("年度ー月指定").Range("B10").Value, LookAt:=xlPart
''-----------------------------------------------------------------------------
'''置換後の値を置換前に投入 置換後の値を削除
''-----------------------------------------------------------------------------
''置換後の値を置換前に投入
' Worksheets("年度ー月指定").Range("B3").Value = Worksheets("年度ー月指定").Range("B8").Value
' Worksheets("年度ー月指定").Range("B4").Value = Worksheets("年度ー月指定").Range("B9").Value
' Worksheets("年度ー月指定").Range("B5").Value = Worksheets("年度ー月指定").Range("B10").Value
''置換後の値を削除
' Worksheets("年度ー月指定").Range("B8:B10").ClearContents
''-----------------------------------------------------------------------------
''保存のメッセージ
''-----------------------------------------------------------------------------
MsgBox "完了しました。必ず保存してください"
End Sub
置換を実施するマクロを作成したいです。
多くのフォルダを置換するため、「ボタン用」ファイルを作成し、
各ボタンを押すと各フォルダ内のマクロが実行されていくというものを考えています。
マクロ作成は初心者です。
置換の行は、「マクロの記録」から引っ張っています。
>上記のプログラムで実施したところ
4 月のファイルから5月のファイルに変換したら、
なぜか、読み込みファイルデータの値の5が6になっていてうまく置換されていません。
同様に5月→6月にすると、投入データの6が7になります。
>環境
大元のフォルダ:①置換用フォルダ
②置換元ファイル
①置換用フォルダ
・実行ファイル用
(ここで「点検ファイル用」ボタンを押したら、点検ファイルのマクロが始まる的な仕様です)
・点検ファイル(年度/月を指定し、指定されたものを読み込み、置換)
シートは「指定用のシート」「置換用(置換元フォルダと同じ形式)」のものがあります
「指定用シート」は、まず2020/01/01と入力すると
年度と月に分けてセルに設定しています
・保守ファイル
・完了ファイル
②置換元フォルダ
>
・2020年度「管理」.xlsx
・2021年度「管理」.xlsx
各月のデータがシートごとに管理されている(各シート名:4月/5月/6月・・・)
となっています。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんばんは
掲示のコードは選択範囲のデータが、B4セルの値と同じ値がB9セルの値に書き替えられ、同様にB5セルの値と同じ値がB10セルの値に書きられるもので
+1される処理はありません。
したがって事象を想像すると
書き替え先シートには参照式や関数式があり、該当部分は =?セル+1などとなっているのでは無いかと推察いたします。
余談ですが
記録マクロを元にとの事で仕方ないかも知れませんが、記録時に該当シートを記録できるように手順を工夫した方が良いです。
もし記録できなかった場合でも、書き直し、成型などをする時にシートなどを明示しましょう。
Range("D1:AH109").Select は、どのブックでどのシートでしょうか。
また、この実行コードは例えば
Worksheets("年度ー月指定").Range("B5").Valueが 3 の時に
2021/04/1(デフォルト)で実行した場合、書き替え範囲にある 例えば 3は4に 13は14に333は444に434は444になります。
これで問題ないデータなのでしょうか?疑問です。
完全一致のみ書き替えたり、月や年を加えたり、対象データにもよりますが、
そもそも、数式が入っているとしたら範囲でReplaceがで妥当なのかも
検討が必要と思います。
ご回答ありがとうございます!
①書き替え先シートには参照式や関数式があり、該当部分は =?セル+1などとなっているのでは無いかと推察いたします。
>すみません。
書き換え先の参照式に誤りがありました。ありがとうございます!
②記録マクロを元にとの事で仕方ないかも知れませんが、記録時に該当シートを記録できるように手順を工夫した方が良いです。
もし記録できなかった場合でも、書き直し、成型などをする時にシートなどを明示しましょう。
Range("D1:AH109").Select は、どのブックでどのシートでしょうか。
>
以下のように、シートが変わる部分を、明示する認識で大丈夫でしょうか?
Worksheets("設備点検").Select
MsgBox day & "設備点検シートを開きます"
Worksheets("設備点検").Range("D1:AH109").Select
③Worksheets("年度ー月指定").Range("B5").Valueが 3 の時に
2021/04/1(デフォルト)で実行した場合、書き替え範囲にある 例えば 3は4に 13は14に333は444に434は444になります。
これで問題ないデータなのでしょうか?疑問です。
完全一致のみ書き替えたり、月や年を加えたり、対象データにもよりますが、そもそも、数式が入っているとしたら範囲でReplaceがで妥当なのかも
検討が必要と思います。
>
入力した値(今回のコードでは「2021/05/01」)を
「2021年度」「5月」という表記への変更の仕方と、
変更後の置換の仕方がわからず、数値のみ置換するものにしております。
いろいろ探しては見たのですが、うまくいかず・・・。
【年度ー月指定シートの中身は】
現在「点検シート」の値
(行列) A :B
1: 年/月/日 2021/6/1
2: 年度 2021
3: 月 6
置換後の値
行列 A :B
1: 年/月/日 「2021/05/01」 ←入力値の記憶場所
2: 年度 「2021」
3: 月 「5」
このB4、B9には「年度」、B3、B10には「月」を入れて
それを置換したいとは思っているんですが・・・。
No.2
- 回答日時:
>補足は解決できました!
色々調べて試していけば、解決できると思っていました。
>②~\2021\2021年度管理表¥●月.xlsx に置換したいのですが
今のコード(「年度」「月」)だとフォルダ移動ができません。
フォルダを「2021」ではなく「2021年度」に変更する以外に手はないのでしょうか。
これは、ご質問が良く理解できないのですが、
セル範囲の文字列置き換えでなくファイルパスの文字列での書き替えです。
Replaceを使用したいのであれば、パスをString型変数に代入しておき
Replace 関数を使用してその文字列に書き替え処理をすれば良いです。
ファイルの移動やフォルダの作成などを希望なら
CreateObject("Scripting.FileSystemObject")などを使いと良いかも知れません。
いずれにしても書き替えたファイルをどのように扱うのかなどを明確にする必要があります。また、
既にご質問から離れるご質問であると共にコードにあるファイルパスは
Path = ThisWorkbook.Path であり、これは、VBA実行ブックと同じフォルダ内にある事を意味していますので、新しく保存したファイルに対してはこのVBAを実行しないと言う事になると思います。
そのあたりを整理して別のご質問としてスレッドをたててください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/21 13:29
- Visual Basic(VBA) Sheet2からオートフィルターで売上日を抽出した件数をカウントし、その件数をSheet1のセルB1 2 2023/01/12 12:24
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GoogleAppsScript文字列置換の...
-
VBA 置換文字がみつからない時
-
正規表現 特定の文字列を含む行...
-
csvデータ ダブルクォーテ...
-
PowerShellでテキストの空白行...
-
スペースで区切られた氏名から...
-
Perl での XML 置換について
-
ExcelVBA バッチファイル編集
-
VBA(Excel)でファイル内の文字...
-
c# ビルド直前にコードを置換で...
-
\\(円)記号を置換したい
-
TeraPadエディターの操作方法に...
-
正規表現で一括置換
-
Excel・ユーザーフォームの情報...
-
C#で空白行を削除する方法
-
特定の列のみ置換を行いたい
-
SQL IIF と REPLACE のやりかた
-
Eclipse 改行後のタブ
-
フォントの色を保持したままセ...
-
正規表現で、特定の文字列を含...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
各項目がダブルクォーテーショ...
-
VBA 置換文字がみつからない時
-
正規表現で、特定の文字列を含...
-
スペースで区切られた氏名から...
-
csvデータのダブルクォーテーシ...
-
csvデータ ダブルクォーテ...
-
GoogleAppsScript文字列置換の...
-
C言語でテキストファイルの内容...
-
正規表現 特定の文字列を含む行...
-
テキストボックスの文字列を置...
-
EXCEL警告「置換対象のデータが...
-
TeraPadエディターの操作方法に...
-
xmlファイル内の文字列置換
-
python 大文字小文字を区別しな...
-
C#で空白行を削除する方法
-
テキストファイル中の文字列の置換
-
Excel VBA 教えてください。 VB...
-
ハングルを日本語に置換
-
EXCEL VBA でCTRL+Fのダイア...
-
PowerShellでテキストの空白行...
おすすめ情報
Worksheets("年度ー月指定").Range("B8").Value = day
If Month(day) <= 3 Then
年度 = Year(day) - 1
Worksheets("年度ー月指定").Range("B9").Value = 年度 & "年度"
Else
年度 = Year(day)
Worksheets("年度ー月指定").Range("B9").Value = 年度 & "年度"
End If
月 = (Month(day))
Worksheets("年度ー月指定").Range("B10").Value = MonthName(月)
>「年度/月」にできました。ですが検索する文字が「●月月」になってしまいました
補足は解決できました!
しかし、
参照先が
①~\2020\2020年度管理表\●月 現在このフォルダのエクセルファイルを参照しているとして
年度が変更になった場合
②~\2021\2021年度管理表¥●月.xlsx に置換したいのですが
今のコード(「年度」「月」)だとフォルダ移動ができません。
フォルダを「2021」ではなく「2021年度」に変更する以外に手はないのでしょうか。