特定の文字を含むセルのコピー

このQ&Aのポイント
  • エクセルで特定の文字を含むセルのコピーをする方法を教えてください。
  • セルのデータの中から特定の文字を含むセルのみを別のシートにコピーする方法を教えてください。
  • マクロを使って特定の文字を含むセルのみをシート2にコピーする方法を教えてください。
回答を見る
  • ベストアンサー

特定の文字を含むセルのコピー

こんにちは。マクロ初心者で、質問なのですが、 エクセルで、シート1の各セルにデータが入っているのですが、 この中から特定の文字を含むセルのみをシート2の同じ位置のセルにコピーしたいのですが、 マクロで実行する場合、どうすればよいでしょうか? 例: ABC123|ACD445|AAD556 HJK774|JABT54|DFR548 XSF748|KI5557S|47ABO7 のようなシート1があって、マクロを実行すると シート2に「AB」を含むセルのみコピーして ABC123|     |      |JABT54|      |      |47ABO7 といった感じにしたいのですが、 特定の文字は、いつも同じ文字を含むセルを抜き出しています。

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

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

一例です。 特定文字の大小文字、全半角は区別せず抽出しています。 特定する場合はMatchcase(大小文字)、matchbyte(全半角)をTrueで 調整して下さい。 Sub Sample() Set pos = Cells.Find(What:="AB", _ lookat:=xlPart, MatchCase:=False, matchbyte:=False) If pos Is Nothing Then Exit Sub Set pos1st = pos Do Sheets("sheet2").Cells(pos.Row, pos.Column) = pos Set pos = Cells.FindNext(pos) Loop Until pos.Address = pos1st.Address End Sub

Knyako
質問者

お礼

回答、ありがとうございます。 早いですね。一瞬だったんで最初、2回も実行してしまいました(笑) 大小文字、全半角も選べてありがたいです。 応用もできそうです。大切にします。 ありがとうございます。

その他の回答 (4)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.5

#4です。検索文字を与えるところで、折角設定した定数を使っていませんでした If Not (buf(i, j) Like ("*" & searchWord & "*")) Then buf(i, j) = Empty に変更して下さい。失礼いたしました。

Knyako
質問者

お礼

2つも教えていただきありがとうございます。 いろいろな方法があるのですね。勉強になります。 この変部分は、 Sub test2() Dim targetRange As Range Dim buf As Variant Dim i As Long, j As Long Const searchWord As String = "AB" Set targetRange = Worksheets(1).Range("A1").CurrentRegion buf = targetRange For i = 1 To UBound(buf, 1) For j = 1 To UBound(buf, 2) If Not (buf(i, j) Like ("*" & searchWord & "*")) Then buf(i, j) = Empty Next j Next i Worksheets(2).Range(targetRange.Address) = buf End Sub という風に変更ということですね。 わざわざご丁寧にありがとうございます。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#3です。もう一つ思いつきました。やっている事は#1に類似ですが、速いと思います。 Sub test2() Dim targetRange As Range Dim buf As Variant Dim i As Long, j As Long Const searchWord As String = "AB" '全角の例 Set targetRange = Worksheets(1).Range("A1").CurrentRegion buf = targetRange For i = 1 To UBound(buf, 1) For j = 1 To UBound(buf, 2) If Not (buf(i, j) Like "*AB*") Then buf(i, j) = Empty Next j Next i Worksheets(2).Range(targetRange.Address) = buf End Sub

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

一応マクロでやっています。全角と半角は区別しますので、ご注意下さい。 Sub test() Dim targetRange As Range Const searchWord As String = "AB" '全角の例 Set targetRange = Worksheets(1).Range("A1").CurrentRegion With Worksheets(2) .Range(targetRange.Address).FormulaR1C1 = "=IF(ISERROR(FIND(""" & searchWord & """," & Worksheets(1).Name & "!RC)),""""," & Worksheets(1).Name & "!RC)" .Range(targetRange.Address).Value = .Range(targetRange.Address).Value End With End Sub

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

試してください。 (全角限定の例) Dim c As Range For Each c In Sheets("Sheet1").Range("A1:C3") If c.value Like "*AB*" Then '★1 c.Copy Sheets("Sheet2").Range(c.Address) '★2 End If Next (半角全角共コピーする例) ★1の処を下記に変えてください。 If StrConv(c.value, vbNarrow) Like "*AB*" Then ★2の処は下記でも大丈夫です。 Sheets("Sheet2").Range(c.Address).value = c.value

Knyako
質問者

お礼

早速の回答ありがとうございます。 無事にデータの写しかえを行なうことが出来ました。 ありがとうございます。

関連するQ&A

  • 特定のセルの数値の行数だけコピーしたい

    お世話になります。 Excel2002で次のことをやろうとしています。 特定のセルに表示されている数値の行数だけコピーする。 これを、マクロを使って実行したいのですが、その方法が思いつきません。 どのようにしたら良いかお教えください。 [コピー元]のシートの"J53"のセルに、例えば「13」が表示されています。 この「13」がコピーする行数です。 このシートには多くのデータが入っていますが、そのうちの"A1"~"G13"だけのセルをコピーし、[コピー先]のシートの"A8"~"G20"に貼り付けるものです。 コピーする行数を表示しているセル"J53"は、常にこの位置です。 コピーするデータの列は常に"A"~"G"で、変わることはありません。 コピーするデータの行は、始まりは常に"1"からで、最後は"J53"に表示されている数値の行です。 コピーする行数を示す"J53"に表示される数値は「1」~「52」の範囲内です。 コピー先の位置は、[コピー先]のシートの"A8"~で、変わることはありません。 類似の質問を探したり、他にもネット上で探したのですが見つかりませんでした。 よろしくお願いします。

  • Excel で特定の文字を取り出してその文字だけをコピーする方法

    VBAや関数に詳しくないので、というよりもExcelにあまり詳しくないので、とりあえずこうすればできるという方法を具体的に教えていただければと思います。 やりたいことは2つあります。内容はそれぞれこんな感じです。 (1) セルA1に”・・・・・・・○”  (・は任意の文字とします。)   セルA2に”・・・・・・・×”  (抽出したい文字は最後に来ます。) とあったとしたら セルB1に”○” セルB2に”×” というふうに特定の文字をコピーする。 それらの文字が含まれていなかったり、あってもそれが最後でなければ何もしません。 (2) (1)で作ったシートを他のシートにコピーしたとして、そのシートには列2に特定の文字○、×などが入っています(空欄の場合もあります。)。この中から列2の内容が×の行を削除します。 Officeについては詳しくありませんが C、C++やJavaなどは使っていたのでスクリプトについては読んでいるうちに慣れると思うのですが、肝心のExcelを使いこなしていないのでこれをマクロで保存した方がいいのか関数にしたほうがいいのかということもはっきりしていないレベルですのでその辺も交えて教えていただけるとありがたいです。 本来であれば自分である程度の勉強をしなければいけないのはわかっているのですが、急ぎということでよろしくお願いします。

  • エクセルのマクロで特定の文字があるときだけコピーできるようにしたい

    エクセルのマクロで特定の文字があるときだけコピーできるようにしたい エクセルでこういう表があるとします ココカラ 1 * 2 b 15 3 * 4 d 19 5 e 25 6 * 7 g 35 8 * 9 j 46 10 k 54 ココマデ このような表があるとき、マクロを使ってもしB列に「*」以外の文字(この場合アルファベットのb) があるときは左のセル(2)をずっと下のセルにコピー(仮にA50とします)した後、右のセル(15)をB51にコピー、 次は文字が「*」なのでコピーはせずにd列になったら4と19をC50,D51にコピー・・・ という作業をセルに「ココマデ」と書いているところまで繰り返す、というマクロを作りたいのですが、どうすれば いいのでしょうか?

  • 特定の文字を含むセル周辺を別のシートに表示させたい

    お世話になります。 Excel2002で次のことをやろうとしているのですが、良い方法が見つかりません。 特定の文字を含むセルと、その周辺の一部のセルを別のシートに表示させたい。 どのようにしたら良いかお教えください。 [元]のシートの"A1:E112"のセルに文字や日付、数値など色々入っています。 その中に"目的の文字"という文字を含んだ文字列が入っているセルがあります。 そのセルには、"目的の文字"の後ろに":変化する日付"が入っています。 つまり、次のようになっています。 "目的の文字:2015年10月23日"(日付は変化します) そして、このセルの位置はそのときによって"A15:C112"のセルの中で変化します。 このセルを含む周辺の一部のセルだけを[抽出]のシートに表示させたいのです。 表示させたいセル範囲は、"目的の文字"を含むセルの2行上から2列右までで、3行3列計9個のセルです。 画像の例では[元]のシートの"A35:C37"です。 可能であれば関数だけで解決したいのですが、そのような方法はあるでしょうか? 無理でしたらマクロで実行する方法はあるでしょうか。 よろしくお願いします。

  • EXCELで文字列の特定の文字の位置を知る方法

    EXCELで文字列の特定の文字の位置を知る方法 EXCELでセル中の文字列、例えば、"abc 4/3 5/5 6/4" の最後の"/"の位置を知る方法を関数の組み合わせで出来ますか? 教えてください。"/"の数は任意で最後の"/"の位置を知りたいのですが??? どうかよろしくお願いします。VBAでなく関数の組み合わせでお願いします。

  • エクセルマクロ特定のセル

    マクロの勉強したばかりですみませんが、 エクセル2003で、特定のセルが選択されたときにマクロを実行したいのですが、可能でしょうか? どうやればよいか教えていただきたいです。

  • エクセルでセル内改行された文字から特定の文字を抜き出す関数を教えてくだ

    エクセルでセル内改行された文字から特定の文字を抜き出す関数を教えてください。 1つのセル内に、改行された文字がいくつか入っています。 例えば、A1セルに ●〒123-4567 ●東京都中央区・・・・ ●電話 03-123-****** ●メールアドレス abc@de.com この内、メールアドレスである、abc@de.comだけをB1セルに抜き出したいと 考えています。 これを抜き出す関数があれば教えて頂きたいです。 宜しくお願いします。

  • Excel;特定の文字を含むセルを書き出す方法

    お世話になります。 あるExcelシートの2列×300行ぐらいの範囲のセル内に 文字が入っています。 セル内(例A23idokensi)に特定の文字(例:A23)を含んでいたら、 もしくはセルを抜き出す方法はあるでしょうか? やりたいことは、アトランダムに入力されているところから、 特定の文字を含んだセルだけ取り出して内容とセルの個数を 数えることです。

  • Excelでセル内の文字列のみをコピーする方法

    Excelでセル内の文字列のみをクリップボードにコピーする方法を教えてください。 ※クリップボードにコピーをする方法であり、他のセルに値のみをペーストする方法ではありません。 満たしたい点は2つです。 ・表示している文字列のみを取得 ・複数のセルを同時にコピー 一つのセルに以下の文字列が入っていた場合(#以外) #123 #"abc" コピーするとクリップボードを文字列として取得すると以下の文字列が得られます #"123 #""abc""" これを以下の文字列が得られるようにしたいのです。 #123 #"abc" 1つのセルだけでいい場合は、セルを編集状態にしてコピーしたり アクティブセルの数式バーをコピーすればいいのですが、 これは当然、複数のセルを同時に選択する場合には使えません。 VBAを使う方法でもそうでなくてもかまいません。 (VBAの場合はコードもお願いしたいです) よろしくお願いします。

  • エクセルで同一シート内にある特定文字の右隣のセルの値を合計する方法はあ

    エクセルで同一シート内にある特定文字の右隣のセルの値を合計する方法はありませんか? シート内に散らばって表示されている特定文字列の右隣の値を合計したいのです。 位置的にランダムなのでSUMIFではうまく指定できませんでした。 よろしくお願いします。

専門家に質問してみよう