質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

2回答

21956閲覧

excelのマクロを使い、指定のセル内の末尾に文字を追加

ryuujinn

総合スコア72

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2016/11/29 02:41

編集2016/11/29 03:05

excelのマクロを使い、指定(A1)のセル内の末尾に文字を追加したいのですが
以下のコードだと選択範囲全てにfaa-001が入ってしまいます

やりたいことはA1セルにhttp://www.example.com/abc/
とあった場合に

faa-001を末尾に追加したいだけです

http://www.example.com/abc/

は毎回変わりますが、末尾に追加したいfaa-001は変わりません

処理前↓

http://www.example.com/abc/

やりたい処理↓

http://www.example.com/abc/faa-001

としたいです

Sub 選択されているセル範囲に対して、faa-001を末尾に追加() Dim xRng As Range Const xConst As String = "faa-001" If TypeName(Selection) = "Range" Then For Each xRng In Selection xRng.Value = xRng.Value & xConst Next xRng End If End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2016/11/29 02:55

何がしたいのか不明です。追加する文字列は、セルの位置によって変わるという事ですか?選択範囲全体ではなく、選択範囲の左上隅のセルにだけ文字列を追加したいという事ですか????
guest

回答2

0

掲示ソースにはコメントが1つもありませんが、この10行足らずのコードの各行でそれぞれどんな処理が行われているか、正しく把握できていますか?

まずは今書かれている処理の意味を把握しましょう。
そしてそのコードの意味をコメントとして記述してみましょう。

これだけで今回の目的に沿わないコードがどこなのかが分かりやすくなります。

Sub 選択されているセル範囲に対して、faa-001を末尾に追加() Dim xRng As Range '対象セルの取り出し用変数 Const xConst As String = "faa-001" '末尾に追加する文字列 If TypeName(Selection) = "Range" Then '現在選択されていものが"Range"(セル範囲)の場合 '選択範囲に含まれるセルをひとつずつループ処理 For Each xRng In Selection '取り出したセルの値に「末尾に追加する文字列」を追記する xRng.Value = xRng.Value & xConst Next xRng End If 'A1セルだけでいいのならわざわざ選択範囲をループする必要はない Range("A1").Value = Range("A1").Value & xConst End Sub

投稿2016/11/29 04:22

jawa

総合スコア3013

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryuujinn

2016/11/30 00:53

jawaさん、コメントありがとうございます >コードの意味をコメントとして記述 コメントして頂けたお蔭でいらない部分が分かりました ありがとうございます
jawa

2016/12/02 01:22

まいど少し厳しいアドバイスになってしまっていますが、ソフトウェア技術者とは単に動くものを作るのが役割ではなく、プログラムを理解し制御できるところが大事なのだと思いますので、どうぞご理解くださいm(__)m 目的を達せられたようで何よりです。(^-^)b
guest

0

そうですね、提示されているソースは
条件判定なしで 選択範囲のセルすべてに追加するようになっていますね。

特定の条件に一致した場合のみ追加したい、という場合は IF などで条件判定をする必要があります。

末尾に追加する条件がわかりませんが、以下のどちらかでしょうか。
# 以下で薄灰色になっているコードは コメントアウトしている部分です。(実際には実行されない部分)

Sub AddTailFaa001() Const xConst As String = "faa-001" Dim xRng As Range If TypeName(Selection) = "Range" Then For Each xRng In Selection '★選択範囲をLOOPで回す '★元々のソース。問答無用で末尾に追加 'xRng.Value = xRng.Value & xConst '★セルが空じゃなければ末尾に追加するパターン 'If xRng.Value <> "" Then ' xRng.Value = xRng.Value & xConst 'End If '★セル値が http で始まっている場合は末尾に追加するパターン If InStr(xRng.Value, "http") = 1 Then xRng.Value = xRng.Value & xConst End If Next xRng End If End Sub

投稿2016/11/29 03:12

sk_3122

総合スコア1126

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sk_3122

2016/11/29 03:13

ん? A1 だけで良いということ?選択範囲のセルではなく? となるとちょっと変わってきますね。すみません、上記はスルーしてください。
ryuujinn

2016/11/29 03:17

sk_3122さん、コメント、コード記載ありがとございます 単純にA1にある文字列の末尾にfaa-001を追加したいです 私が記載したような選択範囲、選択範囲全てではなく、A1だけでいいのですが 難しいでしょうか?
sk_3122

2016/11/29 03:29 編集

いえ、難しくはないです。場所は A1 固定で良いのでしょうか? もしそうだとすると、LOOP (For Each) でぐるぐる回す必要はありません。 ■Range("A1").Value で A1 の値が取れます。 ■末尾に追加すること自体は Dim xRng As Range ' 変数を定義 Set xRng = Range("A1") ' 変数にA1への参照をセット あとは元々書かれていた「末尾に追加するコード」でできます。 ■ただ、問答無用で追加してしまって良いのか、  ・セルが空の場合は?  ・URLでも何でもない値が入っていた場合は?(httpで始まらない場合)  ・すでに末尾が faa-001 の場合は?(複数回実行するとどんどん追加されていってしまうが良いか)  あたりを検討した方が良いのかなと思います。
ryuujinn

2016/11/30 00:55

sk_3122さん、コメント、コード記載ありがとうございまいした >・セルが空の場合は?  ・URLでも何でもない値が入っていた場合は?(httpで始まらない場合)  ・すでに末尾が faa-001 の場合は?(複数回実行するとどんどん追加されていってしまうが良いか) 上記は検討していなかったので助かりました ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問