• ベストアンサー

Excel 入力して置換するマクロ

Excel 入力して置換するマクロ 同一書式で作成された表がある複数の書式シートのデータを、同一ブック内にあるデータ集約するための集約シートが「表 あ」にあります。 都合上、集約シートには表は、「表 あ」しかなく、1つの書式シートのデータのみしか表示していません。 書式シートのデータを参照する計算式内のシート名にあたる『Sheet1!』の部分を置換で他の書式シートに変えたいのですが、対象シートが複数あり上、誰でも置換をスムーズに行いたいので、インプットボックスにシート名を記載すれば置換できるマクロが作れないのか試行錯誤しております。 良い方法があればお教え下さい。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.6

NO4です。 連続していない範囲は、Unionで1文にします。 Union(Columns("C"), Columns("E")).Select

15daifukufuku
質問者

お礼

ありがとうございます。 「Union」を使うんですね。 この質問をしてからたくさんのことを学びました。 本当にありがとうございます。 ちなみに、やっとデータが完成しました。 いつか質問しなくても自力で望むマクロが作成できるように、これから精進いたします。 また、何かありましたらよろしくお願いいたします。

その他の回答 (5)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

>>できれば、入力キャンセル時はExitした方が良いと思う。 > >??どうすれば「Exit」とできますか? InputBox 関数で行うとしたら、InputBox 関数自体が過去のものですから、その判定も、レガシー(過去)関数--StrPtrでないと判別できません。現在のVBAでは、InputBox メソッドを使います。 また、入門者の人には強制しませんが、基本的に、対話型は、必ず、離脱方法のコードを書きます。また、想像できるエラーつぶしておくのも基本です。例:InputBox(関数), Application.InputBox (メソッド) > Selection.Replace What:="*!", Replacement:="入力したシート名", LookAt:=xlPart, _ 「'(アポストロフィ)」で、置換対象を明確に範囲づけるというのはアイデアで分かりますが、もともと考えすぎで、もう少し単純に考えたほうがよいですね。そうでなければ、Sheet名を探し出す方法はありますが、かなり難しくなります。 以下は、Sheet名のチェックはしていますが、同じワークシート内だけのチェックです。 '// Sub Test1() Dim srchTxt As Variant Dim repTxt As Variant Dim dum As Variant Dim rng As Range   On Error Resume Next   Set rng = ActiveSheet.Cells.SpecialCells(xlCellTypeFormulas)   If rng Is Nothing Then MsgBox "対象セルが見つかりません。", vbExclamation: Exit Sub   srchTxt = Application.InputBox("検索値を入力してください" & vbCrLf _    & "例:" & Sheets(1).Name, "検索値", Type:=2)   If VarType(srchTxt) = vbBoolean Or Trim(srchTxt) = "" Then Exit Sub   'シート名のチェック   dum = Worksheets(srchTxt).Range("A1").Value   If Err.Number > 0 Then MsgBox srchTxt & vbCrLf & "シート名がエラーです。", 16: Exit Sub      repTxt = Application.InputBox("置換値を入力してください" & vbCrLf _    & "例:" & Sheets(2).Name, "置換値", Type:=2)   If VarType(repTxt) = vbBoolean Or Trim(repTxt) = "" Then Exit Sub   'シート名のチェック   dum = Worksheets(repTxt).Range("A1").Value   If Err.Number > 0 Then MsgBox repTxt & vbCrLf & "シート名がエラーです。", 16: Exit Sub  On Error GoTo 0    rng.Replace What:=srchTxt, Replacement:=repTxt, LookAt:=xlPart End Sub

15daifukufuku
質問者

お礼

ご回答ありがとうございます。 本当に入門者も入門者なので、みなさまにご迷惑おかけしております。 いろいろご指摘頂きありがとうございます。 質問する前にいろいろ調べたおり、Wendy02 様にお教え頂いたようなマクロを(雰囲気が似てるの意味)発見したのですが、まったく理解不能で何かあった時に自己修正ができないため、スルーしていました (>_<;) マクロになれるためにも、お教え頂いたマクロを頑張って解読して勉強してみます。 本当にありがとうございます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

NO3です。 innputboxコードの直後に以下のコードをお試しください。  If 入力した値 = False Then Exit Sub キャンセルなのでエラーを出す必要はないと思いますがどうしてもエラーメッセージを表示したいのであればMsgboxコードで表示して下さい。

15daifukufuku
質問者

お礼

ありがとうございます。 作業をしながら少しづつですが理解しております。(本当に少しづつです) Columns("C:C").Select 上記で指定している「C列」を、「C列」と「E列」など隣接しない2列を指定することは可能ですか? いろいろやってみているのですが…もう少し頑張ってみます。 本当にありがとうございます。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO1です。 NO1です。 前回、置換の共通文字列をsheetと!で間の文字をワイルドカードとしてSheet*!で提案しました。 回答補足から実際のシート上のシート名は引用符で確定できるのであれば、以下のようなコードで如何でしょうか。 因みInputboxの第3引数にディフォルトシート名(存在するシート名称)を指定しておけば、入力の補足になりますが如何でしょうか。 できれば、入力キャンセル時はExitした方が良いと思う。 Sub Sample() Dim 入力した数値 As Variant 入力した数値 = InputBox("シート名を入力して下さい", , "xxxxx") Columns("C:C").Select Selection.Replace What:="'*'", Replacement:="'" & 入力した数値 & "'", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub

15daifukufuku
質問者

お礼

何度もありがとうございます。 出来ました!!本当にありがとうございます。 >因みInputboxの第3引数にディフォルトシート名(存在するシート名称)を指定しておけば、入力の補足になりますが如何でしょうか。 本当ですね。(>_<;)/ 不特定の方が利用するので、採用させていただきました。ありがとうございます。 >できれば、入力キャンセル時はExitした方が良いと思う。 ??どうすれば「Exit」とできますか? また、ずうずうしく追記させていただきますが、何も入力せずに実行したときに、シート名なしで置換されないでエラーを出すようなことができますか?

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

一般化しようとして、質問文の表現が抽象化していて、細部が良くわからない。回答を依頼するなら 実例でも挙げて回答依頼すべきと思う。 ーーー 書式シートと書式をつけるのはなぜ。シートで良いのでしょう。エクセルの「書式」と、変な誤解をする。 ーー 言い換えると ブックAにSheet1、Sheet2・・が在る。 ブックAには集約シートSheet11(11は仮の仮定)にSheet1のデータを集落したデータが在る。 ここには関数式が入っている、のかな。いま既にSheet1とかの限定をした式が入っているのか。 ブックAのSheet11の集計表Xを別セル範囲に、それぞれ元データシート数だけ(集計表Y、Z・・)コピーして、これらがSheet2・・の集計をおのおの行うように式をかえたいということか。 まず集計表Yのセル範囲で、Sheet1!で限定している部分をSheet2!に置き換えてみて、 うまく行くかやってみてはどうでしょう。質問はそれからだ。 ちなみに、数式の部分も置換は可能。置換対象で数式を指定。 ーーー 私が誤解している点があれば、後の回答者のために、指摘しておいてください。 ーー VBAでやるなら、このていどのことならマクロの記録の修正で出来る。上記の操作をマクロの記録を取り、Sheet3以下に使えるよう修正すれば仕舞いでしょう。

15daifukufuku
質問者

お礼

ご回答ありがとうございます。 すみません。 詳細画像を添付したのですが、画像添付のマークは出るものの表示ナシの状態でして…おさがわせいたしました。補足にて再度説明させていただきます。

15daifukufuku
質問者

補足

*「集約シートSheet11」 の置換対象とたる列には下記の数式が入力されております。   =IF(ISERROR(INDIRECT("'シート名'!D2")),"",INDIRECT("'シート名'!D2")) *「データシート」にはそれぞれ数字や数式、ではなく文字が入力され、参照元は1列のみです。 やりたいことは、「集約シートSheet11」 において、マクロなので置換対象とたる列に記載された数式内のシート名を示す箇所を、インプットボックスに変更したい「データシート」名をいれることにより一発置換がしたいのです。 マクロを使い始めて数日の初心者のためご迷惑をおかけしておりますが、よろしくお願いいたします。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 置換の検索文字列を「Sheet*!」、インプットボックスの入力文字列を置換文字列にする方法は如何でしょうか。

15daifukufuku
質問者

お礼

早々のご回答、ありがとうございます。 Dim 入力したシート名 As Variant     入力した数値 = InputBox("シート名を入力して下さい")   Columns("C:C").Select   Selection.Replace What:="*!", Replacement:="入力したシート名", LookAt:=xlPart, _    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _    ReplaceFormat:=False End Sub ※C列に入っている数式  =IF(ISERROR(INDIRECT("'シート名'!D2")),"",INDIRECT("'シート名'!D2")) 上記内容で作成したのですが…失敗でした。 「"*!"」と、「"入力したシート名"」の箇所をいろいろ変えてみたものの惨敗でした。 (結果は変化なしか、↓こんな感じでした) ■入力したシート名!入力したシート名!$D2")) ■=IF(ISERROR(INDIRECT("入力したシート名D2")),"",INDIRECT("入力したシート名D2")) 再度、お助けいただけますでしょうか?

関連するQ&A

  • Excelマクロで置換

    Excelマクロで置換 セルA1に6桁・スペース・24桁の数字が入っています。 最初の6桁に130,397,430,440が含まれているシートを選択 そのシートの中に "ああああ"があったら"ああああい"に "いいいい"があったら"いいいいう"に "うううう"があったら"ううううえ"に と置換をするマクロを書きたいと思っています。 置換する対象の文字列は多いので別マクロで作成し呼び出したいと考えています。 シートは1ブックに30シート程。何シートあるかはブックによって変わります。 現在マクロの記録を使って試行錯誤しているのですが なにぶん初心者なのでなかなかうまくいきません。 どなたかご教授頂ければと思います。

  • エクセル:置換しないと参照できない

    アクセス2010からエクスポートしたエクセル2010ファイルで、エクスポートしたデーターの入ったシートを参照する式を別のシートに入れてる(例えば=シート名!A1)のですが、新たにエクスポートしたときに前のデーターが残っており、置換で”=シート名!A1”の一部をそのまま置換すると新しいデーターに置き換わります。(例えば”ト”を”ト”に置換) 自動的に新しいデーターを参照するにはどうしたらよろしいでしょうか。 よろしくお願いします。

  • 置換マクロ 続きです…

    http://okwave.jp/qa/q8444285.html ↑こちらでご質問をさせていただき、置換シートA列に置換元、B列に置換後データを入れておくことで、置換が一度にできるマクロを作っていただいたのですが、 ブック全体ではなく、現在アクティブなシートだけ、置換をすることは可能でしょうか…? いま、このマクロを実行すると、ブック全体が置換され、元の置換シートのA列や、置換できればしたくないシートもすべて置換されてしまいます。 回答を閉め切ってしまい、新規でご質問となってしまいました。 すみません、、自分でもいろいろと調べてやってみたのですが、 どうしてもよくわからず… どうぞ、よろしくお願い致します。 ● 作っていただいたマクロ ● sub macro1()  dim h as range  for each h in worksheets("置換").range("A1:A" & worksheets("置換").range("A65536").end(xlup).row)   cells.replace what:=h.value, replacement:=h.offset(0,1).value, lookat:=xlpart  next end sub

  • エクセルマクロで条件に当てはまるシートの名前

    何日も試行錯誤しましたが、わからないので教えてください。 あるファイルがあります。 そのファイルには数十枚のほぼ同じ形のデータが入ったワークシートがあります。 それぞれのワークシートには、ある範囲(例 A5:D10)にデータが入っていたりいなかったりです。 そこで、その範囲にデータが無ければ、別のブックの例えば「リスト」というシートに一覧にして、そのシートの名前を書き出したいのです。 それをマクロで記述するやりかたがどうやってもうまく行きません。 どうかお教えください。

  • エクセル2003 マクロ 日付を入力して・・・

    いつも回答して頂き、とても感謝しております。 今回の質問内容ですが、 インプットボックスで始まりの日付と終わりの日付を入れると、その日付に関連したブックを開き、そのブックの特定のシートをまとめファイルにまとめていくというマクロについてです。 で、分からないのは、始まりの日付と終わりの日付を入れると、その日付に関連したブックを開ける記述についてです。 そのブックは、『○○○○ 2013年8月』 という感じのブック名です。 始まりの日付が2013年5月1日で、終わりの日付が2013年8月17日だった場合、 『○○○○ 2013年5月』『○○○○ 2013年6月』『○○○○ 2013年7月』『○○○○ 2013年8月』 と4つのブックを開けていかなければいけません。 この記述方法が分からないので教えて欲しいです。 1つにまとめるブック名は 『まとめ』 です。 1つにまとめるシート名は 『履歴まとめ』 です。 たいへんお手数だとは思いますが、宜しくお願い致します。

  • EXCELのシートのマクロ操作について

    EXCELについて質問がありまして、よろしくお願いします。 複数のシートがあるブックがあり、それを、それぞれシートごとに別のブックにしたいと思っています。 マクロやVBAなどを使って簡単に出来るものでしょうか? マクロ集などのサイトを探してみましたが、上手く見つけることができませんでした。 シート名をブック名として引き継いで保存できればベターだと思っております。それが出来なくてもブックとして起こせれば大丈夫です。 何かわかられましたらお教えいただけますと幸いです。 どうぞよろしくお願いします。

  • エクセルのマクロ(大量データを置換する方法)

    マクロについてお詳しい方がいらっしゃれば ご教授頂きたいです。 シート1のA1~C100に入力されているデータすべてを 対象に、 シート2のA1が検索されれば→B1に置換       A2が検索されれば→B2に置換       ・・・・・ というように、別シートを参照して置換をさせたいのですが このようなことはできるのでしょうか。 配列を利用するやり方は、他のご質問で拝見致しましたが 置換する内容が変わりやすいので、編集の利便性を考えて 上記のようにしたいと思っています。 以上、知見のある方、お知恵をお貸し頂けますでしょうか。

  • エクセルのマクロでシートを表示させる

    マクロ初心者です。 1つのブックに20シート入っているのですが、 チェックBOXにチェックを付け、該当するシートのみを表示させるマクロを教えてください。 sheet1以外の下記のシートA~Dは非表示になっており sheet1にはシート名 A B C D というチェックBOXがあり、 例えば、Bにチェックを入れるとBのシートが表示され、 AとDなど複数チェックが入るとチェックしたシートが表示される様な マクロがありましたら、教えてください。 マクロの記録で読み込ませているのですが、複数シートの為、限界を感じております。 よろしくお願い致します。

  • エクセルマクロのことです

    通常使っていたマクロを間違えて消してしまい、その上再構築できなくて困っています。 こんなマクロだったですが。 ブック内に複数のシートが入っています。新しくSheetを追加してA2セル(他のセルの時もあります)をアクティブにします。 Alt+F8→実行でA2セルから下へ、そのブック内の全ての「シート名」が書き出されるというマクロだったのです。 マクロ初心者です、どなたかアドバイスをお願いします。

  • EXCELで参照シート名含む計算式の変更マクロ

    マクロを作成しておりますして、わかりづらいか質問もしれませんが宜しくお願いします。 (1)マクロを配布し先方(複数拠点)で持っているブックに変更をかけ  たい。 (2)そのブック内には複数シートがあり、計算式で他シートを参照して  いる。 (3)その計算式を変更かけたい。が(2)でいう参照シートのシート名を各  拠点にて変更しているので、計算式も変更後のシート名が入って  いる。 例えば、 シート1のA1セルに「=(xxxxx)!B1/C5」という式を埋め込みたい。    ※(xxxxx)はシート名。 でも、(xxxxx)のシート名は拠点によってシート名がことなることが 問題。尚、シート名以降の計算式は全拠点共通。 そこで、こんなことがやれればのイメージですが イメージ1: シート1の他のセル(D1)で(xxxxx)と同じシート名を参照している 式が必ず存在している。拠点毎にシート名は異なるがセル(D1)の 場所は共通。 このセル(D1)の式からシート名を抽出し、上の「=(xxxxx)!B1/C5」 の(xxxxx)に入れて、シート1のA1セルにこの計算式を記載する マクロを作る イメージ2: もし「=(xxxxx)!B1/C5」の(xxxxx)部分に仮名称を入れたものを マクロでシート1のA1セルに書き込んだあと、各拠点にて(xxxxx) →それぞれ拠点で使っているシート名に置換する ような方法があ るか?(存在しない参照シート名のまま書き込むとファイル指定の ダイアログが開くので、開かないような汎用的な記述を一旦仮置き できないか?) 以上宜しくお願いしたします

専門家に質問してみよう