エクセルマクロで文字の置換方法

このQ&Aのポイント
  • エクセルのマクロを使った文字の置換についてお聞きしたいです。エクセルシートに英数文字列の表があり、各英数文字列の間に半角カンマを入れてメモ帳に貼り付けたいです。
  • 問題は、エクセルシートで英数文字列の表をコピーしてメモ帳にペーストすると各英数文字列の間にスペースが入ってしまうことです。マクロを使用して、スペースを除いて半角カンマを挿入する方法を教えてください。
  • 使用するOSはWindows7で、エクセルのバージョンは2007です。エクセルマクロを使って効率的に文字の置換ができるかどうかも教えていただけると嬉しいです。
回答を見る
  • ベストアンサー

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

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

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

  • ベストアンサー
  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.3

作業ブックやらテキスト保存やら必要無いパターンもどうぞ。 言ってしまえば、クリップボードに直接渡すやり方です。 (厳密に言うとちょっとだけ違いますが、気にしなくてOKです。) Sub CBSample() Dim buf As String, CB As New DataObject With CB   .SetText ""   .PutInClipboard End With For i = 3 To Range("C3").End(xlDown).Row   buf = ""   For j = 3 To Range("C3").End(xlToRight).Column     If buf = "" Then       buf = Cells(i, j).Value     Else       buf = buf & "," & Cells(i, j).Value     End If   Next     With CB       .GetFromClipboard       .SetText .GetText & buf & vbNewLine       .PutInClipboard     End With   Next End Sub ただし、「Microsoft Forms 2.0 Object Library」の参照が必要です。 ツール→参照設定 から探してチェックを入れるか、 (適当に)ユーザーフォームを一つ作ると参照に追加されます。 このユーザーフォームは、白いままで大丈夫ですし、すぐに解放しても大丈夫ですよ。 詳細は別途お調べくださいませ。 あ、データの範囲をC3セルから  「3行目のデータがある一番右の列」  「C列目のデータがある一番下の行」 と設定していますので、ここら辺は適当に加工くださいませ。

hostos
質問者

お礼

ありがとうございます。 まさに求めていました方法でした! No.4の回答も参考にさせて頂きます。

その他の回答 (3)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.4

Sub CBSample() Dim buf As String, CB As New DataObject   With CB     .SetText ""     .PutInClipboard   End With   For i = 3 To Range("C3").End(xlDown).Row     buf = ""     For j = 3 To Range("C3").End(xlToRight).Column       If buf = "" Then         buf = Cells(i, j).Value       Else         buf = buf & "," & Cells(i, j).Value       End If     Next     With CB       .GetFromClipboard       .SetText .GetText & buf & vbNewLine       .PutInClipboard     End With   Next '  If MsgBox("メモ帳を起動しますか?", vbYesNo) = vbYes Then '必要ならどうぞ     Shell "C:\windows\NOTEPAD.EXE", vbNormalFocus '      For i = 1 To 1000    '擬似Wait 必要に応じて増やす '        DoEvents '      Next     SendKeys "^V", True '  End If End Sub オマケです。 メモ帳を起動して、貼り付けます。 SendKeysを使っちゃっているので、 PCによっては挙動が怪しくなる可能性もあります。 おかしいなと思ったら、擬似Waitの数字を増やせばなんとかなるかもしれません。 最近のPCだったら大抵は無くても大丈夫だと思います。 現状はコメント扱いをしていますので、 必要と思ったら各行頭の「 ’」を削除してお使いください。 ちなみに現状でのコードでセル数10000セル、メモ帳起動まででも 多分、気にならない速度ですよ。

回答No.2

保存したいデータ範囲のセルがC2~Z10であるとして、 それを.txt形式のファイル(AAA.txt)として保存するマクロと、 そのデータを.xls形式のファイル(BBB.xls)に保存したいデータ範囲と同じ位置に 書き込むマクロを書きます。 AAA.txtのFullNameをC:\XXX\YYY\AAA.txt BBB.xlsのFullNameをC:\XXX\ZZZ\BBB.xlsとします。 Dim A,,AA,BB AA="C:\XXX\YYY\AAA.txt" BB="C:\XXX\ZZZ\BBB.xls" 'ファイル(AAA.txt)として保存するマクロ Open AA For Output As #33 '33は任意(私の趣味) For A =2 To 10 Write #33,Cells(A,3 ), Cells(A, 4), Cells(A, 5), Cells(A,6) _ , Cells(A, 7), Cells(A,8), ・・・・・・・・・・・・・, Cells(A,26) Next A Close #33 'ファイル(BBB.xls)に書き込むマクロ Open BB For Input As #34 '34は任意(私の趣味) A=2 Do While Not EOF(34) Input #34, Cells(A,3 ), Cells(A, 4), Cells(A, 5), Cells(A,6) _ , Cells(A, 7), Cells(A,8), ・・・・・・・・・・・・・, Cells(A,26) A=A+1 Loop Close #34 AAは自動保存されますが、BBは手動保存です。 BBは用紙と考え事前に用意しておきます。 その際、データ書き込み位置の選択は自由です。 保存したいデータは必ずしも連続している必要はありません。 読み込みたいデータは連続した形式で読み込まれますので、 欲しくないデータを処理する措置が必要です。(データを書き込んだ後""にするとか) マクロの作動速度は極めて速いので驚かないように。

hostos
質問者

お礼

ありがとうございます。 ファイルに保存するところのマクロはとても参考になりました!

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

仮に、シートを追加して、データの部分のみコピーします。 そのまま、名前をつけて保存 ファイルの種類を CSV(カンマ区切り)を選択して 適当な場所に、適当な名前で保存してみてください。 ご希望のテキストファイルが出来ます。 マクロが必要であれば、マクロの記録で得られるはずです。

hostos
質問者

お礼

ありがとうございます。 実はこの方法で試しましたが、ファイルへの出力はやりたくなかったので 他の方法を探していました。

関連するQ&A

  • Excelマクロで置換

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

  • 置換のことで

    エクセルの置換のVBAのことですが。 あるシートに沢山の文字列が入力されています。 abcという文字列が含まれるセルの最後の部分は、必ず以下のようになります。 カンマ 半角スペース 数字 カンマ 半角スペース 数字  閉じカッコ  ,             13    ,            56       ) 数字はばらばらで、1桁か2桁のどちらかで0はないです。 このような状況で、閉じカッコの左側の数字を全て 1 に置換するVBAが知りたいのですが。

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

    下方のマクロを実行することにより、 文字列リストの内容に基づいて、 別シート(作業)内の文字列を変換することができます。 文字列からコード値へ変換することを目的にマクロを埋め込んだのですが、 別シート(作業)の文字列をコード値に変換した際、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 ご教示いただければ幸いです。 よろしくお願いいたします。

  • エクセルシートの文字列加工について

    エクセルのシートのA列に"全角ひらがな漢字"の文字列と"半角英数"の文字列を含むセルが縦に並んでいます。約200行。 ■この中から、"全角ひらがな漢字"の文字列を右となりのB列に、"半角英数"の文字列をさらに右となりのC列に、それぞれコピーしたいのですが、関数・マクロなどでいい方法がありましたら教えて下さい。 ■それから、半角英数文字列のC列から、""で囲まれた文字列のみをさらにD列にコピーしたいのです。 文字列の長さが統一されていれば、比較的簡単なのですが、今回は文字列の長さが不規則です。よろしくお願いします。

  • 文字列の置換について。

    ダブルコーテーションで囲まれ文字列が あったとします。 その文字列の中に含まれる半角カンマを なくしたいのですが、 リプレイスだと反応がありません。 その他の文字は置換出来るのですが。 どなたから、ダブルコーテーションに囲まれた 文字列の中の半角カンマを取り除く方法が ありましたらアドバイス下さい。 どうぞよろしくお願いします。

    • ベストアンサー
    • Java
  • エクセルマクロでワードの置換マクロを作りたい

    エクセルで作成した置換シートを使用して、ワードの資料内の間違え語を一括置換えできるエクセルマクロを作りたいです。 置換えシートには、A列に間違え語、B列に正しい語が入力してあります。 色々やってみたのですが、うまくいきません。 分かる方、教えていただけませんか?

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

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

  • エクセル関数で文字を置換する方法

    エクセル2000のワークシート関数で、範囲を指定して特定の文字を別の文字に一発で置換できるでしょうか。例えば次の範囲で「○」のセルだけ「1」に変換したいのです。よろしくお願いします。    1列  2列  3列    1行  ○  ○   × 2行  ×  ○   ○ 3行  ×  ○   ×                 ↓    1列  2列  3列    1行  1  1    2行     1   1 3行     1

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

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

  • エクセルの置換について

    すぐ教えていただきたいんです! エクセルの文字列(この文字列は行ごとにいろんな文字列なんですがその前にある決まった文字列を付け加えたい場合はどのようにしたらいいでしょうか? たとえば置換だと、行に入力したその文字列1パターンしか置換してくれないんですよね? なんだかつたない説明ですいませんが、お分かりになる方教えてください!

専門家に質問してみよう