人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルマクロを作ってください!文書出力関係

文書というシートに画像のようにA列にキーワード、B列にそのキーワードで呼び出す単語(文書)がならんでいます。

文書以外のシートでどのセルを選択していても、


マクロを開始すると、インプットボックスが出てきて、
「文書シートのA列のキーワードを入れてください。」


と表示され、A列の文字を入れてエンターを押すと、次のキーワードも連続で入れられるようにします。最後大文字や小文字の*(コメ)や*を入れると終了の合図で、
それまでに入れたキーワードに付随するB列のワードが連続でそのセルに入るようにしてほしいのです。(いいえか、キャンセルボタンもお願いします⇒すべて無効とします)

例・画像でいえば、13*と入力すれば、そのセルに「りんごレモン」
3穀物2*ならば、「レモン米みかん」と表示されます。


もともと、セルに何らかの情報が入っている場合はその情報のあとにいま入力されるべき文字列がつくことにします。またその何らかの情報の中に【■】があったら、いま入力される情報が置換されるとします。(ここはわかりづらいので追記します)

どうかよろしくお願いいたします。

1402140747
●拡大する

●質問者: naranara19
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

選択しているセルに、もともと

青森県特産
とあったとして、13*ならば、青森県特産りんごレモン
となります。


元々のセルに
僕の好きなものは【■】です。
とあって、3穀物2*ならば、
僕の好きなものはレモン米みかんです。

となります。【■】が2個以上あったとしたら、初めのもののみ置換されるものとします。


1 ● Mook
●300ポイント ベストアンサー

こんなことでしょうか?

Option Explicit

Sub あるプログラマのコード()
 Dim mRes
 Dim fRes As Range
 Dim cTxt As String
 Do While True
 mRes = InputBox("文書シートのA列のキーワードを入れてください。" & vbNewLine & cTxt, "naranara19 inputbox")
 If StrPtr(mRes) = 0 Then Exit Sub
 If StrConv(mRes, vbNarrow) = "*" Then Exit Do
 If mRes <> "" Then
 Set fRes = Worksheets("文書シート").Range("A:A").Find(mRes, lookat:=xlWhole)
 If Not fRes Is Nothing Then cTxt = cTxt & fRes.Offset(, 1).Value
 End If
 Loop
 If InStr(ActiveCell.Value, "【■】") > 0 Then
 ActiveCell.Value = Left(ActiveCell.Value, InStr(ActiveCell.Value, "【■】") - 1) & cTxt & Mid(ActiveCell.Value, InStr(ActiveCell.Value, "【■】") + 3)
 Else
 ActiveCell.Value = ActiveCell.Value & cTxt
 End If
End Sub

naranara19さんのコメント
いつもお世話になっております。長期にわたってご活躍されていらっしゃるんですね。完璧な内容でして、感謝、感謝です。 今後も投稿した際には、ぜひ見ていた打だけたら幸いです。どうかよろしくお願いいたします。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ