Excelマクロで入力によって出力の文字列を変える

このQ&Aのポイント
  • Excel2003マクロで入力によって出力の文字列を変える方法について教えてください。
  • 例えば、C6のセルに「***-222-333-444」が入力されている場合、それを分割して「***」をC7に出力します。ただし、「***」が「666」の場合は「666-777」を出力し、それ以外はそのまま出力します。
  • 出力先が固定のセル(C7)であるExcelマクロで、特定の文字列の場合には別の文字列を出力する方法について教えてください。
回答を見る
  • ベストアンサー

Excelマクロで入力によって出力の文字列を変える

Excel2003マクロである文字列の時に違う処理をしたいと考えています。 例えば、 C6のセルに「***-222-333-444」が入力されているとします。 この文字列をSplit(Range("C6"), "-")で分割し、***をC7に出力します。 このとき、「***」が「666」の場合は「666-777」 それ以外はそのままをC7のセルに出力したいと考えています。 自分で作ったマクロは tmp = Split(Range("C6"), "-") If tmp(0) = "666" Then Range("C7") = "666-777" End If Range("C7") = tmp(0) ですが、「666」のままになってしまいます。 この後の処理として、行きたいサイトのアドレスを生成しますので、 できれば出力先はC7のセルに固定したいのですが、どうすればよろしいでしょうか? よろしくお願いいたします。

  • TT65
  • お礼率37% (3/8)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

tmp = Split(Range("C6"), "-") If tmp(0) = "666" Then Range("C7") = "666-777" else rang("C7") = range("C6") End If といったことでしょうか。

TT65
質問者

お礼

先程、後輩が乱入して直していきました。 結果としては以下の通りです。 tmp = Split(Range("C6"), "-") Range("C7") = tmp(0) If Range("C7") = "666" Then Range("C7") = "666-777" Else End If keithin様含めてコレを読んでくださった皆様ありがとうございました。

TT65
質問者

補足

早速の回答をありがとうございます。 説明が悪かったかもしれませんが、 C7にはC6をそのまま出力するのではなく、 ***をそのまま出力するイメージでした。

関連するQ&A

  • エクセルマクロで、書式が違っても文字列を評価する方法

    文字列書式のセルと、標準書式のセルの数字文字列を比較したいのですが、うまくいきません。 書式が違うと、range.textも違う値になってしまうようです。 結局、現状では一度文字列変数の中に一度いれてから処理していますが、もっと他によい方法はないでしょうか? ------------------------------- If range1 = range2 Then  ・・・・・ End If ------------------------------- Dim temp1 As String Dim temp2 As String If temp1 = temp2 Then ・・・・・・ end If ------------------------------

  • Excel マクロ 改行数を求めたい

    いつもお世話になってます。 今Sheet1のC列のデータをSheet2のD列に移すマクロを作っていますが、 Sheet1には1~4行位のセルもあり、それを1行毎に分割してコピーしたいと考えています。 Splitで分割してみたのですが、 tmp = Split(Range("C1"), chr(10)) Sheets("Sheet2").Select Range("D9")=tmp(0) Range("D10")=tmp(1) Range("D11")=tmp(2) Range("D12")=tmp(3) といった感じにすると 改行数が1~3の場合、エラーが出てしまいます。 (実際にはC列にデーターがある分だけ上記を繰り返します。) そこで改行数を求めようとしましたが、 a = InStr(Range("C1"), chr(10)) これでは何行あっても数値(この場合は"a")が10になってしまい、うまくできません。 何かいい手段がありましたらご教授願います。 よろしくお願いします。

  • マクロ 文字列の比較について質問

    いつもお世話になっています。 マクロの文字列の比較方法について質問致します。 異なるシートの文字列を比較して、一致したら処理をするというマクロを作っているのですが、文字列の比較がうまくいきません。 解る方がいましたらアドバイスをお願いします。 Rangeの使い方がおかしいのでしょうか? For L = 1 to LAST step 1 If Range(Sheet1.Cells(L, 1)).Text = Range(Sheet2.Cells(M, 2)).Text Then ・ ・ ・ end if ※Mは定数です。

  • Excelマクロにて文字列連結

    現在Excelのマクロにて文字列の連結を行っているのですが、 繋いだ文字列を改行を付けて連結を行いたいです。 セルとセルの中の文字列を改行を付けて連結するにはどうしたらいいのでしょうか? 例 A1セル「あああ」 B1セル「いいい」 C1セル「あああ       いいい」 Worksheets(sheet1).Range("C1").Value = Worksheets(sheet1).Range("A1").Value + Worksheets(sheet1).Range("B1").Value をすると 「あああいいい」と1行で表示されてしまいます。     ↑ ここに改行を入れるにはどうしたらいいのでしょうか? 以上、宜しくお願いします。

  • 完全に一致する文字列を検索するマクロ文

    For Each rng In Range("B1:B21200") If rng.Value <> "" Then Set out = Range("A1:A2100").Find(rng.Value) If Not out Is Nothing Then igo = out.Address End If Do While Not out Is Nothing out.Font.ColorIndex = 3 Set out = Range("A1:A2100").FindNext(out) If igo = out.Address Then Exit Do End If Loop End If Next このマクロはRange("B1:B21200")でRange("A1:A2100")を検索し一致する文字列を赤文字(A列の文字)にするのですが このマクロだと、あいまいな検索になってしまいます。 完全に一致する文字列のみ赤文字にするマクロ文を知りたいのですが。

  • エクセルマクロでの計算について(2007)

    エクセルマクロ初心者です。 試行錯誤しながら作成しています。 セルB1には直接計算式を入れており(=(480+(A1)*10)/480*I1) その結果次第(70以下)でセルC1に計算結果(=(75-B1)*.48)をいれて 70より大きければセルC1に"-"を入れたいのですが上手く計算してくれません。 この処理を約65個のセルにしようと思っています。(セルの列はバラバラです) どうすればよいかご教示ください。 ちなみに現在作成している文は Private Sub 計算_Click() Worksheets("sheet2").Select If Range("B1").Value <= 70 Then Range("C1").Formula = "=(75 - (B1)) * 0.48" Else: Range("C1").Value = "-" End If End Sub よろしくお願いいたします。

  • excelでセルクリックした時、マクロ起動

    office2003です。 sheet1のC3,C4,C5セルに、ある文字列をコピーペーストするマクロがあります。…(1) マクロ文は省略 下記は、それぞれC3,C4,C5セルが選択(クリック)された時、実行するマクロ…(2)です。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 3 And Target.Row = 3 Then personC3 If Target.Column = 3 And Target.Row = 4 Then personC4 If Target.Column = 3 And Target.Row = 5 Then personC5 end sub やりたい内容は、C3,C4,C5に文字列を表示させ、その文字列がクリックされたら、 別のマクロを起動(例.C3クリックされたら、personC3マクロ起動)させたいのです。 しかし(1)(2)の順に実行すると、C3,C4,C5セルには文字列のコピーペーストが出来ません。 (2)のマクロは、セルが変化したら実行ですから当然なのは分かっているのですが、 ここが困っている所です。 もともとC3,C4,C5に文字列が入っている場合は、(2)のマクロだけでよいのですが、 (1)を実行した後に(2)のマクロが有効とするには、どの様にしたらよいのでしょうか? 尚、やりたい内容が実現できれば、他のやり方でも可です。 条件: C3~C5までのどれかをクリックする動作は必須です。 C3からC5までに設定される文字は、固定(同一)ではありません。

  • VBA セルの値13が数値だったり文字列だったり

    セルに入った「13」が数値の場合でも文字列の場合でも処理出来る方法はありませんか? 例えば If Range("A1").Value=13 Then 処理 Endif セルの値が文字列"13"の場合、同じと認識してくれません。 いい方法はないでしょうか?

  • Excelのマクロで質問です

    セルに関数で文字が入った時にマクロを実行させる方法を教えて下さい。 今回行いたいのは、C9~C19セルにNGと表示された場合にメッセ―ジを表示したいです。 Private Sub Worksheet_Change(ByVal Target As Range) '変化のあったセルがA1セルか? If Intersect(Target, Range("C9:C19")) Is Nothing Then Exit Sub '条件判定:A1セルの値は 1 か? If Target.Value = "NG" Then MsgBox "NGです" End If End Sub このような場合C9~C19セルにNGと打ち込めばメッセ―ジが表示されるのですが あらかじめ、関数で =IF(M9="","",IF(Q9<M9,"OK","NG")) というような式がそれぞれのC9、C10、C11・・・・セルに入ってしまっています。 これだと、例えばC9セルにNGと表示されてもマクロは起動せず、メッセージが表示されません。 関数をマクロに盛り込むか、このままでもマクロが起動できるような書き方があるか 教えてください。 すみません。補足でQ9セルには =IF(I9="","",I9+"07:01")のような関数が 入力されています。

  • このマクロの説明をお願いします

    Dim buf As String Private Sub CommandButton1_Click() End Sub Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim tmp As Variant Application.EnableEvents = False tmp = InStr(2, buf, "$", vbTextCompare) tmp = Right(buf, Len(buf) - tmp) If buf = "$B$" & tmp Then Range("C" & tmp).Value = Range("C" & tmp).Value + Range("B" & tmp).Value Range(buf).Select End If Application.EnableEvents = True End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) buf = ActiveCell.Address End Sub どうやらB列の各セルに入力がされた場合、隣接するC列のセルに加算していくマクロのようです。 なんですが、 InStr関数、Right関数、Len関数あたりでやっていることがよくわかりません。 Private Sub CommandButton1_Click()は必要なのでしょうか? あと、 もっとシンプルなマクロができるようでしたらご教授ねがいます。

専門家に質問してみよう