• 締切済み

マクロ【シート名に対応した文字を挿入・置換】

マクロ【シート名に対応した文字を挿入・置換】 御世話になります。 【D:\test】内に2つのエクセルファイル(Excel2003)があります。 ※1つ目のファイル名は【季節別表.xls】。 中には一番左端のシート名は【起動シート】で、その横は【spring】【summer】【autumn】【winter】という名前のシートが あり、すべてのシートにはサンプルの表がある。 ※2つ目のファイル名は【データシート.xls】。 中にはシート名【2008】のみが存在。 シート内には下記のような文字を入力している。 セルB2:シート名 セルC2:季節名 セルD2:気候 セルB3:spring セルC3:春 セルD3:暖かい セルB4:summer セルC4:夏 セルD4:熱い セルB5:autumn セルC5:秋 セルD5:涼しい セルB6:winter セルC6:冬 セルD6:寒い B2・C2・D2はシートの列が何の項目であるかがわかるために入力。 B3~6は【季節別表.xls】に存在するシート名を縦に入力。 悩んでいるのは【季節別表.xls】のシート名【起動シート】内にあるマクロボタンに入れるマクロです。 理想の処理の流れですが、 【データシート.xls】のセルB3のspringというシート名が【季節別表.xls】にあればそのシートに セルB3の右隣であるセルC3の文字列【春】を取得し、【季節別表.xls】のシート名【spring】のセルD35の文字列である 【今年の季節名は入学シーズンである。】の【季節名】と置換。 また、セルC3の右隣であるセルD3の文字列【暖かい】を取得し、 【季節別表.xls】のシート名【spring】のセルF70の文字列である【気候は気候状況。】の文字列【気候状況】と置換。 この処理が終わったら、今度は次の行を同じような処理を続け、最終的にはB列が空行になるまで続けられるマクロは 可能でしょうか? 何か簡単なサンプルコードがあれば助かります。 宜しくお願い致します。

みんなの回答

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

説明は丁寧に長く書いてあるが、読む側にはわかり難い。 下記に別の説明例を挙げてみる。参考にしてみて。 持論だが、説明とプログラム作成は密接に関連していると思う。 A.季節別表ブック   起動シート   Springシート   Summerシート   Autumnシート   Winterシート B.データシートブック   2008シート ーー 情報はデータシート(ブック)ににあり   その2008シートの   B列   C列  D列   シート名 季節名 気候   spring  春   暖かい   summer  夏   熱い   autumn  秋   涼しい   winter  冬   寒い (このようにエクセルの表式に書くと直観的に判りやすいよ) ========= 処理したいこと (1)「季節別表ブック」を開く(データシートブックも開く) (2)「季節別表ブック」の各シート名を調べる (3)その1つのシート名が、データシートブックの2008シート名のB列にあるか調べる。(あるはずしょうね。) (4)2008シートのB列でシート名が見つかった行の、C列の文字列(データ)で、季節別表のシートのD35セルの一部の特定の文字列を置換 (5)見つかった行のD列の、文字列(データ)で、季節別表のシートのD35セルの文字列の一部を置換 ===== コード作成の参考事項 (1)はVBAの本にもWEBにも書いてある。 (2)は下記を参考に Sub test02() Dim sh As Worksheet For Each sh In Worksheets MsgBox sh.Name Next End Sub MsgBox sh.Nameのところに(3)(4)(5)の処理を入れる。 (3)は上記で得たシート名がForNextでB列の各行を等しいかIF文で聞いて、一致した行を見つける。(この際は総当り法にしておくのが無難。) (4)(5)の置換は、置換操作をして、マクロの記録を採ってみて考えればわかる。 ーーー (6)1つのシートしか対象にしてないVBAに慣れた者には、難しいのは、2つのブックや多数のシートを扱うので、シートやセルを指定するとき、上位のオブジェクトのブックやシート名を明確にエクセルに判るように記述しないとうまく行かない。 ーーー 上記(6)を含め、質問の書き振りからして、質問者には前途多難と思うが、1つづつやるよりほかなかろう。   

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

Sub test() Dim wsDATA As Worksheet Dim ws As Worksheet Dim r As Range 'データシート.xlsの一番左のワークシート Set wsDATA = Workbooks("データシート.xls").Worksheets(1) With wsDATA 'データシート.xlsの一番左のワークシートのB3~B列の最終まで実行する For Each r In .Range(.Range("B3"), .Cells(Rows.Count, 2).End(xlUp)) On Error Resume Next '【spring】【summer】【autumn】【winter】という名前のシートをセット Set ws = ThisWorkbook.Worksheets(r.Value) On Error GoTo 0 '無事にシートが見つかれば、単語の置換を実行 If Not ws Is Nothing Then ws.Range("D35").Value = Replace(ws.Range("D35").Value, "季節名", r.Offset(, 1).Value) ws.Range("F70").Value = Replace(ws.Range("F70").Value, "気候状況", r.Offset(, 2).Value) End If Next End With End Sub ご参考程度に。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Excel(エクセル) VBA入門:セル範囲の指定方法 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html Excel(エクセル) VBA入門:繰り返し処理(For~Next,Do~Loop) http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_for_next.html Replace関数 http://www.officetanaka.net/excel/vba/function/Replace.htm ブック・シートが存在するか調べる http://www.officetanaka.net/excel/vba/tips/tips10.htm ご参考まで。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>マクロは可能でしょうか? 提示された条件のみであれば可能だと思います。 簡単なサンプルとは、理想の処理のどの部分についてですか?

beckfloyd
質問者

お礼

ご回答ありがとうございます。 >簡単なサンプルとは、理想の処理のどの部分についてですか? できれば最終的にはB列が空行になるまで続けられるところまでの処理のサンプルがほしいのですが、とりあえずは1行目の『【季節名】と置換。』までのサンプルでお願い致します。

関連するQ&A

  • マクロ(エクセルシートコピー先)に関して

    分かりましたら教えてください。 A.xlsのシートBを、新しいブックにコピーし移動するときに、そのブック名が、常にそのシートBのセルC3に入力されている文字の名前にするようにマクロを組みました。(....Filename:Range("C3")としています。) さらにC.xlsのシートDもその新しいブックにコピー移動させるマクロを追加したいのですが、コピー先をどのように指定すればいいのでしょうか。。

  • (エクセル)シート別に指定した文字列を検索・置換したい(マクロ使用)

    以下のようにsheet1で指定した文字列をそれぞれのシートで検索・置換するプロシージャを教えてください。 sheet1は処理したいデータを入力するシートとします。 以下のように指定します。 A列はシート名 B列は検索文字 C列は置換文字 A列------B列--C列 sheet2----A----B sheet3----B----A sheet4----C----B よろしくお願いします。

  • 別ファイルで用意されたデータを元に文字を一括置換するには?

    エクセル内の全シート、全セルにある文字をマクロで一括置換したいと思います。 置換したい文字は複数あり、その内容は別ファイル「置換.xls」に次のように記述されています。    A列   B列 1  等   など 2  有り  あり 3  無し  なし ※A列をB列に置換します。 ※置換の項目数は、実際には3つではなく、100近くあります。 どのようなマクロを書けばよいのかお教えいただけませんでしょうか? 具体的なコードでなくても、方向性だけを示していただいても助かります。 よろしくお願いいたします。 Excel2003を利用しています。

  • ExcelVBAでの文字列置換について

    ExcelVBAでの文字列置換について ExcelVBAは全く初心者のですが、下記の処理を早急に行う必要があり、質問させていただきます。 物品の使用者をエクセル管理しています。 シート1のA列に物品名、B列に現使用者名を入力しています。(約2000件) 一部の使用者に変更があった場合に、シート2に振替リストを シート2 A列=現使用者 B列=新使用者 と作成しています。 シート1のB列:現使用者から、シート2のA列:現使用者と同一な文字列を検索し、シート2B列:新使用者に置換するマクロはどのように書けばよいのでしょうか? 可能であれば、シート2のC列に置換結果を表示させたいです。

  • Excelの計算式内の文字列の一括置換は出来ますか

     Excelで、計算式の命令内の文字列を置換する方法はあるでしょうか。例えば、あるワークシートのセルで別のファイルやワークシートのセルを参照して計算している時、ほとんど同じ計算式で参照先だけを変えたい場合です。計算結果のワークシートのA列で、  A1=sum('G:\北海道'!A1:A100)  A2=sum('G:\北海道'!B1:B100)  A3=sum('G:\北海道'!C1:C100)・・・ となっているとします。つまり、北海道.xlsというシートの1から100までの列範囲の和を計算しているとして、B列には同様の青森県.xlsからの同じセル範囲の同じ計算、C列には岩手県.xlsからの同じ計算、D列には・・・というように、計算式が全く同様で、参照元のファイル名だけを変えたい場合です。  もう一つ、類似のものとして、計算結果のワークシートで、  A2=sum('G:\北海道'!B1:B100)  A3=sum('G:\北海道'!C1:C100)  A4=sum('G:\北海道'!D1:D100)・・・・ というように、計算式内の行や列を表す記号や数値を置換することは可能でしょうか。  同じような作業は出来るだけ簡単な操作でできる、というのが良いソフトのイメージなのですが、私が現在知る範囲では1つ1つ式を書き換えています。特にリンク貼り付けでやると、計算結果のワークシートでうまくコピーができません(上記では、北海道をB1で青森県に変えておいてそれをB2以下にコピーすると上手く行かない)。  宜しくお願い致します。

  • マクロで書式ごと置換

    マクロで書式ごと置換 いつもお世話になります。 今回は標記の件についてお伺いしたく質問を投稿させていただきました。 現在、[D5:CN93]に配置している文字列データを記号に置換する作業をおこなっています。置換マクロに関してはreplaceを使用し、今のところ問題なく動いています。作業工程としては、上記の範囲にあるデータの一覧を作成し、どのデータをどのような記号に置き換えたいかの一覧を附します。 例)  [A1](置換したい記号)   [B1](置換したい文字列)      ○          イチゴ      ◆          バナナ    [D5:CN93]置換対象の文字列例    イチゴ,バナナ マクロでは置換したい文字列、置換したい記号の値をreplace関数に与えて、上記の範囲にあるセル1つ1つに置換をかけていく、というものです。 今までは、文字列の書式は問題ではなかったのですが(置換後に一括変換)、上のほうから「イチゴを赤い○、バナナを黄色い◆のように、色をつけられないか」といわれました。 置換ウィザードを試してみたのですが、セル全体の文字列の色が変わってしまいうまくいきませんでした。 またreplaceで色情報も置換する方法もわかりません(無いのかもしれませんが)・・・ そこで「色情報を持たせたまま、文字列の一部を置換」する方法を教えてください。 これまでのデータを使用したいので、データは以下のように並んでいます。  [A1](置換したい記号)   [B1](置換したい文字列)     赤色の○         イチゴ     黄色の◆         バナナ    [D5:CN93]置換対象の文字列   イチゴ,バナナ

  • エクセルマクロ  文字の置き換え

    SHEET1のA列B列C列のセル内の文字をD列の#、$、%に置き換え E列に書き出す方法か又はSHEET2又はメモ帳に書き出すマクロを 誰か教えてください。

  • マクロ(複数文字置換)についての質問です。

    現在、ExcelのA列に置換前の文字、B列に置換後の文字が入っているシート(シート名:"辞書")があります。 そのシートを辞書的役割で使用し別のシートの内容を置換したいと考えています(現在候補が1000文字程度あり、1つずつ置換をすることが難しいです) また、完全一致のみの置換、大文字とから小文字の置換も可能にし、件数も何件存在するかわかりません。 例:ABCをabcに変換したい場合、 ○ABC→abc ×ABCDEF→abcDEF のような感じです。 しかし、1つのセルの中に空白がある場合は置換可能とします。 例:ABC DEF→abc DEF このようなことは可能でしょうか? 何卒よろしくお願いいたします。

  • Excelマクロで置換

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

  • 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) →それぞれ拠点で使っているシート名に置換する ような方法があ るか?(存在しない参照シート名のまま書き込むとファイル指定の ダイアログが開くので、開かないような汎用的な記述を一旦仮置き できないか?) 以上宜しくお願いしたします

専門家に質問してみよう