• ベストアンサー
  • 困ってます

エクセルの文字列置換マクロに関するご相談

下方のマクロを実行することにより、 文字列リストの内容に基づいて、 別シート(作業)内の文字列を変換することができます。 文字列からコード値へ変換することを目的にマクロを埋め込んだのですが、 別シート(作業)の文字列をコード値に変換した際、3桁くぎりのコード値が並んだ場合に、 自動で数値として認識されてしまいます。 ※別シート(作業)のセルを文字列し設定しても発生します。 プログラムで回避手段があるようでしたらご教示いただければ幸いです。 例)文字列リストシート A B さる 10 ぞう 15 ごりら 101 きりん 102 わに 103 かば 104 マクロ実行前の作業シート A さる,ぞう ごりら ごりら,きりん,わに さる,ごりら マクロ実行後の作業シート A 10,15 101 101102103 10101 上記マクロ実行後のシートの3~4行目のように、 カンマが取れることを防ぎ、文字列として代入したい所存です。 <マクロ> Sub 文字列リストに基づき連続して置換する() i = 2 Do x1 = Sheets("文字列リスト").Cells(i, 1) x2 = Sheets("文字列リスト").Cells(i, 2) Sheets("作業").Cells.Replace _ What:=x1, Replacement:=x2, _ SearchOrder:=xlByColumns, MatchCase:=True i = i + 1 Loop Until Sheets("文字列リスト").Cells(i, 1) = "" End Sub ご教示いただければ幸いです。 よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数778
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1
  • moon00
  • ベストアンサー率44% (315/712)

力技ですが・・・ 文字列として認識されるよう置換される数字の前に「'」をつけて置換し、 その場合、「,」後ろの文字置換に関しては「'」が余計なので、 最後に「,'」を置換という方法です。 Sub 文字列リストに基づき連続して置換する() i = 2 Do x1 = Sheets("文字列リスト").Cells(i, 1) x2 = "'" & Sheets("文字列リスト").Cells(i, 2) Sheets("作業").Cells.Replace _ What:=x1, Replacement:=x2, _ SearchOrder:=xlByColumns, MatchCase:=True i = i + 1 Loop Until Sheets("文字列リスト").Cells(i, 1) = "" 'このままだと2つ目以降の置換では「'」が表示されるので「,'」を「,」に置換 x1 = ",'" x2 = "," Sheets("作業").Cells.Replace _ What:=x1, Replacement:=x2, _ SearchOrder:=xlByColumns, MatchCase:=True End Sub

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご教示くださいまして、ありがとうございました。 おかげさまで問題が解決致しました。 重ねてお礼申し上げます。

その他の回答 (1)

  • 回答No.2
noname#203218
noname#203218

私は2007ですが、問題なくマクロは実行しますね。カンマが無くなるような事は無いです A列の文字列の後にカンマが入ってるなんて事はありまんよね? 変数X1をStrで文字列指定してみては? Str指定すると空白が挿入される事があるのでTrimで空白削除 What:=x1, Replacement:=Trim(Str(x2)),_

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご教示くださいまして、ありがとうございました。 Office 2010を使用しておりますが、同バージョンだと解決しませんでした。 バージョンによって差があるようです。

関連するQ&A

  • Excel 検索・置換マクロ

    検索する文字列は、AH4のセルにかいている数値とし 置換後の文字列を“無し”にしたいです。 これを実行するマクロを教えてください。 何卒よろしくお願いしますm--m Excel2003

  • Excel2002 マクロで置換する際の分岐

    Excel2002でシート内の 特定の文字列を削除するマクロを 作成しようと考えています。 開くシートの内容は毎回決まっていません。 文字の削除は Cells.Replaceを使用して"あいうえお"→""のように行っています。 このような処理を行っている場合、開くシートによっては "あいうえお"という文字列が見つからない為エラーが出ます このエラーを回避にはどのように実装すればいいのでしょうか? ※もし特定の文字を削除する方法で別の方法があるようでしたら 教えていただけると助かります。

  • エクセルで閉じるときのマクロ

    あるエクセルファイルがあり、 その一枚のシートにはオートフィルタ (A~Z列まで)を使用しています。 【質問1】 ファイルを保存して閉じる際、 オートフィルタで抽出したものを 「すべて」に戻す、 つまりなにも抽出されていない(=左端の行番号が黒字) に戻すマクロはどこにどのように書けばよいでしょうか? オートフィルタを戻すマクロは、 'オートフィルタのあるシートを選択 Sheets("買取リスト").Select 'T列のオートフィルタを「すべて」にする Selection.AutoFilter Field:=22 というところまでは理解できました。 【質問2】 上記のマクロを Sheets("顧客リスト") から、Sheets("商品リスト")へ移動した際、 ボタン等を使用せずに、 (ただ、下のタブをクリックするだけで) 実行させることは可能でしょうか? 可能であれば、どこにどのように記述すれば よいでしょうか??  よろしくお願いします。

  • マクロ 文字列の比較について質問

    いつもお世話になっています。 マクロの文字列の比較方法について質問致します。 異なるシートの文字列を比較して、一致したら処理をするというマクロを作っているのですが、文字列の比較がうまくいきません。 解る方がいましたらアドバイスをお願いします。 Rangeの使い方がおかしいのでしょうか? For L = 1 to LAST step 1 If Range(Sheet1.Cells(L, 1)).Text = Range(Sheet2.Cells(M, 2)).Text Then ・ ・ ・ end if ※Mは定数です。

  • Excelマクロで置換

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

  • エクセルのマクロで文字の置換について

    エクセルのマクロを使った文字の置換についてお聞きしたことがありましす。 やりたいイメージは例として添付の画像としてアップしましたが、 ・エクセルシートに英数文字列の表がある(例では2行2列ですが、実際は6行48列ぐらいです) ・その表を各英数文字列の間に半角カンマ","を入れて、メモ帳に貼り付けたい   ※実際メモ帳に貼り付ける動作は手動で行うので、クリップボード上で「各英数文字列    の間に半角カンマ","が入っている状態」で構いません。 ・各英数文字列の最初の2文字は必ず"0a"、その後の英数字は3桁または4桁です。 ちなみに、エクセルシートで英数文字列の表をそのままコピーしてメモ帳でペーストすると 各英数文字列の間にスペース(空白)が入ってしまいます。 その後、メモ帳で置換などを使い半角カンマ","を入れてもいいのですが、そこまでをマクロで行いたいと思っております。 上記のことがそもそもエクセルのマクロで出来るかどか分かりませんが、なにか有用な方法がございましたらご教授お願い致します。  ※使用OS:Windows7、エクセルバージョン:2007

  • 文字列を取り出して入力するマクロ

    A列に 「・・・・・第1・・・10:00・・・」 「氏名」 「氏名」 「・・・・・第2・・・10:30・・・」 というふうにで文字列が入っています。 A列に第〇、時間、が入っていたら、A列に第〇、B列に時刻、のみを入力したいです。・・・・には扱うリストによって、文字列が異なるので、置換で削除ができません。また、関数だとA列に直接入力できないので、他の列に入力してからAとBに移動しないといけないと思いますので、マクロでやりたいです(この作業を毎日のようにやらないといけない)。どうか教えてください。

  • EXCEL マクロにて

    EXCELにて質問があります 別シートのピンクという文字列をB列から探すマクロを作成しました Private Sub CommandButton1_Click() Set aaa = Sheets("sheet1写真").Columns(2).Find("ピンク").Address(False, False) MsgBox aaa Application.Goto Sheets("Sheet1写真").Range(aaa) End Sub このマクロを実行しても型が一致しませんと言うエラーが出てしまいます 何がいけないのかさっぱりわかりませんどうかご教授お願いします

  • Excelの文字列検索

    Excelの初心者です。申し訳ありませんが、次の件でどなたか教えていただけませんか? エクセルシートには、例えば下記のような文字列の並びがあります。      1       2       3    … 1  文字列11  文字列12  文字列13 2  文字列21  文字列22  文字列23 … 各セルはプルダウンリストにて幾つかの異なった文字列がリストアップされてあります。 各セルの文字列をリストから選び、4列目以降にリストの組み合わせに完全に合致するような結果を示したいと考えております。このようなシートを作成するにあたり、御知恵をいただければありがたく思います。 上記の件、どうぞよろしくお願いいたします。

  • エクセルのブックを開いた時にマクロを自動定期に実行したいのですが。

    エクセル97でブックを開いたときに、自動的にマクロを実行させたいのですが、どのようにマクロを記述すればいいのか教えて頂けませんか。 sub autorun() sheets(2).select sheets(1).cells(2,2)=cells(5,5) end sub のように、シート2のある数値をシート1のセルに自動的に貼付したいのですが。 このマクロは自動的には実行されませんので、どうすれば自動的に実行するようにできるのかが知りたいのですが。 よろしくお願いします。