いつもお世話になっております。
この度自動化したい業務がございまして、皆様の
お知恵を拝借したく質問させていただきました。
下記の画像を参考にご説明させていただます。
A列には様々な種類の食品名の文字データが入力されており、
ここではりんご すいか みかんとします。
Cセルのハイフン(-)を除いたデータをA列より下記に貼り付けたいのですが、
ただ貼り付けるのではなく、りんごの後ろに貼り付けアンダーバーを
引きたい場合はどの様なプログラムの構成になるのでしょうか?
何卒よろしくお願いいたします。
No.7ベストアンサー
- 回答日時:
補足拝見しました。
ちょっと丸投げし過ぎでは…
No.6がまるっきり無意味な回答になってしまいました。
No.5の回答で、概ね希望の動作になるはずですが、確認されてます?
処理開始行が4行目からなら…
> For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'A列1行目から最終行まで繰り返し
これが1行目から処理してるって書いてるんだから、
For i = 4 To ・・・
にすればいいんじゃないかなって想像つくと思うし、
挿入一覧のキーワードを挿入後に「-」に置き換える必要がないなら
> Range("C" & i) = "-" '挿入が済んだので、挿入ワードを「-」に置き換える。
ここをまるっといらない(削除すればいい)と気づけそうだけど…
末尾に編集後のものを付けますが、
実際に No.5 の回答のもから、自分でいじって試してみることを勧めます。
いじることで挙動がどう変わるのか知ることでも、
VBAを覚えていくことにも繋がりますので。
---------------------
処理後の着色が必要なのかわからないけど、
No.5 を上記の編集したものに、着色処理の1行だけ追加したものです。
Sub Macro2()
Dim Key As String
Dim x As Integer
Dim i As Integer, j As Integer
Key = "りんご" '挿入の目印となるキーワード
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row 'A列1行目から最終行まで繰り返し
If Range("C" & i) <> "-" And InStr(Range("A" & i), Key) > 0 Then
'挿入ワードが「-」ではなく、A列にKeyがあれば処理実行
Range("A" & i) = Replace(Range("A" & i), Key, Key & Range("C" & i))
'A列セルの[Key] を [Key + 挿入ワード] に置き換える。
For j = 1 To Len(Range("A" & i)) - Len(Range("C" & i)) + 1
'A列セルの文字目から、[Key]のある位値を探していく
If Mid(Range("A" & i), j, Len(Key)) = Key Then
'[Key]がみつかったら…
Range("A" & i).Characters(Start:=j + Len(Key), Length:=Len(Range("C" & i))).Font.Underline = xlUnderlineStyleSingle
'その後に続く挿入ワードにアンダーラインを引く
End If
Next
Range("A" & i & ":C" & i).Interior.Color = 65535
'処理を行った箇所を着色
End If
Next
End Sub
zongaiさんの仰る通りです。
失礼な態度、誠に申し訳ございません。
普段は自分で色々といじりこういう動きになるのだと関心に
重ねプログラムを編集し勉強するのですが、仕事に追われ
時間を作ることができませんでした。
知識が乏しい私の為にとても分かりやすく丁寧に
コメントを付けていただき大変感謝しております。
こちらのプログラムで理想の動きが実現でき、何時間も
かかっていた作業が一瞬で終わり感激しております。
心より感謝申し上げます。
ありがとうございました。
早速色々といじりVBAの勉強と共に、他の
業務の効率化向上に使わせていただきます。
今後ともこちらに質問させていただくと思いますが、
その際はどうぞよろしくお願いいたします。
この度は本当にありがとうございました。
No.8
- 回答日時:
丸っきり放置されて多分理想とは異なる結果なのでしょうね。
ま、知恵袋で慣れてはいますけど。
それにこの方法は15年も前に他の回答者が類似した質問に対して回答していたコードの改良ですから、古臭くてダメだったのかと反省。
Sub megu_2()
Dim myReg As Object
Dim match, r As Range
Const keyword = "りんご" 'キーワード
Set myReg = CreateObject("VBScript.RegExp")
myReg.Global = True
For Each r In Range("A4", Cells(Rows.Count, "A").End(xlUp))
If r.Offset(, 2).Value <> "-" And InStr(r.Value, keyword) > 0 Then
With r
.Value = Replace(.Value, keyword, keyword & .Offset(, 2).Value)
myReg.Pattern = keyword & .Offset(, 2).Value
If myReg.Test(.Value) Then
For Each match In myReg.Execute(.Value)
.Characters(Start:=match.FirstIndex + Len(keyword) + 1, Length:=match.Length - Len(keyword)) _
.Font.Underline = xlUnderlineStyleSingle
Next
End If
End With
End If
Next
Set myReg = Nothing
End Sub
めぐみんさん、いつもお世話になっております。
回答ありがとうございます。
無視する形となってしまい大変申し訳ございません。
めぐみんさんが改めて作成していただいたこちらの
VBAでも私が理想とする動きが実現できました。
早速色々といじらせていただき、少しずつでは
ありますが知識をつけていきたいと思います。
ありがとうございました。
No.6
- 回答日時:
挿入する言葉は
C列の各行にあるのではなく、
C1セルに限定されるということで良いでしょうか?
これでいかがでしょう?
Sub Macro2()
Dim Key As String
Dim x As Integer
Dim i As Integer, j As Integer
Key = "りんご" '挿入の目印となるキーワード
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'A列1行目から最終行まで繰り返し
If Range("C1") <> "-" And InStr(Range("A" & i), Key) > 0 Then
'挿入ワードが「-」ではなく、A列にKeyがあれば処理実行
Range("A" & i) = Replace(Range("A" & i), Key, Key & Range("C1"))
'A列セルの[Key] を [Key + 挿入ワード] に置き換える。
For j = 1 To Len(Range("A" & i)) - Len(Range("C1")) + 1
'A列セルの文字目から、[Key]のある位値を探していく
If Mid(Range("A" & i), j, Len(Key)) = Key Then
'[Key]がみつかったら…
Range("A" & i).Characters(Start:=j + Len(Key), Length:=Len(Range("C1"))).Font.Underline = xlUnderlineStyleSingle
'その後に続く挿入ワードにアンダーラインを引く
End If
Next
End If
Next
End Sub
No.5
- 回答日時:
コメント拝見しました。
> A列全てのりんごのキーワードに挿入することは可能でしょうか?
A列の全ての行に対して、ということ?
A列のセルにキーワードが複数存在しているケースのこと?
わからなかったので、両方取り込んでみました。
Sub Macro2()
Dim Key As String
Dim x As Integer
Dim i As Integer, j As Integer
Key = "りんご" '挿入の目印となるキーワード
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row 'A列1行目から最終行まで繰り返し
If Range("C" & i) <> "-" And InStr(Range("A" & i), Key) > 0 Then
'挿入ワードが「-」ではなく、A列にKeyがあれば処理実行
Range("A" & i) = Replace(Range("A" & i), Key, Key & Range("C" & i))
'A列セルの[Key] を [Key + 挿入ワード] に置き換える。
For j = 1 To Len(Range("A" & i)) - Len(Range("C" & i)) + 1
'A列セルの文字目から、[Key]のある位値を探していく
If Mid(Range("A" & i), j, Len(Key)) = Key Then
'[Key]がみつかったら…
Range("A" & i).Characters(Start:=j + Len(Key), Length:=Len(Range("C" & i))).Font.Underline = xlUnderlineStyleSingle
'その後に続く挿入ワードにアンダーラインを引く
End If
Next
Range("C" & i) = "-" '挿入が済んだので、挿入ワードを「-」に置き換える。
End If
Next
End Sub
No.4
- 回答日時:
Sub megu()
Dim myReg As Object
Dim match, r As Range
Const keyword = "りんご" 'キーワード
Set myReg = CreateObject("VBScript.RegExp")
myReg.Global = True
For Each r In Range("A1", Cells(Rows.Count, "A").End(xlUp))
If r.Offset(, 2).Value <> "-" And InStr(r.Value, keyword) > 0 Then
With r
.Value = Replace(.Value, keyword, keyword & .Offset(, 2).Value)
myReg.Pattern = keyword & .Offset(, 2).Value
If myReg.Test(.Value) Then
For Each match In myReg.Execute(.Value)
.Characters(Start:=match.FirstIndex + Len(keyword) + 1, Length:=match.Length - Len(keyword)) _
.Font.Underline = xlUnderlineStyleSingle
.Offset(, 2).Value = "-"
Next
End If
End With
End If
Next
Set myReg = Nothing
End Sub
違ってたらスル~して下さい。
No.2
- 回答日時:
気になっただけです。
(初級者ですので)C列の追加する文字がA列に事前に存在(”りんご”の後ろではない場所)している可能性はどうなのかなって思いました。
質問文で言えば、
『ばなな すいか りんご みかん』
が
『ばなな すいか りんごばなな みかん』
となる可能性の有無です。
No.1
- 回答日時:
質問にかかれている内容は反映できる程度のもの。
Sub Macro1()
Dim Key As String
Dim x As Integer
Key = "りんご" '挿入の目印となるキーワード
If Range("C1") = "-" Then Exit Sub '挿入ワードが「-」なら終了
If InStr(Range("A1"), Key) = 0 Then Exit Sub 'A1セルにKeyが無ければ終了
x = InStr(Range("A1"), Key) + Len(Key)
'ワードが挿入される文字位置
'Keyの始まる文字位置 + Keyの文字数
Range("A1") = Left(Range("A1"), InStr(Range("A1"), Key) + Len(Key) - 1) & _
Range("C1") & Mid(Range("A1"), x, Len(Range("A1")))
'Keyまでの文字 & 挿入ワード & Key以降の文字
' とつなげて、A1セルへ書き込み
Range("A1").Characters(Start:=x, Length:=Len(Range("C1"))).Font.Underline = xlUnderlineStyleSingle
'A1セルで、ワード挿入位置から、ワードの文字数分だけ下線を引く
Range("C1") = "-" '挿入が済んだので、挿入ワードを「-」に置き換える。
End Sub
zongaiさん、回答いただきありがとうございます。
重ねこちらのVBAのプログラムありがとうございます。
実行させていただき早速で申し訳ないのですが、
A列全てのりんごのキーワードに挿入することは可能でしょうか?
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を条件に指定範囲のデータを貼り付けるVBA 3 2023/01/15 06:14
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Visual Basic(VBA) ExcelVBAの複数指定範囲の構文 2 2022/05/26 22:39
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
Excelで、あるセルの値に応じて...
-
マクロ 最終列をコピーして最終...
-
DataGridViewに空白がある場合...
-
VBAで、特定の文字より後を削除...
-
rowsとcolsの意味
-
B列の最終行までA列をオート...
-
VBAを使って検索したセルをコピ...
-
VBAで、離れた複数の列に対して...
-
マクロ 関数を使った抽出でエラ...
-
IIF関数の使い方
-
VBAで重複データを確認したい
-
Changeイベントでの複数セルの...
-
VBAのFind関数で結合セルを検索...
-
エクセル アクティブセルから...
-
文字列の結合を空白行まで実行
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報
zongaiさん、回答ありがとうございます。
誠に申し訳ございませんが、不明点がございましたので補足させていただきます。
作成していただいたVBAの実行後の処理ですが、添付しました画像の動きとなりました。
2行目のりんごのみ挿入が行われ、これより下記には挿入がされない様です。
私が理想とします動きは6行目より下記の動きを理想とします。
よろしくお願いいたします。
申し訳ございません、重ね補足させていただきます。
先程補足させていただいた内容に修正がございます。
こちらに添付した画像での処理を理想の形としたいと思います。
A4セルより下記の【りんご】をキーワードに
C4セルより下記のデータを挿入させたいと思います。
よろしくお願いいたします。
先程No6の回答に気が付かず補足してしまいました。
申し訳ございません。
何卒宜しくお願いいたします。